MIF_E31222379_BE/internal/services/rating_service.go

44 lines
1.3 KiB
Go

package services
import (
"context"
"time"
"rijig/dto"
"rijig/internal/repositories"
"rijig/model"
)
type PickupRatingService interface {
CreateRating(ctx context.Context, userID, pickupID, collectorID string, input dto.CreatePickupRatingDTO) error
GetRatingsByCollector(ctx context.Context, collectorID string) ([]model.PickupRating, error)
GetAverageRating(ctx context.Context, collectorID string) (float32, error)
}
type pickupRatingService struct {
repo repositories.PickupRatingRepository
}
func NewPickupRatingService(repo repositories.PickupRatingRepository) PickupRatingService {
return &pickupRatingService{repo: repo}
}
func (s *pickupRatingService) CreateRating(ctx context.Context, userID, pickupID, collectorID string, input dto.CreatePickupRatingDTO) error {
rating := model.PickupRating{
RequestID: pickupID,
UserID: userID,
CollectorID: collectorID,
Rating: input.Rating,
Feedback: input.Feedback,
CreatedAt: time.Now(),
}
return s.repo.CreateRating(ctx, rating)
}
func (s *pickupRatingService) GetRatingsByCollector(ctx context.Context, collectorID string) ([]model.PickupRating, error) {
return s.repo.GetRatingsByCollector(ctx, collectorID)
}
func (s *pickupRatingService) GetAverageRating(ctx context.Context, collectorID string) (float32, error) {
return s.repo.CalculateAverageRating(ctx, collectorID)
}