Ejemplo n.º 1
0
 public IActionResult AddMembershipRequest([FromBody] MembershipRequestCreateDto dto)
 {
     try
     {
         var email = User.Claims.SingleOrDefault(c => c.Type == "email")?.Value;
         if (string.IsNullOrEmpty(email))
         {
             return(BadRequest("Authorization failed."));
         }
         return(Ok(_service.AddMembershipRequest(dto, email)));
     }
     catch (Exception e)
     {
         return(BadRequest(e.Message));
     }
 }
Ejemplo n.º 2
0
 public int AddMembershipRequest(MembershipRequestCreateDto request, string email)
 {
     try
     {
         if (string.IsNullOrEmpty(request.Nickname))
         {
             throw new ArgumentException("Nickname cannot be empty");
         }
         var existingMember = _unitOfWork.Users.Get(t => t.Email == email).FirstOrDefault();
         if (existingMember == null)
         {
             throw new ArgumentException("User not found");
         }
         var club = _unitOfWork.Clubs.GetAsQueryable(t => t.Id == request.ClubId)
                    .Include(t => t.Administrators).ThenInclude(t => t.User)
                    .Include(t => t.MembershipRequests).SingleOrDefault();
         if (club == null)
         {
             throw new ArgumentException("Club not found");
         }
         if (club.MembershipRequests.Any(t => t.Nickname == request.Nickname))
         {
             throw new ArgumentException($"Membership request for nickname {request.Nickname} already exists");
         }
         var newRequest = new MembershipRequest
         {
             ClubId               = request.ClubId,
             UserId               = existingMember.Id,
             Created              = DateTimeOffset.UtcNow,
             LastActivity         = DateTimeOffset.UtcNow,
             Nickname             = request.Nickname,
             SelectedFromExisting = request.SelectedFromExisting,
             Status               = MembershipRequestStatus.Pending
         };
         club.MembershipRequests.Add(newRequest);
         var messageGuid = Guid.NewGuid();
         foreach (var administrator in club.Administrators)
         {
             administrator.User.InnerMessagesReceived.Add(new InnerMessage
             {
                 Status            = MessageStatus.Pending,
                 Body              = $"You have a new membership request in club {club.Title} from user with nickname {request.Nickname}",
                 Created           = DateTimeOffset.UtcNow,
                 Guid              = messageGuid,
                 OneResponseForAll = true,
                 LastActivity      = DateTimeOffset.UtcNow,
                 SentBySystem      = true,
                 Title             = "New Membership Request",
                 SenderType        = EntityType.System,
                 ReceiverType      = EntityType.User,
                 ReceiverId        = administrator.UserId
             });
         }
         _unitOfWork.Save();
         return(newRequest.Id);
     }
     catch (ArgumentException)
     {
         throw;
     }
     catch (Exception e)
     {
         _logger.LogError(e.Message);
         throw new Exception("Error while adding membership request. Please try a bit later");
     }
 }