stylist / backend / Stylist.Domain / Repositories / Implementations / ReviewRepository.cs
ReviewRepository.cs
Raw
using Microsoft.EntityFrameworkCore;
using Stylist.Data.Models;
using Stylist.Data.Models.Dtos.Review;
using Stylist.Data.Models.DTOs.Review;
using Stylist.Domain.Mapping;
using Stylist.Domain.Repositories.Interfaces;

namespace Stylist.Domain.Repositories.Implementations
{
    public class ReviewRepository : IReviewRepository
    {
        public ReviewRepository(StylistContext context)
        {
            _context = context;
        }

        private readonly StylistContext _context;

        public async Task<IEnumerable<ReviewSalonPageDto>> GetRecommendedBySalonId(int salonId)
        {
            var reviews = await _context
                .Reviews
                .AsNoTracking()
                .Where(r => r.SalonId == salonId)
                .Include(r => r.Reservation)
                .ThenInclude(re => re.User)
                .Select(ReviewMapping.MapToReviewSalonPageDto)
                .ToListAsync();

            return reviews;
        }

        public async Task<IEnumerable<ReviewPageDto>> GetReviewsBySalonAsync(int salonId)
        {
            var reviews = await _context
                .Reviews
                .AsNoTracking()
                .Where(r => r.SalonId == salonId)
                .Include(r => r.Reservation)
                .Include(r => r.Reservation.Service)
                .Include(r => r.Reservation.User)
                .Include(r => r.Reservation.Schedule)
                .ThenInclude(s => s.Hairdresser)
                .Select(ReviewMapping.MapToReviewPageDto)
                .ToListAsync();

            return reviews;
        }
    }
}