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)); } }
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"); } }