Added page and endpoints for managing Tags

This commit is contained in:
2023-02-19 20:51:31 -06:00
parent 1f3adf0932
commit c55b018c0d
27 changed files with 896 additions and 70 deletions

View File

@ -39,20 +39,6 @@ namespace YABA.API.Controllers
return CreatedAtAction(nameof(Create), _mapper.Map<BookmarkResponse>(result));
}
[HttpPost("{id}/Tags")]
[ProducesResponseType(typeof(IEnumerable<TagResponse>),(int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> UpdateBookmarkTags(int id, [FromBody] UpdateBookmarkTagRequest request)
{
if (request.Tags == null || !request.Tags.Any()) return BadRequest();
var result = await _bookmarkService.UpdateBookmarkTags(id, request.Tags);
if (result == null) return NotFound();
return Ok(_mapper.Map<IEnumerable<TagResponse>>(result));
}
[HttpPut("{id}")]
[ProducesResponseType(typeof(BookmarkResponse), (int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
@ -106,18 +92,6 @@ namespace YABA.API.Controllers
return Ok(_mapper.Map<BookmarkResponse>(result));
}
[HttpGet("{id}/Tags")]
[ProducesResponseType(typeof(IEnumerable<TagResponse>), (int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public IActionResult GetBookmarkTags(int id)
{
var result = _bookmarkService.GetBookmarkTags(id);
if (result == null) return NotFound();
return Ok(_mapper.Map<IEnumerable<TagResponse>>(result));
}
[HttpDelete("{id}")]
[ProducesResponseType((int)HttpStatusCode.NoContent)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
@ -160,5 +134,13 @@ namespace YABA.API.Controllers
return NoContent();
}
[HttpGet("Tags")]
[ProducesResponseType((int)HttpStatusCode.OK)]
public IActionResult GetBookmarkTags(bool showHidden = false)
{
var result = _bookmarkService.GetAllBookmarkTags(showHidden);
return Ok(_mapper.Map<IEnumerable<TagResponse>>(result));
}
}
}

View File

@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Net;
using YABA.API.ViewModels.Tags;
using YABA.Common.DTOs.Tags;
using YABA.Service.Interfaces;
namespace YABA.API.Controllers
@ -24,10 +25,86 @@ namespace YABA.API.Controllers
[HttpGet]
[ProducesResponseType(typeof(IEnumerable<TagResponse>), (int)HttpStatusCode.OK)]
public IActionResult GetTags()
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> GetAll()
{
var result = _tagsService.GetAll();
var result = await _tagsService.GetAll();
if (result == null) return NotFound();
return Ok(_mapper.Map<IEnumerable<TagResponse>>(result));
}
[HttpGet("{id}")]
[ProducesResponseType(typeof(TagResponse), (int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> Get(int id)
{
var result = await _tagsService.Get(id);
if (result == null) return NotFound();
return Ok(_mapper.Map<TagResponse>(result));
}
[HttpPost]
[ProducesResponseType(typeof(IEnumerable<TagResponse>), (int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.BadRequest)]
public async Task<IActionResult> CreateTag([FromBody]CreateTagDTO request)
{
if (!ModelState.IsValid) return BadRequest(ModelState);
var result = await _tagsService.CreateTag(request);
if (result == null) return BadRequest();
return Ok(_mapper.Map<TagResponse>(result));
}
[HttpPut("{id}")]
[ProducesResponseType(typeof(IEnumerable<TagResponse>), (int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> UpdateTag(int id, [FromBody]UpdateTagDTO request)
{
var result = await _tagsService.UpdateTag(id, request);
if (result == null) return NotFound();
return Ok(_mapper.Map<TagResponse>(result));
}
[HttpPatch("{id}")]
[ProducesResponseType(typeof(IEnumerable<TagResponse>), (int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> PatchTag(int id, [FromBody] UpdateTagDTO request) => await UpdateTag(id, request);
[HttpDelete]
[ProducesResponseType((int)HttpStatusCode.NoContent)]
[ProducesResponseType ((int)HttpStatusCode.NotFound)]
[ProducesResponseType((int)HttpStatusCode.BadRequest)]
public async Task<IActionResult> DeleteTags([FromBody] DeleteTagsRequest request)
{
if(request.Ids == null || !request.Ids.Any()) return BadRequest();
var result = await _tagsService.DeleteTags(request.Ids);
if (result == null) return NotFound();
return NoContent();
}
[HttpPost("Hide")]
[ProducesResponseType((int)HttpStatusCode.NoContent)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
[ProducesResponseType((int)HttpStatusCode.BadRequest)]
public async Task<IActionResult> HideTags([FromBody] HideTagsRequest request)
{
if (request.Ids == null || !request.Ids.Any()) return BadRequest();
var result = await _tagsService.HideTags(request.Ids);
if (result == null) return NotFound();
return NoContent();
}
}
}

View File

@ -13,11 +13,11 @@ namespace YABA.API.Settings
public AutoMapperProfile()
{
CreateMap<UserDTO, UserResponse>();
CreateMap<TagSummaryDTO, TagResponse>();
CreateMap<BookmarkDTO, BookmarkResponse>();
CreateMap<WebsiteMetaDataDTO, GetWebsiteMetaDataResponse>();
CreateMap<BookmarkDTO, PatchBookmarkRequest>();
CreateMap<PatchBookmarkRequest, UpdateBookmarkRequestDTO>();
CreateMap<TagDTO, TagResponse>().ReverseMap();
}
}
}

View File

@ -0,0 +1,7 @@
namespace YABA.API.ViewModels.Tags
{
public class DeleteTagsRequest
{
public IEnumerable<int> Ids { get; set; }
}
}

View File

@ -0,0 +1,7 @@
namespace YABA.API.ViewModels.Tags
{
public class HideTagsRequest
{
public IEnumerable<int> Ids { get; set; }
}
}

View File

@ -4,5 +4,6 @@
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsHidden { get; set; }
}
}