diff options
author | crupest <crupest@outlook.com> | 2022-04-10 22:37:58 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-04-10 22:37:58 +0800 |
commit | 74bfab88dfdcdc08ee512253a803f2b3016e5f03 (patch) | |
tree | 79ef03b744245460983ed2cc3b0322ee16e50989 /BackEnd/Timeline/Controllers | |
parent | 9c874edbb35c87448ce91c142b127b450879e6b4 (diff) | |
download | timeline-74bfab88dfdcdc08ee512253a803f2b3016e5f03.tar.gz timeline-74bfab88dfdcdc08ee512253a803f2b3016e5f03.tar.bz2 timeline-74bfab88dfdcdc08ee512253a803f2b3016e5f03.zip |
...
Diffstat (limited to 'BackEnd/Timeline/Controllers')
-rw-r--r-- | BackEnd/Timeline/Controllers/TimelineBookmark1Controller.cs | 67 |
1 files changed, 60 insertions, 7 deletions
diff --git a/BackEnd/Timeline/Controllers/TimelineBookmark1Controller.cs b/BackEnd/Timeline/Controllers/TimelineBookmark1Controller.cs index 1dfc1715..73d2078f 100644 --- a/BackEnd/Timeline/Controllers/TimelineBookmark1Controller.cs +++ b/BackEnd/Timeline/Controllers/TimelineBookmark1Controller.cs @@ -1,7 +1,12 @@ -using System; -using System.Threading.Tasks; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Timeline.Models; +using Timeline.Models.Http; +using Timeline.Services.Api; +using Timeline.Services.Timeline; +using Timeline.Services.User; namespace Timeline.Controllers { @@ -9,15 +14,63 @@ namespace Timeline.Controllers [Route("users/{username}/bookmarks")] public class TimelineBookmark1Controller : MyControllerBase { - public TimelineBookmark1Controller() + private readonly IUserService _userService; + private readonly ITimelineService _timelineService; + private readonly ITimelineBookmarkService1 _timelineBookmarkService; + + public TimelineBookmark1Controller(IUserService userService, ITimelineService timelineService, ITimelineBookmarkService1 timelineBookmarkService) + { + _userService = userService; + _timelineService = timelineService; + _timelineBookmarkService = timelineBookmarkService; + } + + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status403Forbidden)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status422UnprocessableEntity)] + [HttpGet] + public async Task<ActionResult<Page<TimelineBookmark>>> ListAsync([FromRoute] string username, [FromQuery] int? page, [FromQuery] int? pageSize) + { + var userId = await _userService.GetUserIdByUsernameAsync(username); + if (!UserHasPermission(UserPermission.UserBookmarkManagement) && !await _timelineBookmarkService.CanReadBookmarksAsync(userId, GetOptionalAuthUserId())) + { + return Forbid(); + } + return await _timelineBookmarkService.GetBookmarksAsync(userId, page ?? 1, pageSize ?? 20); + } + + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status403Forbidden)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status422UnprocessableEntity)] + [HttpGet("{index}")] + public async Task<ActionResult<TimelineBookmark>> GetAsync([FromRoute] string username, [FromRoute] int index) { + var userId = await _userService.GetUserIdByUsernameAsync(username); + if (!UserHasPermission(UserPermission.UserBookmarkManagement) && !await _timelineBookmarkService.CanReadBookmarksAsync(userId, GetOptionalAuthUserId())) + { + return Forbid(); + } + return await _timelineBookmarkService.GetBookmarkAtAsync(userId, index); } - [ProducesResponseType(200)] - [ProducesResponseType(403)] - public async Task<ActionResult<TimelineBookmark>> ListAsync([FromRoute] string username) + [ProducesResponseType(StatusCodes.Status201Created)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status403Forbidden)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status422UnprocessableEntity)] + [Authorize] + public async Task<ActionResult<TimelineBookmark>> CreateAsync([FromRoute] string username, [FromBody] HttpTimelineBookmarkCreateRequest body) { - throw new NotImplementedException(); + var userId = await _userService.GetUserIdByUsernameAsync(username); + if (!UserHasPermission(UserPermission.UserBookmarkManagement) && GetAuthUserId() != userId) + { + return Forbid(); + } + var timelineId = await _timelineService.GetTimelineIdAsync(body.TimelineOwner, body.TimelineName); + var bookmark = await _timelineBookmarkService.AddBookmarkAsync(userId, timelineId, body.Position); + return CreatedAtAction("Get", new { username, index = bookmark.Position }, bookmark); } } } |