public async Task <CommunicationChannelCalendarEventDto> Handle(CreateCommunicationChannelCalendarEventCommand request, CancellationToken cancellationToken) { // Získám komunikační kanál pomocí jeho Id. // Vyhodím výjimku, pokud komunikační kanál s předaným Id neexistuje. var channel = await _communicationChannelRepository.GetByIdAsync(request.CommunicationChannelId) ?? throw new NotFoundException(nameof(CommunicationChannel), request.CommunicationChannelId); // Pokud uživatel není součástí komunikačního kanálu, vyhodím výjimku. if (!channel.Users.Contains(_currentUserService.User)) { throw new ForbiddenAccessException(); } // Vytvořím entitu naplněnou daty z příkazu. var entity = new CommunicationChannelCalendarEvent() { Name = request.Name, UserId = _currentUserService.User.Id, Description = request.Description, StartsAt = request.StartsAt, EndsAt = request.EndsAt, CommunicationChannelId = request.CommunicationChannelId, CommunicationChannel = channel }; // Přidám záznam do datového zdroje a uložím. await _communicationChannelCalendarEventRepository.AddOrUpdateAsync(entity, cancellationToken); await _unitOfWork.SaveChangesAsync(cancellationToken); // Vrátím Id vytvořeného záznamu. return(_mapper.Map <CommunicationChannelCalendarEventDto>(entity)); }
public async Task <CommunicationChannelDto> Handle(GetCommunicationChannelByIdQuery request, CancellationToken cancellationToken) { // Načtu komunikační kanál z datového zdroje (vyhodím výjimku, pokud se mi to nepodaří). var channel = await _communicationChannelRepository.GetByIdAsync <CommunicationChannelDto>(request.Id); return(channel); }
public async Task <CommunicationChannelDto> Handle(RemoveUserFromCommunicationChannelCommand request, CancellationToken cancellationToken) { // Získám uživatele pomocí jeho Id. // Vyhodím výjimku, pokud uživatel s předaným Id neexistuje. var user = await _userRepository.GetByIdAsync(request.UserId) ?? throw new NotFoundException(nameof(User), request.UserId); // Získám komunikační kanál pomocí jeho Id. // Vyhodím výjimku, pokud uživatel s předaným Id neexistuje. var channel = await _communicationChannelRepository.GetByIdAsync(request.ChannelId) ?? throw new NotFoundException(nameof(CommunicationChannel), request.ChannelId); // TODO: kontrola, že má uživatel právo na tuto akci. // Pokud uživatel není součástí komunikačního kanálu, nelze ho z něj odebrat. if (!channel.Users.Contains(user)) { throw new NotFoundException( $"User with Id {request.UserId} is not part of communication channel with Id {request.ChannelId}." ); } // Odeberu uživatele z komunikačního kanálu. channel.Users.Remove(user); // Promítnu změny do datového zdroje. _unitOfWork.SaveChanges(); return(_mapper.Map <CommunicationChannelDto>(channel)); }
public async Task <Unit> Handle(DeleteCommunicationChannelCommand request, CancellationToken cancellationToken) { // Vytáhnu záznam z datového zdroje (vyhodím výjimku, pokud se mi to nepodaří). var entity = await _communicationChannelRepository.GetByIdAsync(request.Id, true); // Záznam se podařilo nalézt -> smažu ho a uložím změny. _communicationChannelRepository.Remove(entity); await _unitOfWork.SaveChangesAsync(cancellationToken); return(Unit.Value); }
public async Task <CommunicationChannelMessageDto> Handle(CreateCommunicationChannelMessageCommand request, CancellationToken cancellationToken) { // Pokusím se získat uživatele podle Id. // Ověřím si, zda-li uživatel existuje, pokud neexistuje, vyhodím výjimku. var user = await _userRepository.GetByIdAsync(request.UserId) ?? throw new NotFoundException(nameof(User), request.UserId); // Ověřím si, zda-li komunikační kanál skutečně existuje. var channel = await _communicationChannelRepository.GetByIdAsync(request.ChannelId) ?? throw new NotFoundException(nameof(Channel), request.ChannelId); // TODO: ověřit, že má na akci právo. // Ověřím si, zda-li je uživatel součástí komunikačního kanálu. if (!channel.Users.Contains(user)) { throw new NotFoundException( $"User with Id {request.UserId} is not a part of communication channel with Id {request.ChannelId}." ); } // Vytvořím entitu naplněnou daty z příkazu. var entity = new CommunicationChannelMessage() { User = user, UserId = request.UserId, Channel = channel, ChannelId = request.ChannelId, Content = request.Content, Type = request.Type }; // Přidám záznam do datového zdroje a uložím. await _communicationChannelMessageRepository.AddOrUpdateAsync(entity, cancellationToken); await _unitOfWork.SaveChangesAsync(cancellationToken); // Vrátím Id vytvořeného záznamu. return(_mapper.Map <CommunicationChannelMessageDto>(entity)); }
public async Task <CommunicationChannelDto> Handle(AddUserToCommunicationChannelCommand request, CancellationToken cancellationToken) { // Získám uživatele pomocí jeho Id. // Vyhodím výjimku, pokud uživatel s předaným Id neexistuje. var user = await _userRepository.GetByIdAsync(request.UserId) ?? throw new NotFoundException(nameof(User), request.UserId); // Získám komunikační kanál pomocí jeho Id. // Vyhodím výjimku, pokud uživatel s předaným Id neexistuje. var channel = await _communicationChannelRepository.GetByIdAsync(request.ChannelId) ?? throw new NotFoundException(nameof(CommunicationChannel), request.ChannelId); // TODO: kontrola, že má uživatel právo na tuto akci. // Přidám uživatele do skupiny. channel.Users.Add(user); // Promítnu změny do datového zdroje. _unitOfWork.SaveChanges(); return(_mapper.Map <CommunicationChannelDto>(channel)); }
public async Task <Unit> Handle(UpdateCommunicationChannelCommand request, CancellationToken cancellationToken) { // Vytáhnu záznam z datového zdroje. var entity = await _communicationChannelRepository.GetByIdAsync(request.Id); // Pokud se mi záznam nepodařilo najít, vrátím NotFoundException (zdroj nenalezen). if (entity is null) { throw new NotFoundException(nameof(CommunicationChannel), request.Id); } // Naplním entitu daty z příkazu. entity.Name = request.Name; entity.Description = request.Description; // Přidám záznam do datového zdroje a uložím.` await _communicationChannelRepository.AddOrUpdateAsync(entity, cancellationToken); await _unitOfWork.SaveChangesAsync(cancellationToken); return(Unit.Value); }