From f237d82cac8c6b77f6a5a1cdf3f8e3eb38996b76 Mon Sep 17 00:00:00 2001 From: Glax Date: Thu, 13 Mar 2025 16:44:34 +0100 Subject: [PATCH] Add Endpoints to retrieve Database-Entries for Author, Link, and MangaAltTitle from Id --- API/Controllers/QueryController.cs | 75 ++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 API/Controllers/QueryController.cs diff --git a/API/Controllers/QueryController.cs b/API/Controllers/QueryController.cs new file mode 100644 index 0000000..b881fa1 --- /dev/null +++ b/API/Controllers/QueryController.cs @@ -0,0 +1,75 @@ +using API.Schema; +using Asp.Versioning; +using Microsoft.AspNetCore.Mvc; +using static Microsoft.AspNetCore.Http.StatusCodes; + +namespace API.Controllers; + +[ApiVersion(2)] +[ApiController] +[Route("v{v:apiVersion}/[controller]")] +public class QueryController(PgsqlContext context) : Controller +{ + [HttpGet("Author/{AuthorId}")] + [ProducesResponseType(Status200OK, "application/json")] + [ProducesResponseType(Status404NotFound)] + public IActionResult GetAuthor(string AuthorId) + { + Author? ret = context.Authors.Find(AuthorId); + if (ret is null) + return NotFound(); + return Ok(ret); + } + + [HttpGet("Mangas/WithAuthorId/{AuthorId}")] + [ProducesResponseType(Status200OK, "application/json")] + public IActionResult GetMangaWithAuthorIds(string AuthorId) + { + return Ok(context.Manga.Where(m => m.AuthorIds.Contains(AuthorId))); + } + + [HttpGet("Link/{LinkId}")] + [ProducesResponseType(Status200OK, "application/json")] + [ProducesResponseType(Status404NotFound)] + public IActionResult GetLink(string LinkId) + { + Link? ret = context.Link.Find(LinkId); + if (ret is null) + return NotFound(); + return Ok(ret); + } + + [HttpGet("Links/WithIds")] + [ProducesResponseType(Status200OK, "application/json")] + public IActionResult GetLink([FromBody]string[] LinkIds) + { + Link[] ret = context.Link.Where(l => LinkIds.Contains(l.LinkId)).ToArray(); + return Ok(ret); + } + + [HttpGet("AltTitle/{AltTitleId}")] + [ProducesResponseType(Status200OK, "application/json")] + [ProducesResponseType(Status404NotFound)] + public IActionResult GetAltTitle(string AltTitleId) + { + MangaAltTitle? ret = context.AltTitles.Find(AltTitleId); + if (ret is null) + return NotFound(); + return Ok(ret); + } + + [HttpGet("AltTitles/WithIds")] + [ProducesResponseType(Status200OK, "application/json")] + public IActionResult GetAltTitle([FromBody]string[] AltTitleIds) + { + MangaAltTitle[] ret = context.AltTitles.Where(a => AltTitleIds.Contains(a.AltTitleId)).ToArray(); + return Ok(ret); + } + + [HttpGet("Mangas/WithTag/{Tag}")] + [ProducesResponseType(Status200OK, "application/json")] + public IActionResult GetMangasWithTag(string Tag) + { + return Ok(context.Manga.Where(m => m.Tags.Contains(Tag))); + } +} \ No newline at end of file