From a694b9f5ab6e562ad47ef2ecf0ff105445ee779b Mon Sep 17 00:00:00 2001 From: Glax Date: Sat, 8 Mar 2025 13:09:19 +0100 Subject: [PATCH] Add endpoint to add Manga by URL --- API/Controllers/SearchController.cs | 38 ++++++++++++++++++++ API/Schema/MangaConnectors/MangaConnector.cs | 2 +- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/API/Controllers/SearchController.cs b/API/Controllers/SearchController.cs index 10970f9..659b8e2 100644 --- a/API/Controllers/SearchController.cs +++ b/API/Controllers/SearchController.cs @@ -86,6 +86,44 @@ public class SearchController(PgsqlContext context) : Controller return Ok(retMangas.ToArray()); } + + /// + /// Returns Manga from MangaConnector associated with URL + /// + /// Manga-Page URL + /// + /// Multiple connectors found for URL + /// No Manga at URL + /// No connector found for URL + /// Error during Database Operation + [ProducesResponseType(Status200OK, "application/json")] + [ProducesResponseType(Status300MultipleChoices)] + [ProducesResponseType(Status400BadRequest)] + [ProducesResponseType(Status404NotFound)] + [ProducesResponseType(Status500InternalServerError, "text/plain")] + public IActionResult GetMangaFromUrl(string url) + { + List connectors = context.MangaConnectors.AsEnumerable().Where(c => c.ValidateUrl(url)).ToList(); + if (connectors.Count == 0) + return NotFound(); + else if (connectors.Count > 1) + return StatusCode(Status300MultipleChoices); + + (Manga manga, List? authors, List? tags, List? links, List? altTitles)? x = connectors.First().GetMangaFromUrl(url); + if (x is null) + return BadRequest(); + try + { + Manga? add = AddMangaToContext(x.Value.manga, x.Value.authors, x.Value.tags, x.Value.links, x.Value.altTitles); + if (add is not null) + return Ok(add); + return StatusCode(500); + } + catch (Exception e) + { + return StatusCode(500, e.Message); + } + } private Manga? AddMangaToContext(Manga? manga, List? authors, List? tags, List? links, List? altTitles) diff --git a/API/Schema/MangaConnectors/MangaConnector.cs b/API/Schema/MangaConnectors/MangaConnector.cs index 4545c46..c4b78fe 100644 --- a/API/Schema/MangaConnectors/MangaConnector.cs +++ b/API/Schema/MangaConnectors/MangaConnector.cs @@ -41,5 +41,5 @@ public abstract class MangaConnector(string name, string[] supportedLanguages, s internal abstract string[] GetChapterImageUrls(Chapter chapter); - protected bool ValidateUrl(string url) => BaseUris.Any(baseUri => Regex.IsMatch(url, "https?://" + baseUri + "/.*")); + public bool ValidateUrl(string url) => BaseUris.Any(baseUri => Regex.IsMatch(url, "https?://" + baseUri + "/.*")); } \ No newline at end of file