44 lines
1.3 KiB
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)
|
|
}
|