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)); }
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); }
public async Task <Guid> SaveCompetitor(CompetitorDto competitor) { return(await PostAsync <CompetitorDto>($"/api/competitors/", competitor)); }
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 }); } }