using Brizco.Domain.Entities.Shift; namespace Brizco.Repository.Handlers.Routine; public class GetRoutineShiftsQueryHandler : IRequestHandler> { private readonly IRepositoryWrapper _repositoryWrapper; public GetRoutineShiftsQueryHandler(IRepositoryWrapper repositoryWrapper) { _repositoryWrapper = repositoryWrapper; } public async Task> Handle(GetRoutineShiftsQuery request, CancellationToken cancellationToken) { var routineShiftResponse = new List(); var shiftRoutines = await _repositoryWrapper.SetRepository() .TableNoTracking .Where(s => s.RoutineId == request.Id) .ToListAsync(cancellationToken); foreach (var shiftRoutine in shiftRoutines) { var shift = await _repositoryWrapper.SetRepository() .TableNoTracking .Where(s => s.Id == shiftRoutine.ShiftId) .Select(ShiftMapper.ProjectToSDto) .FirstOrDefaultAsync(cancellationToken); shift?.Days.ForEach(d => { var routineShiftRes = routineShiftResponse.FirstOrDefault(s => s.Day == d); if (routineShiftRes != null) { routineShiftRes.Shifts.Add(shift); } else { routineShiftResponse.Add(new RoutineShiftResponseDto { Shifts = new List{shift}, Day = d }); } }); } return routineShiftResponse; } }