Пример #1
0
        public Task SaveAsync(CompetitorDto comp)
        {
            if (comp == null)
            {
                throw new ArgumentNullException(nameof(comp));
            }

            return(SaveInternalAsync(comp));
        }
        public async Task <ActionResult> Put(Guid id, [FromBody] CompetitorDto value)
        {
            if (!await _authService.CanUserEdit(User, value.ClubId))
            {
                return(Unauthorized());
            }
            Competitor comp = _mapper.Map <Competitor>(value);

            comp.Id = id;
            await _service.SaveAsync(comp);

            return(Ok());
        }
        public async Task <ActionResult <Guid> > Post([FromBody] CompetitorDto competitor)
        {
            if (!await _authService.CanUserEdit(User, competitor.ClubId))
            {
                return(Unauthorized());
            }
            await _service.SaveAsync(competitor);

            var savedCompetitor =
                (await _service.GetCompetitorsAsync(competitor.ClubId, null, true))
                .First(c => c.Name == competitor.Name &&
                       c.SailNumber == competitor.SailNumber &&
                       c.AlternativeSailNumber == competitor.AlternativeSailNumber);

            return(Ok(savedCompetitor.Id));
        }
Пример #4
0
        private async Task SaveInternalAsync(CompetitorDto comp)
        {
            var dbObject = await _dbContext
                           .Competitors
                           .Include(c => c.CompetitorFleets)
                           .FirstOrDefaultAsync(
                c =>
                c.Id == comp.Id)
                           .ConfigureAwait(false);

            if (dbObject == null)
            {
                if (comp.Id == Guid.Empty)
                {
                    comp.Id = Guid.NewGuid();
                }
                dbObject = _mapper.Map <Db.Competitor>(comp);
                await _dbContext.Competitors.AddAsync(dbObject)
                .ConfigureAwait(false);
            }
            else
            {
                dbObject.Name                  = comp.Name;
                dbObject.SailNumber            = comp.SailNumber;
                dbObject.AlternativeSailNumber = comp.AlternativeSailNumber;
                dbObject.BoatName              = comp.BoatName;
                dbObject.Notes                 = comp.Notes;
                // should scores get added here?
                // I don't think so. Those will be recorded as a race update or scores update.
            }

            AddFleetsToDbObject(comp, dbObject);

            await _dbContext.SaveChangesAsync()
            .ConfigureAwait(false);
        }
Пример #5
0
 public async Task <Guid> SaveCompetitor(CompetitorDto competitor)
 {
     return(await PostAsync <CompetitorDto>($"/api/competitors/", competitor));
 }
Пример #6
0
        private void AddFleetsToDbObject(CompetitorDto comp, Db.Competitor dbObject)
        {
            dbObject.CompetitorFleets ??= new List <Db.CompetitorFleet>();

            if (comp.FleetIds == null)
            {
                return;
            }
            // remove fleets
            foreach (var existingFleet in dbObject.CompetitorFleets.ToList())
            {
                if (comp.FleetIds.All(f => f != existingFleet.FleetId))
                {
                    dbObject.CompetitorFleets.Remove(existingFleet);
                }
            }

            // add fleets
            foreach (var fleetId in comp.FleetIds)
            {
                if (dbObject.CompetitorFleets
                    .Any(cf => cf.FleetId == fleetId))
                {
                    continue;
                }
                var dbFleet = _dbContext.Fleets
                              .SingleOrDefault(f => f.Id == fleetId &&
                                               f.ClubId == comp.ClubId);
                if (dbFleet != null)
                {
                    dbObject.CompetitorFleets.Add(new Db.CompetitorFleet
                    {
                        Competitor   = dbObject,
                        CompetitorId = dbObject.Id,
                        Fleet        = dbFleet,
                        FleetId      = dbFleet.Id
                    });
                }

                // Create new fleets here if needed.
            }

            //add built in club fleets
            var autoAddFleets = GetClubAutomaticFleets(
                comp.ClubId,
                comp.BoatClassId);

            foreach (var dbFleet in autoAddFleets)
            {
                if (dbObject.CompetitorFleets
                    .Any(cf => cf.FleetId == dbFleet.Id))
                {
                    continue;
                }
                dbObject.CompetitorFleets.Add(
                    new Db.CompetitorFleet
                {
                    Competitor = dbObject,
                    Fleet      = dbFleet
                });
            }
        }