diff options
Diffstat (limited to 'BackEnd/Timeline/Services/Api')
-rw-r--r-- | BackEnd/Timeline/Services/Api/ITimelineBookmarkService1.cs | 2 | ||||
-rw-r--r-- | BackEnd/Timeline/Services/Api/TimelineBookmarkService1.cs | 31 |
2 files changed, 32 insertions, 1 deletions
diff --git a/BackEnd/Timeline/Services/Api/ITimelineBookmarkService1.cs b/BackEnd/Timeline/Services/Api/ITimelineBookmarkService1.cs index f9ee4c15..0339e94a 100644 --- a/BackEnd/Timeline/Services/Api/ITimelineBookmarkService1.cs +++ b/BackEnd/Timeline/Services/Api/ITimelineBookmarkService1.cs @@ -10,6 +10,8 @@ namespace Timeline.Services.Api Task<TimelineBookmark> GetBookmarkAsync(long userId, long timelineId); + Task<TimelineBookmark> GetBookmarkAtAsync(long userId, int position); + Task<TimelineBookmark> AddBookmarkAsync(long userId, long timelineId, int? position = null); Task DeleteBookmarkAsync(long userId, long timelineId); diff --git a/BackEnd/Timeline/Services/Api/TimelineBookmarkService1.cs b/BackEnd/Timeline/Services/Api/TimelineBookmarkService1.cs index f047a12d..4b52d61c 100644 --- a/BackEnd/Timeline/Services/Api/TimelineBookmarkService1.cs +++ b/BackEnd/Timeline/Services/Api/TimelineBookmarkService1.cs @@ -29,6 +29,15 @@ namespace Timeline.Services.Api var user = await _userService.GetUserAsync(userId); var timeline = await _timelineService.GetTimelineAsync(timelineId); + if (await _databaseContext.BookmarkTimelines.AnyAsync(b => b.UserId == userId && b.TimelineId == timelineId)) + { + throw new EntityAlreadyExistException(EntityTypes.BookmarkTimeline, new Dictionary<string, object> + { + {"user-id", userId }, + {"timeline-id", timelineId } + }); + } + var count = await _databaseContext.BookmarkTimelines.Where(b => b.UserId == userId).CountAsync(); if (position.HasValue) @@ -92,7 +101,8 @@ namespace Timeline.Services.Api public async Task<TimelineBookmark> GetBookmarkAsync(long userId, long timelineId) { var user = await _userService.GetUserAsync(userId); - var timeline = await _timelineService.GetTimelineAsync(timelineId); var entity = await _databaseContext.BookmarkTimelines.Where(b => b.UserId == userId && b.TimelineId == timelineId).SingleOrDefaultAsync(); + var timeline = await _timelineService.GetTimelineAsync(timelineId); + var entity = await _databaseContext.BookmarkTimelines.Where(b => b.UserId == userId && b.TimelineId == timelineId).SingleOrDefaultAsync(); if (entity is null) { @@ -106,6 +116,25 @@ namespace Timeline.Services.Api return new TimelineBookmark(user.Username, timeline.Name is null ? "self" : timeline.Name, (int)entity.Rank); } + public async Task<TimelineBookmark> GetBookmarkAtAsync(long userId, int position) + { + var user = await _userService.GetUserAsync(userId); + var entity = await _databaseContext.BookmarkTimelines.Where(b => b.UserId == userId && b.Rank == position).SingleOrDefaultAsync(); + + if (entity is null) + { + throw new EntityNotExistException(EntityTypes.BookmarkTimeline, new Dictionary<string, object> + { + { "user-id", userId }, + { "position", position } + }); + } + + var timeline = await _timelineService.GetTimelineAsync(entity.TimelineId); + + return new TimelineBookmark(user.Username, timeline.Name is null ? "self" : timeline.Name, (int)entity.Rank); + } + public async Task<Page<TimelineBookmark>> GetBookmarksAsync(long userId, int page, int pageSize) { if (page <= 0) throw new ArgumentOutOfRangeException(nameof(page)); |