private async Task SendNotifyRequestExhibit(RequestExhibitDto dto) { var notifyReceiver = new Notification { User = new User { Id = dto.Receiver.Owner.UserId }, Text = $"У вас запросили экспонат {dto.Exhibit.Name} в подразделение {dto.Consumer.Name}. Вы согласны?", SubdivisionId = dto.Receiver.Id, ExhibitId = dto.Exhibit.Id, IsRead = false, Confirm = Confirm.NeededConfirm, CreationTime = DateTimeOffset.Now }; await _notificationUseCases.Notify(notifyReceiver); var notifyConsumer = new Notification { User = new User { Id = dto.Consumer.Owner.UserId }, Text = $"Вы запросили экспонат {dto.Exhibit.Name} из подразделения {dto.Receiver.Name}." + $" Ожидайте подтверждение представителя {dto.Receiver.Name}", SubdivisionId = dto.Consumer.Id, ExhibitId = dto.Exhibit.Id, IsRead = false, Confirm = Confirm.SystemInformation, CreationTime = DateTimeOffset.Now }; await _notificationUseCases.Notify(notifyConsumer); }
private static void CheckCapacity(RequestExhibitDto dto) { var availableCapacity = dto.Consumer.Capacity - dto.Exhibit.Count; if (availableCapacity < 0) { throw new BadRequestException( $"Subdivision '{dto.Consumer.Id}' cannot accommodate the exhibit with id '{dto.Exhibit.Id}'"); } }
private async Task HasOwners(RequestExhibitDto dto) { if (dto.Receiver.Owner.UserId == null) { throw new BadRequestException( $"No representative found for this subdivision with id '{dto.Receiver.Id}'."); } if (!await _editorManager.IsOwner <BaseEntity <Guid> >(dto.Consumer, dto.UserId)) { throw new BadRequestException( $"User with Id {dto.UserId} is not owner subdivision {dto.Consumer.Id}"); } }
public async Task RequestExhibit(Guid subdivisionId, Guid exhibitId, string userId) { var exhibit = await _exhibitUseCases.Get(exhibitId); var dto = new RequestExhibitDto { Consumer = await Get(subdivisionId), Exhibit = exhibit, Receiver = await Get(exhibit.Subdivision.Id), UserId = userId }; await ValidateRequestExhibit(dto); await SendNotifyRequestExhibit(dto); }
private async Task ValidateRequestExhibit(RequestExhibitDto dto) { await HasOwners(dto); CheckCapacity(dto); }