BlazorStart/Start/Server/Controllers/BookmarksController.cs

120 lines
3.9 KiB
C#
Raw Normal View History

2021-11-14 03:27:01 +00:00
using System.Collections.Generic;
2021-11-16 05:44:16 +00:00
using System.Linq;
2021-11-13 03:21:59 +00:00
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
2021-11-13 03:21:59 +00:00
using Microsoft.AspNetCore.Mvc;
using Start.Server.Data.Services.Interfaces;
2021-11-14 03:27:01 +00:00
using Start.Server.Extensions;
2021-11-16 05:44:16 +00:00
using Start.Shared;
2021-11-13 03:21:59 +00:00
namespace Start.Server.Controllers {
[Authorize]
[ApiController]
[Route("[controller]/[action]")]
2021-11-13 03:21:59 +00:00
public class BookmarksController : ControllerBase {
2021-11-14 03:27:01 +00:00
private readonly IBookmarkContainerService bookmarkContainerService;
private readonly IBookmarkGroupService bookmarkGroupService;
2021-11-13 03:21:59 +00:00
private readonly IBookmarkService bookmarkService;
2021-11-14 03:27:01 +00:00
public BookmarksController(IBookmarkContainerService bookmarkContainerService,
IBookmarkGroupService bookmarkGroupService, IBookmarkService bookmarkService) {
this.bookmarkContainerService = bookmarkContainerService;
this.bookmarkGroupService = bookmarkGroupService;
2021-11-13 03:21:59 +00:00
this.bookmarkService = bookmarkService;
}
[HttpGet]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(IEnumerable<BookmarkContainerDto>))]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public IActionResult GetAllBookmarkContainers() {
List<BookmarkContainerDto>? containers = this.bookmarkContainerService
.GetUserBookmarkContainers(this.GetAuthorizedUserId())
2021-11-16 05:44:16 +00:00
.Select(bc => bc.MapToDto())
.ToList();
if (containers == null)
return NotFound();
return Ok(containers);
2021-11-13 03:21:59 +00:00
}
[HttpGet]
[Route("{bookmarkContainerId}")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(BookmarkContainerDto))]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public IActionResult GetBookmarkContainer(int bookmarkContainerId) {
BookmarkContainerDto? container = this.bookmarkContainerService
.GetBookmarkContainer(this.GetAuthorizedUserId(), bookmarkContainerId, true, true)
2021-11-16 06:27:28 +00:00
?.MapToDto();
if (container == null)
return NotFound();
return Ok(container);
2021-11-13 03:21:59 +00:00
}
2021-11-14 01:19:28 +00:00
[HttpGet]
[Route("{bookmarkId}")]
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(BookmarkDto))]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public IActionResult GetBookmark(int bookmarkId) {
BookmarkDto? bookmark = this.bookmarkService
.GetBookmark(this.GetAuthorizedUserId(), bookmarkId)
2021-11-16 06:27:28 +00:00
?.MapToDto();
if (bookmark == null)
return NotFound();
return Ok(bookmark);
2021-11-14 01:19:28 +00:00
}
2021-11-13 03:21:59 +00:00
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created, Type = typeof(BookmarkDto))]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public IActionResult CreateBookmark(string title, string url, string? notes,
2021-11-13 03:21:59 +00:00
int bookmarkGroupId) {
BookmarkDto? bookmark = this.bookmarkService
.CreateBookmark(this.GetAuthorizedUserId(), title, url, notes, bookmarkGroupId)
2021-11-16 06:27:28 +00:00
?.MapToDto();
if (bookmark == null)
return BadRequest();
return Created(
Url.Action(nameof(this.GetBookmark),new { bookmarkId = bookmark.BookmarkId }),
bookmark);
2021-11-16 05:44:16 +00:00
}
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created, Type = typeof(BookmarkContainerDto))]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public IActionResult CreateBookmarkContainer([FromBody] string title) {
BookmarkContainerDto? container = this.bookmarkContainerService
.CreateBookmarkContainer(this.GetAuthorizedUserId(), title)
2021-11-16 06:27:28 +00:00
?.MapToDto();
if (container == null)
return BadRequest();
return Created(
Url.Action(nameof(this.GetBookmarkContainer),
new { bookmarkContainerId = container.BookmarkContainerId }),
container);
2021-11-14 01:19:28 +00:00
}
[HttpDelete]
[Route("{bookmarkContainerId}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public IActionResult DeleteBookmarkContainer(int bookmarkContainerId) {
bool res = this.bookmarkContainerService
.DeleteBookmarkContainer(this.GetAuthorizedUserId(), bookmarkContainerId);
if (!res)
return NotFound();
return Ok();
}
2021-11-13 03:21:59 +00:00
}
}