public async Task <Result> Deactivate(AccommodationsDeactivationRequest request, CancellationToken cancellationToken = default) { if (!request.HtAccommodationIds.Any()) { return(Result.Failure("Accommodation ids must be specified")); } if (request.Reason == DeactivationReasons.None) { return(Result.Failure("Deactivation reason must be specified")); } var(_, isFailure, accommodationIds, error) = AccommodationIdRetriever.RetrieveIds(request.HtAccommodationIds); if (isFailure) { return(Result.Failure(error)); } var accommodationsToDeactivate = await _context.Accommodations.Where(a => accommodationIds.Contains(a.Id) && a.IsActive).ToListAsync(cancellationToken); if (!accommodationsToDeactivate.Any()) { return(Result.Success()); } return(await DeactivateAccommodations(accommodationsToDeactivate) .Tap(Unpublish) .Tap(AddDeactivationEvents)); async Task <Result <List <RichAccommodationDetails> > > DeactivateAccommodations(List <RichAccommodationDetails> accommodations) { var dateTime = DateTimeOffset.UtcNow; foreach (var accommodation in accommodations) { accommodation.IsActive = false; accommodation.DeactivationReason = request.Reason; accommodation.DeactivationReasonDescription = request.DeactivationReasonDescription; accommodation.Modified = dateTime; } _context.UpdateRange(accommodations); await _context.SaveChangesAsync(cancellationToken); return(accommodations); } Task Unpublish(List <RichAccommodationDetails> accommodations) { var ids = accommodations.Select(a => a.Id).ToList(); return(_accommodationChangePublisher.PublishRemoved(ids)); } Task AddDeactivationEvents() => _accommodationChangeLogService.AddDeactivationEvents(accommodationIds !, AccommodationChangeEventSources.Api, request.Reason, request.DeactivationReasonDescription); }
public async Task <IActionResult> DeactivateAccommodations([FromBody] AccommodationsDeactivationRequest request, CancellationToken cancellationToken = default) { var(_, isFailure, error) = await _activityStatusManagementService.Deactivate(request, cancellationToken); if (isFailure) { return(BadRequestWithProblemDetails(error)); } return(NoContent()); }