Example #1
0
        public async Task SendFriendRequestAsync(SendFriendRequestDto friendRequest)
        {
            if (friendRequest.UserNameTo == friendRequest.UserNameFrom)
            {
                throw new FriendRequestException("You cannot invite yourself.");
            }

            var userRequestedBy =
                _repository.ApplicationUsers.Single(ApplicationUser.UserNameEquals(friendRequest.UserNameFrom));
            var userRequestedTo =
                _repository.ApplicationUsers.Single(ApplicationUser.UserNameEquals(friendRequest.UserNameTo));

            var friendship = new Friendship
            {
                RequestedById    = userRequestedBy.Id,
                RequestedToId    = userRequestedTo.Id,
                FriendshipStatus = FriendshipStatus.PendingFriendRequest
            };

            using (var transaction = _repository.BeginTransaction())
            {
                await SaveFriendshipAsync(friendship);
                await SendFriendRequestEmailAsync(friendRequest.GenerateRequestLink, friendship);

                transaction.Commit();
            }
        }
Example #2
0
        public async Task CreateGameEventParticipationAsync(SendGameEventInvitationDto gameEventInvitationDto)
        {
            var gameEventId = gameEventInvitationDto.GameEventId;
            var userNameTo  = gameEventInvitationDto.UserNameTo;

            var participation = await GetActiveGameEventParticipation(gameEventId, userNameTo);

            if (participation != null)
            {
                switch (participation.ParticipationStatus)
                {
                case ParticipationStatus.PendingGuest:
                    throw new GameEventParticipationException("You have already invited this user to this event.");

                case ParticipationStatus.AcceptedGuest:
                    throw new GameEventParticipationException("This user already participates in this event.");

                case ParticipationStatus.Creator:
                    throw new GameEventParticipationException("You cannot invite yourself.");

                // Nothing else can be returned by GetActiveGameEventParticipation.
                default:
                    throw new ArgumentOutOfRangeException(
                              nameof(participation.ParticipationStatus),
                              $"The value {participation.ParticipationStatus} of ParticipationStatus " +
                              "is not included in this switch statement.");
                }
            }

            var userTo = await _repository.ApplicationUsers.SingleAsync(ApplicationUser.UserNameEquals(userNameTo));

            using (var transaction = _repository.BeginTransaction())
            {
                await CreateNewGameEventParticipation(gameEventId, userTo.Id);
                await SendGameEventInvitationAsync(
                    gameEventInvitationDto.GameEventId,
                    userTo,
                    gameEventInvitationDto.GenerateGameEventLink);

                transaction.Commit();
            }
        }
Example #3
0
        public async Task EditGameEventAsync(EditGameEventDto editedEvent)
        {
            using (var transaction = _repository.BeginTransaction())
            {
                await EditSingleGameEventProperties(
                    editedEvent.Id,
                    editedEvent.Name,
                    editedEvent.Date,
                    editedEvent.Place);

                var games = await GetGames(editedEvent.Id);

                await EditGames(editedEvent.Id, games, editedEvent.Games);

                transaction.Commit();
            }
        }