public ClubMemberSummary AddClubMember(CreateClubMemberDto member, string email) { try { if (string.IsNullOrEmpty(member.Nickname)) { throw new ArgumentException("Nickname cannot be empty"); } var club = _unitOfWork.Clubs.GetAsQueryable(y => y.Id == member.ClubId).Include(t => t.Administrators).Include(t => t.Players).FirstOrDefault(); if (club == null) { throw new ArgumentException("Club not found"); } var currentMember = _unitOfWork.Users.Get(t => t.Email == email).FirstOrDefault(); if (currentMember == null) { throw new ArgumentException("Error while authorization"); } if (club.Administrators.All(t => t.UserId != currentMember.Id)) { throw new ArgumentException("Operation not allowed"); } var alreadyExists = club.Players.Any(t => string.Equals(t.Nickname, member.Nickname, StringComparison.CurrentCultureIgnoreCase)); if (alreadyExists) { throw new ArgumentException("Member with that nickname already exists"); } var newPlayer = new Player { ClubId = member.ClubId, Guid = Guid.NewGuid(), IsActive = true, Registered = DateTimeOffset.UtcNow, LastChanged = DateTimeOffset.UtcNow, Nickname = member.Nickname }; club.Players.Add(newPlayer); _unitOfWork.Save(); return(new ClubMemberSummary { Nickname = member.Nickname, IsActive = newPlayer.IsActive, PlayerId = newPlayer.Id }); } catch (ArgumentException) { throw; } catch (Exception e) { _logger.LogError(e.Message); throw new Exception("Error while adding club members. Please try a bit later"); } }
public IActionResult AddClubMember([FromBody] CreateClubMemberDto dto) { try { var email = User.Claims.SingleOrDefault(c => c.Type == "email")?.Value; if (string.IsNullOrEmpty(email)) { return(BadRequest("Authorization failed.")); } return(Ok(_service.AddClubMember(dto, email))); } catch (Exception e) { return(BadRequest(e.Message)); } }