public async Task Delete(WwwContext context, WwwRun drun, bool bulk = false) { WwwRun run = await context.wwwRuns.Include(i => i.WwwEntity).ThenInclude(j => j.WwwClass).ThenInclude(k => k.WwwSchool).ThenInclude(l => l.WwwWalk).FirstOrDefaultAsync(f => f.ID == drun.ID); float dist = run.Distance; run.WwwEntity.TotalRuns -= dist; run.WwwEntity.WwwClass.TotalRuns -= dist; run.WwwEntity.WwwClass.WwwSchool.TotalRuns -= dist; run.WwwEntity.WwwClass.WwwSchool.WwwWalk.TotalRuns -= dist; run.WwwEntity.Runs--; context.wwwRuns.Remove(run); if (bulk == false) { await context.SaveChangesAsync(); } }
public async Task <WwwFeedback> Submit(WwwContext context, EntityRunFormData data, bool bulk = false) { if (data.Identifier == WwwData.Admin && data.Credential == WwwData.AdminCredential) { return new WwwFeedback() { EntPosition = 1337, SchoolTotal = 1337 } } ; if (data.Credential != WwwData.Credential) { return new WwwFeedback() { EntPosition = -1 } } ; await semaphoreSlim.WaitAsync(); WwwEntity ent = null; try { var walk = await context.wwwWalks.FirstAsync(f => f.Name == WwwData.s_walk); // var school = await context.wwwSchools.FirstAsync(f => f.Name == WwwData.s_school); var school = await context.wwwSchools.FirstAsync(f => f.WwwWalk == walk); WwwClass wwwClass = await context.wwwClasses.FirstOrDefaultAsync(f => f.Name == data.SchoolClass); WwwEntity entity = await context.wwwEntities .Include(i => i.WwwClass) .FirstOrDefaultAsync(f => f.Pseudonym == data.Identifier); if (wwwClass == null) { if (wwwClass == null) { wwwClass = new WwwClass(); wwwClass.WwwSchool = school; wwwClass.Name = data.SchoolClass; wwwClass.Year = 0; string year = String.Empty; for (int i = 0; i < wwwClass.Name.Length; i++) { if (Char.IsDigit(wwwClass.Name[i])) { year += wwwClass.Name[i]; } else { break; } } int iyear = 0; if (int.TryParse(year, out iyear)) { wwwClass.Year = iyear; } context.wwwClasses.Add(wwwClass); } await context.SaveChangesAsync(); } if (entity == null) { entity = new WwwEntity(); wwwClass.WwwSchool = school; wwwClass.WwwSchool.WwwWalk = walk; entity.WwwClass = wwwClass; entity.Pseudonym = data.Identifier; context.wwwEntities.Add(entity); wwwClass.TotalEntities++; school.TotalEntities++; walk.TotalEntities++; } if (entity.WwwClass == wwwClass) { WwwRun run = new WwwRun(); run.WwwEntity = entity; run.Time = data.Time; run.Distance = data.Distance; context.wwwRuns.Add(run); entity.TotalRuns += run.Distance; wwwClass.TotalRuns += run.Distance; school.TotalRuns += run.Distance; walk.TotalRuns += run.Distance; entity.Runs++; if (bulk == false) { await context.SaveChangesAsync(); return(await GetFeedback(context, walk, school, wwwClass, entity)); } else { ent = entity; return(null); } } else { return(new WwwFeedback() { EntPosition = -2 }); } } catch (Exception e) { logger.LogError(e.Message); } finally { semaphoreSlim.Release(); } return(null); }