public async Task Process(EventSummaryQuery request, EventSummaryQueryResponse response, CancellationToken cancellationToken) { if (!response.StatisticsExists) { var statisticStore = new EventStatistic { NumberOfSkaters = response.NumberOfSkaters, CumulativeMiles = response.CumulativeMiles }; context.EventStatistics.Add(statisticStore); await context.SaveChangesAsync(); } }
/// <summary> /// Retrieve specific data about an event /// </summary> /// <param name="eventId"></param> /// <returns></returns> public async Task <EventStatistic> GetEventStatisticAsync(string eventId) { var myEvent = await _database.EVENTS .FirstOrDefaultAsync(e => e.ID_PK == eventId); if (myEvent == null) { return(null); } //event exist therefore we can look for the users var users = await _database.EVENT_USERS .Where(user => user.EVENT_ID == eventId) .GroupBy(item => item.ROLE) .Select(group => new { Role = @group.Key, Items = @group.Select(item => new { Role = item.ROLE, EventId = item.EVENT_ID, Status = item.STATUS, NetName = item.STUDENT_NETNAME_FK }) }) .ToListAsync(); //return users; //Each user type var attendees = users .FirstOrDefault(s => s.Role == Role.Attendee.ToString()); var mods = users .FirstOrDefault(m => m.Role == Role.Mod.ToString()); var scanners = users .FirstOrDefault(s => s.Role == Role.Scanner.ToString()); //How many of each attendee status type // var registered = attendees. var nbOfAttendees = attendees?.Items.Where(a => a.Status == UserStatus.Attending.ToString()).ToList().Count ?? 0; var nbOfRegistered = attendees?.Items.Where(a => a.Status == UserStatus.Registered.ToString()).ToList().Count ?? 0; var nbOfTracking = attendees?.Items.Where(a => a.Status == UserStatus.Tracking.ToString()).ToList().Count ?? 0; var statistic = new EventStatistic() { Administration = new Administration() { Creator = 1, Mods = mods?.Items.Count() ?? 0, Scanners = scanners?.Items.Count() ?? 0 }, Attendees = new Attendees() { Attending = nbOfAttendees, Registered = nbOfRegistered, Tracking = nbOfTracking } }; return(statistic); }