public async Task BulkChangeAppointmentStatus(BulkUpdateAppointmentStatus request, CancellationToken cancellationToken = default)
        {
            if (!(request.Keys?.Any() ?? false))
            {
                throw new NotFoundException(nameof(Appointment), request.Keys);
            }

            var usersToSearch    = request.Keys.Select(x => x.UserId).ToList();
            var branchesToSearch = request.Keys.Select(x => x.BranchId).ToList();
            var servicesToSearch = request.Keys.Select(x => x.ServiceId).ToList();

            var newStatus = request.AppointmentStatus.ToString();

            var entities = (await _context.Appointments
                            .Where(x => usersToSearch.Contains(x.UserId) &&
                                   branchesToSearch.Contains(x.BranchId) &&
                                   servicesToSearch.Contains(x.ServiceId) &&
                                   x.Status != newStatus)
                            .ToListAsync(cancellationToken))
                           .Where(x => request.Keys
                                  .Any(key => key.UserId == x.UserId &&
                                       key.BranchId == x.BranchId &&
                                       key.ServiceId == x.ServiceId)).ToList();

            if (!entities.Any())
            {
                return;
            }

            foreach (var entity in entities)
            {
                request.Map(entity);
            }

            _context.Appointments.UpdateRange(entities);

            await _context.SaveChangesAsync(cancellationToken);
        }
예제 #2
0
        public async Task <ActionResult> BulkChangeAppointmentStatus(BulkUpdateAppointmentStatus request)
        {
            await _appointmentSchedulerService.BulkChangeAppointmentStatus(request);

            return(Ok());
        }