From 6125b036bf42b8d34bfeaeda4242f930eb6e4bcb Mon Sep 17 00:00:00 2001 From: Glax Date: Sun, 18 May 2025 15:31:11 +0200 Subject: [PATCH] SearchController.cs Local-Search endpoint --- API/Controllers/SearchController.cs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/API/Controllers/SearchController.cs b/API/Controllers/SearchController.cs index fbef959..e1a4324 100644 --- a/API/Controllers/SearchController.cs +++ b/API/Controllers/SearchController.cs @@ -6,6 +6,7 @@ using Asp.Versioning; using log4net; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; +using Soenneker.Utils.String.NeedlemanWunsch; using static Microsoft.AspNetCore.Http.StatusCodes; // ReSharper disable InconsistentNaming @@ -55,6 +56,27 @@ public class SearchController(PgsqlContext context, ILog Log) : Controller return Ok(retMangas.ToArray()); } + + /// + /// Initiate a search for a Manga on a specific Connector + /// + /// + /// + /// MangaConnector with ID not found + /// MangaConnector with ID is disabled + /// Error during Database Operation + [HttpGet("Local/{Query}")] + [ProducesResponseType(Status200OK, "application/json")] + [ProducesResponseType(Status404NotFound)] + [ProducesResponseType(Status406NotAcceptable)] + [ProducesResponseType(Status500InternalServerError, "text/plain")] + public IActionResult SearchMangaLocally(string Query) + { + Dictionary distance = context.Mangas + .ToArray() + .ToDictionary(m => m, m => NeedlemanWunschStringUtil.CalculateSimilarityPercentage(Query, m.Name)); + return Ok(distance.Where(kv => kv.Value > 50).ToArray()); + } /// /// Returns Manga from MangaConnector associated with URL