Example #1
0
        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);
        }
Example #5
0
        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);
        }