예제 #1
0
        public async Task <DailyChatOutputDto> GetDailyChat(DailyChatInputDto dto)
        {
            if (dto.ChatEventTypeId != null && !Enum.IsDefined(typeof(ChatEventTypes), dto.ChatEventTypeId))
            {
                throw new UserFriendlyException("Invalid Event Type");
            }

            var query = from e in _dbContext.ChatEvents
                        join u1 in _dbContext.Users on e.User1Id equals u1.Id
                        join u2 in _dbContext.Users on e.User2Id equals u2.Id into utemp
                        from u2 in utemp.DefaultIfEmpty()
                        where e.IsActive &&
                        (dto.ChatEventTypeId == null || e.ChatEventTypeId == dto.ChatEventTypeId)
                        orderby e.CreatedDate
                        select new
            {
                ChatEventTypeId = e.ChatEventTypeId,
                User1           = u1.Username,
                User2           = u2 != null ? u2.Username : null,
                Message         = e.Message,
                CreatedDate     = e.CreatedDate
            };

            var total = await query.CountAsync();

            var messages = await query.Skip(dto.ToSkip).Take(dto.PageSize)
                           .Select(e => new ChatDto
            {
                Time    = e.CreatedDate,
                Message = ChatEventsHelper.ParseChatEvent(e.ChatEventTypeId, e.Message, e.User1, e.User2)
            }).ToListAsync();

            var result = new DailyChatOutputDto {
                TotalCount = total, ChatMessages = messages
            };

            return(result);
        }
예제 #2
0
        public ChatSummaryDto[] GetHourlyChatSummary()
        {
            var dt = _dbCommands.ExecuteProcedure("GetHourlySummary");

            if (dt == null || dt.Rows.Count == 0)
            {
                return(null);
            }

            var summary = dt.AsEnumerable()
                          .Select(r => new EventSummaryDto
            {
                Time          = r.Field <int>("Time"),
                TimeDisplay   = r.Field <string>("TimeDisplay"),
                Name          = r.Field <string>("Name"),
                EventTypeId   = r.Field <int>("EventTypeId"),
                EventCount    = r.Field <int>("EventCount"),
                HighFiveCount = r.Field <int>("HighFiveCount")
            })
                          .GroupBy(r => r.TimeDisplay)
                          .Select(g => new ChatSummaryDto
            {
                Time   = g.Key,
                Events = g.Select(e => new HourlyEventDto
                {
                    EventTypeId   = e.EventTypeId,
                    Name          = e.Name,
                    Time          = e.Time,
                    EventCount    = e.EventCount,
                    HighFiveCount = e.HighFiveCount,
                    EventDisplay  = ChatEventsHelper.SummarizeChatEvents(e.EventTypeId, e.EventCount, e.HighFiveCount)
                }).ToArray()
            }).ToArray();

            return(summary);
        }