stylist / backend / Stylist.Domain / Mapping / ReviewMapping.cs
ReviewMapping.cs
Raw
using Stylist.Data.Models.Dtos.Review;
using Stylist.Data.Models.DTOs.Review;
using System.Linq.Expressions;
using Stylist.Data.Models.Entities;

namespace Stylist.Domain.Mapping
{
    public static class ReviewMapping
    {
        public static Expression<Func<Review, ReviewSalonPageDto>> MapToReviewSalonPageDto
           => x => new ReviewSalonPageDto()
           {
               Id = x.Id,
               Comment = x.Comment,
               Rating = x.Rating,
               User = x.Reservation.User.MapToUserReviewDto()
           };

        public static RatingSalonPageDto? MapToRatingSalonPageDto(this ICollection<Review> reviews)
        {
            if (reviews.Count == 0) 
                return null;

            return new RatingSalonPageDto
            {
                AverageRating = reviews.Average(r => r.Rating),
                NumberOfReviews = reviews.Count
            };
        }

        public static Expression<Func<Review, ReviewPageDto>> MapToReviewPageDto
           => x => new ReviewPageDto()
           {
               Id = x.Id,
               Comment = x.Comment,
               Date = x.Date,
               Rating = x.Rating,
               User = x.Reservation.User.MapToUserReviewPageDto(),
               Hairdresser = (x.Reservation.Schedule.Hairdresser).MapToHairdresserReviewPageDto(),
               Service = x.Reservation.Service.MapToServiceReviewPageDto()
           };
    }
}