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();
            }
        }
Пример #2
0
        /// <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);
        }