namespace Brizco.Repository.Handlers.Routines; public class GetRoutineShiftsQueryHandler(IRepositoryWrapper repositoryWrapper) : IRequestHandler> { 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); if (shift == null) continue; 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 }); } }); if (request.SelectedDate > 0) { var selectedDate = DateTimeExtensions.UnixTimeStampToDateTime(request.SelectedDate); var existedShiftPlan = await repositoryWrapper.SetRepository() .TableNoTracking .FirstOrDefaultAsync(s => s.ShiftId == shift.Id && s.PlanFor.Date == selectedDate.Date, cancellationToken); shift.IsCompleted = existedShiftPlan?.IsCompleted ?? false; shift.CurrentShiftPlanId = existedShiftPlan?.Id ?? default; shift.HasCurrentShiftPlan = existedShiftPlan != null; } } return routineShiftResponse; } }