Esempio n. 1
0
        public async Task <OperationResultResponse <NewsResponse> > ExecuteAsync(Guid newsId)
        {
            OperationResultResponse <NewsResponse> response = new();

            DbNews dbNews = await _repository.GetAsync(newsId);

            if (dbNews == null)
            {
                _httpContextAccessor.HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound;

                response.Status = OperationResultStatusType.Failed;
                return(response);
            }

            List <DepartmentData> departmentsData = await GetDepartmentAsync(dbNews.Id, response.Errors);

            List <UserData> usersData =
                await GetUsersDataAsync(
                    new List <Guid>() { dbNews.AuthorId, dbNews.CreatedBy },
                    response.Errors);

            List <ImageData> avatarsImages =
                await GetUsersAvatarsAsync(
                    usersData?.Where(ud => ud.ImageId.HasValue).Select(ud => ud.ImageId.Value).ToList(),
                    response.Errors);

            List <UserInfo> usersInfo =
                usersData?
                .Select(ud => _userInfoMapper.Map(ud, avatarsImages?.FirstOrDefault(ai => ai.ImageId == ud.ImageId))).ToList();

            response.Body = _mapper
                            .Map(
                dbNews,
                _departmentInfoMapper.Map(departmentsData?.FirstOrDefault()),
                usersInfo?.FirstOrDefault(ui => ui.Id == dbNews.AuthorId),
                usersInfo?.FirstOrDefault(ui => ui.Id == dbNews.CreatedBy));

            response.Status = response.Errors.Any()
        ? OperationResultStatusType.PartialSuccess
        : OperationResultStatusType.FullSuccess;

            return(response);
        }
        public async Task <FindResultResponse <NewsInfo> > ExecuteAsync(FindNewsFilter findNewsFilter)
        {
            FindResultResponse <NewsInfo> response = new();

            if (!_baseFindValidator.ValidateCustom(findNewsFilter, out List <string> errors))
            {
                _httpContextAccessor.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;

                response.Status = OperationResultStatusType.Failed;
                response.Errors = errors;
                return(response);
            }

            (List <DbNews> dbNewsList, int totalCount) =
                await _repository.FindAsync(findNewsFilter);

            if (dbNewsList == null)
            {
                return(response);
            }

            List <DepartmentData> departmentsData = await GetDepartmentsAsync(
                dbNewsList
                .Select(n => n.Id)
                .Distinct()
                .ToList(),
                response.Errors);

            List <UserData> usersData = await GetUsersDataAsync(
                dbNewsList
                .Select(n => n.AuthorId)
                .Concat(dbNewsList.Select(n => n.CreatedBy))
                .Distinct()
                .ToList(),
                response.Errors);

            List <ImageData> avatarImages = await GetImagesDataAsync(
                usersData?
                .Where(u => u.ImageId.HasValue)
                .Select(u => u.ImageId.Value)
                .ToList(),
                response.Errors);

            List <UserInfo> usersInfo = usersData?
                                        .Select(ud => _userInfoMapper.Map(ud, avatarImages?.FirstOrDefault(id => ud.ImageId == id.ImageId)))
                                        .ToList();

            response.Body = dbNewsList
                            .Select(dbNews => _mapper.Map(
                                        dbNews,
                                        _departmentInfoMapper.Map(departmentsData?.FirstOrDefault(di => di.NewsIds.Contains(dbNews.Id))),
                                        usersInfo?.FirstOrDefault(ud => dbNews.AuthorId == ud.Id),
                                        usersInfo?.FirstOrDefault(ud => dbNews.CreatedBy == ud.Id)))
                            .ToList();

            response.TotalCount = totalCount;

            response.Status = response.Errors.Any()
        ? OperationResultStatusType.PartialSuccess
        : OperationResultStatusType.FullSuccess;

            return(response);
        }