public async Task <IActionResult> GetByCrewAndPosition(int id, int position)
        {
            Models.Crew crew = await _context.Crews.Include("Athletes.Athlete").FirstOrDefaultAsync(x => x.BroeCrewId == id);

            if (crew == null)
            {
                return(NotFound());
            }

            if ((crew.BoatClass == Models.BoatClass.Eight && position > 9) ||
                (crew.BoatClass == Models.BoatClass.CoxedFour && position > 5) ||
                ((crew.BoatClass == Models.BoatClass.CoxlessFour || crew.BoatClass == Models.BoatClass.QuadScull) && position > 4) ||
                (crew.BoatClass == Models.BoatClass.CoxedPair && position > 3) ||
                ((crew.BoatClass == Models.BoatClass.CoxlessPair || crew.BoatClass == Models.BoatClass.DoubleScull) && position > 2) ||
                (crew.BoatClass == Models.BoatClass.SingleScull && position > 1))
            {
                return(BadRequest());
            }

            Models.CrewAthlete crewAthlete = crew.Athletes.FirstOrDefault(x => x.Position == position);

            if (crewAthlete == null)
            {
                return(NotFound());
            }

            return(Ok(_mapper.Map <Athlete>(crewAthlete)));
        }
        public async Task <IActionResult> DeleteByCrewAndPosition(int id, int position)
        {
            Models.Crew crew = await _context.Crews.Include(x => x.Athletes).FirstOrDefaultAsync(x => x.BroeCrewId == id);

            if (crew == null)
            {
                return(NotFound());
            }

            Models.CrewAthlete athlete = crew.Athletes.FirstOrDefault(x => x.Position == position);

            if (athlete == null)
            {
                return(NotFound());
            }

            crew.Athletes.Remove(athlete);
            await _context.SaveChangesAsync();

            return(NoContent());
        }
        public async Task <IActionResult> PutByCrewAndPosition(int id, int position, [FromBody] Athlete athlete)
        {
            if (athlete is null)
            {
                return(BadRequest());
            }

            Models.Crew crew = await _context.Crews.Include("Athletes.Athlete").FirstAsync(x => x.BroeCrewId == id);

            Models.CrewAthlete crewAthlete = crew.Athletes.FirstOrDefault(x => x.Position == position);

            bool created = false;

            if (crewAthlete == null)
            {
                Models.Athlete dbAthlete = await _context.Athletes.FirstOrDefaultAsync(x => x.MembershipNumber == athlete.MembershipNumber);

                if (dbAthlete == null)
                {
                    crew.Athletes.Add(_mapper.Map <Models.CrewAthlete>(athlete));
                    created = true;
                }
                else
                {
                    crewAthlete = new Models.CrewAthlete
                    {
                        Athlete = dbAthlete
                    };

                    crew.Athletes.Add(crewAthlete);
                    _mapper.Map(athlete, crewAthlete);
                }
            }
            else
            {
                if (crewAthlete.Athlete.MembershipNumber == athlete.MembershipNumber)
                {
                    _mapper.Map(athlete, crewAthlete);
                }
                else
                {
                    Models.Athlete dbAthlete = await _context.Athletes.FirstOrDefaultAsync(x => x.MembershipNumber == athlete.MembershipNumber);

                    crew.Athletes.Remove(crewAthlete);
                    if (dbAthlete == null)
                    {
                        crew.Athletes.Add(_mapper.Map <Models.CrewAthlete>(athlete));
                        created = true;
                    }
                    else
                    {
                        Models.CrewAthlete newCrewAthlete = new Models.CrewAthlete {
                            Athlete = dbAthlete
                        };
                        crew.Athletes.Add(newCrewAthlete);
                        _mapper.Map(athlete, newCrewAthlete);
                    }
                }
            }
            await _context.SaveChangesAsync();

            if (created)
            {
                return(CreatedAtRoute("GetByCrewAndPosition", new { id = crew.BroeCrewId, position = athlete.Position }));
            }
            else
            {
                return(NoContent());
            }
        }