public async Task <bool> AddBookmarkAsync(long userId, long timelineId)
        {
            await _userService.ThrowIfUserNotExist(userId);

            await _timelineService.ThrowIfTimelineNotExist(timelineId);

            if (await _database.BookmarkTimelines.AnyAsync(t => t.TimelineId == timelineId && t.UserId == userId))
            {
                return(false);
            }

            _database.BookmarkTimelines.Add(new BookmarkTimelineEntity
            {
                TimelineId = timelineId,
                UserId     = userId,
                Rank       = (await _database.BookmarkTimelines.CountAsync(t => t.UserId == userId)) + 1
            });

            await _database.SaveChangesAsync();

            return(true);
        }
        public async Task <bool> AddHighlightTimelineAsync(long timelineId, long?operatorId)
        {
            await _timelineService.ThrowIfTimelineNotExist(timelineId);

            if (operatorId.HasValue)
            {
                await _userService.ThrowIfUserNotExist(operatorId.Value);
            }

            var alreadyIs = await _database.HighlightTimelines.AnyAsync(t => t.TimelineId == timelineId);

            if (alreadyIs)
            {
                return(false);
            }

            _database.HighlightTimelines.Add(new HighlightTimelineEntity {
                TimelineId = timelineId, OperatorId = operatorId, AddTime = _clock.GetCurrentTime(), Order = await _database.HighlightTimelines.CountAsync() + 1
            });
            await _database.SaveChangesAsync();

            return(true);
        }
Esempio n. 3
0
        public async Task <List <TimelinePostEntity> > GetPostsAsync(long timelineId, DateTime?modifiedSince = null, bool includeDeleted = false)
        {
            await _basicTimelineService.ThrowIfTimelineNotExist(timelineId);

            modifiedSince = modifiedSince?.MyToUtc();

            IQueryable <TimelinePostEntity> query = _database.TimelinePosts.Where(p => p.TimelineId == timelineId);

            if (!includeDeleted)
            {
                query = query.Where(p => !p.Deleted);
            }

            if (modifiedSince.HasValue)
            {
                query = query.Where(p => p.LastUpdated >= modifiedSince || (p.Author != null && p.Author.UsernameChangeTime >= modifiedSince));
            }

            query = query.OrderBy(p => p.Time);

            return(await query.ToListAsync());
        }