예제 #1
0
        public async Task <UserFeed> CreateAsync(int rssFeedId, int userAccountId, string name, string groupName)
        {
            var userFeed = await _context.UserFeeds.AddAsync(new UserFeed {
                RssFeedId     = rssFeedId,
                UserAccountId = userAccountId,
                Name          = name,
                GroupName     = groupName
            });

            await _context.SaveChangesAsync();

            return(userFeed.Entity);
        }
        public async Task RemoveArticlesWhereCountOverAsync(int purgeCount)
        {
            var feedIdsWithTooManyArticles = await _context.Database.GetDbConnection().QueryAsync <int>(
                "select RssFeedId from Articles group by RssFeedId having count(1) > @purgeCount", new { purgeCount });

            foreach (var feedId in feedIdsWithTooManyArticles)
            {
                _logger.LogTrace($"Removing old articles from feed {feedId}");
                var articlesToDelete = _context.Articles.Where(a => a.RssFeedId == feedId).OrderByDescending(a => a.Published).ThenByDescending(a => a.Id).Skip(purgeCount);
                _context.Articles.RemoveRange(articlesToDelete);
                await _context.SaveChangesAsync();
            }

            _context.UserArticlesRead.RemoveRange(_context.UserArticlesRead.FromSqlRaw("select uar.* from UserArticlesRead uar left join Articles a on uar.ArticleId = a.Id where a.Id is null"));
            await _context.SaveChangesAsync();
        }
        public async Task UpdateAsync(UserAccount userAccount)
        {
            var userAccountSettings = await _context.UserAccountSettings.Where(uas => uas.UserAccountId == userAccount.Id).ToListAsync();

            var userAccountSetting = userAccountSettings.FirstOrDefault(uas => uas.SettingType == "ShowAllItems" && uas.SettingName == "ShowAllItems");

            if (userAccountSetting == null)
            {
                await _context.UserAccountSettings.AddAsync(new UserAccountSetting { UserAccountId = userAccount.Id, SettingType = "ShowAllItems", SettingName = "ShowAllItems", SettingValue = Convert.ToString(userAccount.ShowAllItems) });
            }
            else
            {
                userAccountSetting.SettingValue = Convert.ToString(userAccount.ShowAllItems);
            }

            userAccountSetting = userAccountSettings.FirstOrDefault(uas => uas.SettingType == "PocketAccessToken" && uas.SettingName == "PocketAccessToken");
            if (userAccountSetting == null)
            {
                await _context.UserAccountSettings.AddAsync(new UserAccountSetting { UserAccountId = userAccount.Id, SettingType = "PocketAccessToken", SettingName = "PocketAccessToken", SettingValue = userAccount.PocketAccessToken });
            }
            else
            {
                userAccountSetting.SettingValue = userAccount.PocketAccessToken;
            }

            _context.UserAccountSettings.RemoveRange(userAccountSettings.Where(uas => uas.SettingType == "ExpandedGroup"));
            await _context.UserAccountSettings.AddRangeAsync(userAccount.ExpandedGroups.Select(g => new UserAccountSetting
            {
                UserAccountId = userAccount.Id,
                SettingType   = "ExpandedGroup",
                SettingName   = "ExpandedGroup",
                SettingValue  = g
            }));

            _context.UserAccountSettings.RemoveRange(userAccountSettings.Where(uas => uas.SettingType == "SavedLayout"));
            await _context.UserAccountSettings.AddRangeAsync(userAccount.SavedLayout.Select(l => new UserAccountSetting
            {
                UserAccountId = userAccount.Id,
                SettingType   = "SavedLayout",
                SettingName   = l.Key,
                SettingValue  = l.Value
            }));

            await _context.SaveChangesAsync();
        }
        public async Task <bool> TryCreateAsync(int userAccountId, int userFeedId, int articleId)
        {
            if (await _context.UserArticlesRead.AnyAsync(uar =>
                                                         uar.UserAccountId == userAccountId &&
                                                         uar.UserFeedId == userFeedId &&
                                                         uar.ArticleId == articleId))
            {
                return(false);
            }

            await _context.UserArticlesRead.AddAsync(new UserArticlesRead {
                UserAccountId = userAccountId,
                UserFeedId    = userFeedId,
                ArticleId     = articleId
            });

            await _context.SaveChangesAsync();

            return(true);
        }
        public async Task <RssFeed> CreateAsync(string uri)
        {
            var feed = await GetByUriAsync(uri);

            if (feed != null)
            {
                throw new ArgumentException($"RSS feed already exists with uri: [{uri}]");
            }
            var added = await _context.RssFeeds.AddAsync(new RssFeed { Uri = uri });

            await _context.SaveChangesAsync();

            return(added.Entity);
        }
예제 #6
0
        public async Task AddOrUpdateAsync(string settingName, string settingValue)
        {
            var currentSetting = await FindSettingByNameAsync(settingName);

            if (currentSetting != null)
            {
                currentSetting.SettingValue = settingValue;
            }
            else
            {
                await _context.BackgroundServiceSettings.AddAsync(new BackgroundServiceSetting {
                    SettingName  = settingName,
                    SettingValue = settingValue
                });
            }
            await _context.SaveChangesAsync();
        }