public async Task <IActionResult> RequestClubMembership([FromRoute] Guid playerId,
                                                                [FromRoute] Guid golfClubId,
                                                                CancellationToken cancellationToken)
        {
            List <KeyValuePair <String, StringValues> > headers = this.Request.Headers.ToList();
            String authHeader = headers.Where(x => x.Key == "Authorization").Select(x => x.Value).SingleOrDefault().SingleOrDefault();

            if (authHeader == null)
            {
                return(this.Unauthorized());
            }

            using (MockDatabaseDbContext context = this.MockDatabaseDbContextResolver())
            {
                Player player = context.Players.SingleOrDefault(p => p.PlayerId == playerId);

                if (player == null)
                {
                    return(this.BadRequest());
                }

                GolfClub golfClub = context.GolfClubs.SingleOrDefault(c => c.GolfClubId == golfClubId);

                if (golfClub == null)
                {
                    return(this.BadRequest());
                }

                GolfClubMembership membership = new GolfClubMembership
                {
                    PlayerId          = playerId,
                    AcceptedDateTime  = DateTime.Now,
                    GolfClubId        = golfClubId,
                    GolfClubName      = golfClub.Name,
                    MembershipId      = Guid.NewGuid(),
                    PlayerDateOfBirth = player.DateOfBirth,
                    PlayerFullName    = $"{player.FirstName} {player.LastName}",
                    PlayerGender      = player.Gender,
                };

                await context.GolfClubMemberships.AddAsync(membership, cancellationToken);

                await context.SaveChangesAsync(cancellationToken);
            }

            return(this.NoContent());
        }
        public async Task <IActionResult> SignUpForTournament([FromRoute] Guid playerId,
                                                              [FromRoute] Guid tournamentId,
                                                              CancellationToken cancellationToken)
        {
            List <KeyValuePair <String, StringValues> > headers = this.Request.Headers.ToList();
            String authHeader = headers.Where(x => x.Key == "Authorization").Select(x => x.Value).SingleOrDefault().SingleOrDefault();

            if (authHeader == null)
            {
                return(this.Unauthorized());
            }

            using (MockDatabaseDbContext context = this.MockDatabaseDbContextResolver())
            {
                Player player = context.Players.SingleOrDefault(p => p.PlayerId == playerId);

                if (player == null)
                {
                    return(this.BadRequest());
                }

                Tournament tournament = context.Tournaments.SingleOrDefault(t => t.TournamentId == tournamentId);

                if (tournament == null)
                {
                    return(this.BadRequest());
                }

                PlayerTournamentSignIn playerTournamentSignIn = new PlayerTournamentSignIn
                {
                    PlayerId     = playerId,
                    TournamentId = tournamentId
                };

                await context.PlayerTournamentSignIns.AddAsync(playerTournamentSignIn, cancellationToken);

                await context.SaveChangesAsync(cancellationToken);
            }

            return(this.NoContent());
        }
        public async Task <IActionResult> PostPlayer([FromBody] RegisterPlayerRequest request,
                                                     CancellationToken cancellationToken)
        {
            // create a player
            Player player = new Player
            {
                PlayerId      = Guid.NewGuid(),
                LastName      = request.LastName,
                FirstName     = request.FirstName,
                DateOfBirth   = request.DateOfBirth,
                EmailAddress  = request.EmailAddress,
                ExactHandicap = request.ExactHandicap,
                Gender        = request.Gender,
                MiddleName    = request.MiddleName
            };

            // create a user
            RegisteredUser user = new RegisteredUser
            {
                EmailAddress = request.EmailAddress,
                Password     = "******",
                UserId       = Guid.NewGuid()
            };

            // Add to mock database
            using (MockDatabaseDbContext context = this.MockDatabaseDbContextResolver())
            {
                await context.RegisteredUsers.AddAsync(user, cancellationToken);

                await context.Players.AddAsync(player, cancellationToken);

                await context.SaveChangesAsync(cancellationToken);
            }

            return(this.Ok(new RegisterPlayerResponse
            {
                PlayerId = player.PlayerId
            }));
        }