67 lines
1.9 KiB
Go
67 lines
1.9 KiB
Go
package handler
|
|
|
|
import (
|
|
"context"
|
|
"rijig/dto"
|
|
"rijig/internal/services"
|
|
"rijig/utils"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
type PickupRatingHandler interface {
|
|
CreateRating(c *fiber.Ctx) error
|
|
GetRatingsByCollector(c *fiber.Ctx) error
|
|
GetAverageRating(c *fiber.Ctx) error
|
|
}
|
|
|
|
type pickupRatingHandler struct {
|
|
service services.PickupRatingService
|
|
}
|
|
|
|
func NewPickupRatingHandler(service services.PickupRatingService) PickupRatingHandler {
|
|
return &pickupRatingHandler{service: service}
|
|
}
|
|
|
|
func (h *pickupRatingHandler) CreateRating(c *fiber.Ctx) error {
|
|
pickupID := c.Params("id")
|
|
userID := c.Locals("userID").(string)
|
|
collectorID := c.Query("collector_id")
|
|
|
|
var req dto.CreatePickupRatingDTO
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return utils.ValidationErrorResponse(c, map[string][]string{
|
|
"body": {"Format JSON tidak valid"},
|
|
})
|
|
}
|
|
|
|
if errs, ok := req.ValidateCreatePickupRatingDTO(); !ok {
|
|
return utils.ValidationErrorResponse(c, errs)
|
|
}
|
|
|
|
err := h.service.CreateRating(context.Background(), userID, pickupID, collectorID, req)
|
|
if err != nil {
|
|
return utils.InternalServerErrorResponse(c, err.Error())
|
|
}
|
|
|
|
return utils.SuccessResponse(c, nil, "Rating berhasil dikirim")
|
|
}
|
|
|
|
func (h *pickupRatingHandler) GetRatingsByCollector(c *fiber.Ctx) error {
|
|
collectorID := c.Params("id")
|
|
ratings, err := h.service.GetRatingsByCollector(context.Background(), collectorID)
|
|
if err != nil {
|
|
return utils.InternalServerErrorResponse(c, err.Error())
|
|
}
|
|
return utils.SuccessResponse(c, ratings, "Daftar rating collector berhasil diambil")
|
|
}
|
|
|
|
func (h *pickupRatingHandler) GetAverageRating(c *fiber.Ctx) error {
|
|
collectorID := c.Params("id")
|
|
avg, err := h.service.GetAverageRating(context.Background(), collectorID)
|
|
if err != nil {
|
|
return utils.InternalServerErrorResponse(c, err.Error())
|
|
}
|
|
return utils.SuccessResponse(c, fiber.Map{"average_rating": avg}, "Rata-rata rating collector")
|
|
}
|