Exemplo n.º 1
0
        public async Task <IActionResult> MyChatsPagingList([FromBody] MyChatsFilterModel filterModel, int pageIndex, int limit)
        {
            var result = await _consultancyService.GetMyChatsPagingListAsync(CurrentUserName, filterModel, RequestLang, pageIndex);

            return(Ok(result));
        }
        // Get chats for user customer
        public async Task <ConsultantChatsResultDTO> GetMyChatsPagingListAsync(string userMobile, MyChatsFilterModel filterModel, Lang lang, int page = 0, int pageSize = 12)
        {
            var person = await _dbContext.Persons.FirstOrDefaultAsync(x => x.Mobile == userMobile);

            if (person == null)
            {
                throw new AwroNoreException("User Person not found");
            }

            var query = _dbContext.Consultancies.Where(x => x.PersonId == person.Id);

            if (filterModel.Status != null)
            {
                if (filterModel.Status == ConsultancyStatus.FINISHED)
                {
                    query = query.Where(x => x.Status == filterModel.Status || x.Status == ConsultancyStatus.REMOVED_BY_DOCTOR);
                }
                else
                {
                    query = query.Where(x => x.Status == filterModel.Status);
                }
            }

            if (filterModel.ServiceSupplyId != null)
            {
                query = query.Where(x => x.ServiceSupplyId == filterModel.ServiceSupplyId);
            }

            var totalCount = await query.CountAsync();

            query = query.OrderByDescending(x => x.CreatedAt).Skip(pageSize * page).Take(pageSize);

            var chats = await query.Select(x => new ConsultantChatsDTO
            {
                Id              = x.Id,
                PersonId        = x.PersonId,
                ServiceSupplyId = x.ServiceSupplyId,
                FinishedAt      = x.FinishedAt != null ? x.FinishedAt.ToString() : "",
                StartedAt       = x.StartedAt != null ? x.StartedAt.ToString() : "",
                Status          = x.Status != ConsultancyStatus.REMOVED_BY_DOCTOR ? x.Status : ConsultancyStatus.FINISHED,
                PersonName      = lang == Lang.KU ? x.ServiceSupply.Person.FullName_Ku : lang == Lang.AR ? x.ServiceSupply.Person.FullName_Ar : x.ServiceSupply.Person.FullName,
                PersonAvatar    = x.ServiceSupply.Person.RealAvatar,
                LastMessage     = x.ConsultancyMessages.Any() ? x.ConsultancyMessages.OrderByDescending(m => m.CreatedAt).FirstOrDefault().Type == ConsultancyMessageType.PHOTO ? Global.Photo : x.ConsultancyMessages.OrderByDescending(m => m.CreatedAt).FirstOrDefault().Type == ConsultancyMessageType.VOICE ? Global.Voice : x.ConsultancyMessages.OrderByDescending(m => m.CreatedAt).FirstOrDefault().Content : "",
            }).ToListAsync();

            var result = new ConsultantChatsResultDTO
            {
                TotalCount = totalCount,
                Chats      = chats
            };

            return(result);
        }