public async Task Delete(WwwContext context, WwwClass wwwClass, bool bulk = false) { var entities = await context.wwwEntities.Where(x => x.WwwClass == wwwClass).ToListAsync(); foreach (var ent in entities) { await Delete(context, ent, true); } context.wwwClasses.Remove(wwwClass); 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); }
public async Task <WwwFeedback> GetFeedback(WwwContext context, WwwWalk walk, WwwSchool school, WwwClass wwwclass, WwwEntity entity) { WwwFeedback feedback = new WwwFeedback(); feedback.SchoolPosition = (await context.wwwSchools.AsNoTracking().OrderByDescending(o => o.TotalRuns).ToListAsync()).FindIndex(f => f.ID == school.ID) + 1; feedback.SchoolPercentage = MathF.Round(school.TotalRuns * 100 / walk.TotalRuns, 2); feedback.SchoolTotal = MathF.Round(school.TotalRuns, 2); feedback.ClassPosition = (await context.wwwClasses.AsNoTracking().OrderByDescending(o => o.TotalRuns).ToListAsync()).FindIndex(f => f.ID == wwwclass.ID) + 1; feedback.ClassPercentage = MathF.Round(wwwclass.TotalRuns * 100 / walk.TotalRuns, 2); feedback.ClassTotal = MathF.Round(wwwclass.TotalRuns, 2); feedback.EntPosition = (await context.wwwEntities.AsNoTracking().OrderByDescending(o => o.TotalRuns).ToListAsync()).FindIndex(f => f.ID == entity.ID) + 1; feedback.EntPercentage = MathF.Round(entity.TotalRuns * 100 / walk.TotalRuns, 2); feedback.EntTotal = MathF.Round(entity.TotalRuns, 2); var years = await context.wwwClasses.AsNoTracking().Select(s => s.Year).Distinct().ToArrayAsync(); List <KeyValuePair <int, float> > YearList = new List <KeyValuePair <int, float> >(); foreach (var year in years) { float sum = await context.wwwClasses.AsNoTracking().Where(x => x.Year == year).SumAsync(s => s.TotalRuns); YearList.Add(new KeyValuePair <int, float>(year, sum)); if (year == wwwclass.Year) { feedback.YearTotal = sum; } } feedback.YearPosition = YearList.Select(s => s.Value).OrderByDescending(o => o).ToList().FindIndex(f => f == feedback.YearTotal) + 1; feedback.YearPercentage = MathF.Round(feedback.YearTotal * 100 / walk.TotalRuns, 2); return(feedback); }