package mapper import ( "narasi-ahli-be/app/database/entity" ebookRatingsResponse "narasi-ahli-be/app/module/ebooks/response" ) func ToEbookRatingsResponse(rating *entity.EbookRatings) *ebookRatingsResponse.EbookRatingsResponse { if rating == nil { return nil } var userName, userEmail *string if rating.User != nil { if rating.IsAnonymous != nil && *rating.IsAnonymous { userName = stringPtr("Anonymous") userEmail = nil } else { userName = &rating.User.Fullname userEmail = &rating.User.Email } } var ebookTitle *string if rating.Ebook != nil { ebookTitle = &rating.Ebook.Title } return &ebookRatingsResponse.EbookRatingsResponse{ ID: rating.ID, UserId: rating.UserId, UserName: userName, UserEmail: userEmail, EbookId: rating.EbookId, EbookTitle: ebookTitle, PurchaseId: rating.PurchaseId, Rating: rating.Rating, Review: rating.Review, IsAnonymous: rating.IsAnonymous, IsVerified: rating.IsVerified, StatusId: rating.StatusId, IsActive: rating.IsActive, CreatedAt: rating.CreatedAt, UpdatedAt: rating.UpdatedAt, } } func ToEbookRatingsResponseList(ratings []*entity.EbookRatings) []*ebookRatingsResponse.EbookRatingsResponse { if ratings == nil { return nil } var responses []*ebookRatingsResponse.EbookRatingsResponse for _, rating := range ratings { responses = append(responses, ToEbookRatingsResponse(rating)) } return responses } func ToEbookRatingSummaryResponse(ebookId uint, ebookTitle string, averageRating float64, totalRatings int, ratingCounts map[int]int, recentReviews []*entity.EbookRatings) *ebookRatingsResponse.EbookRatingSummaryResponse { reviews := ToEbookRatingsResponseList(recentReviews) var reviewsList []ebookRatingsResponse.EbookRatingsResponse for _, review := range reviews { reviewsList = append(reviewsList, *review) } return &ebookRatingsResponse.EbookRatingSummaryResponse{ EbookId: ebookId, EbookTitle: ebookTitle, AverageRating: averageRating, TotalRatings: totalRatings, RatingCounts: ratingCounts, RecentReviews: reviewsList, } } func ToEbookRatingStatsResponse(totalRatings int, averageRating float64, ratingCounts map[int]int) *ebookRatingsResponse.EbookRatingStatsResponse { return &ebookRatingsResponse.EbookRatingStatsResponse{ TotalRatings: totalRatings, AverageRating: averageRating, RatingCounts: ratingCounts, FiveStarCount: ratingCounts[5], FourStarCount: ratingCounts[4], ThreeStarCount: ratingCounts[3], TwoStarCount: ratingCounts[2], OneStarCount: ratingCounts[1], } } // Helper function func stringPtr(s string) *string { return &s }