예제 #1
0
        static IEnumerable <NewsItem> GetItems(Database db, DbAccount acc)
        {
            var news = new DbNews(db.Conn, 10).Entries
                       .Select(x => NewsItem.FromDb(x)).ToArray();

            return(news.OrderByDescending(x => x.Date));
        }
        public async Task <Guid?> CreateAsync(DbNews dbNews)
        {
            if (dbNews == null)
            {
                return(null);
            }

            _provider.News.Add(dbNews);
            await _provider.SaveAsync();

            return(dbNews.Id);
        }
        public async Task <bool> EditAsync(Guid newsId, JsonPatchDocument <DbNews> patch)
        {
            DbNews dbNews = await _provider.News.FirstOrDefaultAsync(x => x.Id == newsId);

            if (dbNews == null || patch == null)
            {
                return(false);
            }

            patch.ApplyTo(dbNews);
            dbNews.ModifiedBy    = _httpContextAccessor.HttpContext.GetUserId();
            dbNews.ModifiedAtUtc = DateTime.UtcNow;
            await _provider.SaveAsync();

            return(true);
        }
예제 #4
0
        private static IEnumerable <NewsItem> GetItems(Database db, DbAccount acc)
        {
            var news = new DbNews(db, 10).Entries
                       .Select(x => NewsItem.FromDb(x)).ToArray();
            var chars = db.GetDeadCharacters(acc).Take(10).Select(x =>
            {
                var death = new DbDeath(acc, x);
                return(new NewsItem()
                {
                    Icon = "fame",
                    Title = $"Your {Program.GameData.ObjectTypeToId[death.ObjectType]} died at level {death.Level}",
                    TagLine = $"You earned {death.TotalFame} glorious Fame",
                    Link = $"fame:{death.CharId}",
                    Date = death.DeathTime
                });
            });

            return(news.Concat(chars).OrderByDescending(x => x.Date));
        }
예제 #5
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);
        }
예제 #6
0
        public NewsInfo Map(DbNews dbNews, DepartmentInfo department, UserInfo author, UserInfo sender)
        {
            if (dbNews == null)
            {
                return(null);
            }

            return(new NewsInfo
            {
                Id = dbNews.Id,
                Preview = dbNews.Preview,
                Subject = dbNews.Subject,
                Pseudonym = dbNews.Pseudonym,
                Department = department,
                Author = author,
                IsActive = dbNews.IsActive,
                CreatedAtUtc = dbNews.CreatedAtUtc,
                Sender = sender
            });
        }
예제 #7
0
        /// <summary>
        /// Добавляет сущность в базу данных на основе параметров входного IDTOModel.
        /// </summary>
        ///
        /// <param name="inputDTO"> Объект IDTOModel, параметры которого
        ///                         будут основой для добавляемого объекта.
        ///                         Тип класса влияет на тип сохраняемой сущности. </param>
        /// <remarks>
        /// Тип входного inputDTO влияет на тип сохраняемой сущности. </remarks>
        ///
        /// <returns> Task(bool), Result которого true, если операция добавления была успешно выполнена.
        /// Иначе, если тип класса входного IDTOModel не поддерживается в методе,
        /// сущность не будет сохранена и Result будет равен false.
        /// </returns>
        public async Task <bool> AddEntityToDb(IDTOModel inputDTO)
        {
            if (inputDTO.GetType() == typeof(DTONews))
            {
                DbNews news = inputDTO.DbObject as DbNews;

                _context.News.Add(news);
                await _context.SaveChangesAsync();
            }
            else if (inputDTO.GetType() == typeof(DTOUser))
            {
                DbUser user = inputDTO.DbObject as DbUser;

                _context.Users.Add(user);
                await _context.SaveChangesAsync();
            }
            else
            {
                return(false);
            }

            return(true);
        }
예제 #8
0
        internal DbNews_Mock(InitializationVariants variant) : base(variant)
        {
            switch (variant)
            {
            case InitializationVariants.Good:

                DbNewsObject = new DbNews(1, $"NewsFrom{DateTime.Now}",
                                          $@"TestFiles\{DbNewsObject.Name}.txt");

                break;

            case InitializationVariants.Null:

                DbNewsObject = new DbNews(0, null, null);

                break;

            case InitializationVariants.Empty:

                DbNewsObject = new DbNews(0, string.Empty, string.Empty);

                break;
            }
        }
예제 #9
0
 /// <summary>
 /// Создаёт экземпляр DTONews, создавая объект DbNews на основе входных параметров.
 /// </summary>
 ///
 /// <param name="author"> Объект DTOUser, свойство DbObject.Id которого
 ///                       будет сохранено для DbNews.DbUserId . </param>
 /// <param name="nameOfNews"> Будет применено для значения DbNews.Name. </param>
 /// <param name="nameOfDocument"> Название хранимого документа новостей,
 ///                               будет использовано для создания DbNews.PathToDocument . </param>
 public DTONews(DTOUser author, string nameOfNews, string nameOfDocument)
 {
     _dbObject = new DbNews(author._dbObject.Id, nameOfNews, $@"{FileManager.PathToDocFolder}\{nameOfDocument}");
 }
예제 #10
0
 /// <summary>
 /// Создаёт экземпляр DTONews.
 /// </summary>
 /// <param name="dbNews"> объект DbNews, являющегося основой DTONews. </param>
 internal DTONews(DbNews dbNews)
 {
     _dbObject = dbNews;
 }
예제 #11
0
 public DTONews(DbNews dbObject)
 {
     DbObject = dbObject;
 }