From 871d5eafe6734646818846f7678223b0256c54dd Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Mon, 23 Mar 2026 22:37:40 -0400 Subject: [PATCH] feat: add SearchService for unified search functionality - Create SearchService with SearchMediaItemsUnified method - Add SearchFieldValues method for autocomplete dropdown population - Add parseSearchQuery helper for quote detection (exact vs fuzzy search) - Move all business logic from handler to service layer - Follow established service pattern (FiltersService, CollectionService) - Service created inside handler constructor, not in main.go - SearchParams struct supports all filter types + sort parameter - FieldSearchParams struct for field-specific autocomplete queries - Returns FieldValue results with count and similarity scores This provides a clean service layer abstraction for search operations. --- internal/services/search.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/services/search.go b/internal/services/search.go index e15c220..ad5ba04 100644 --- a/internal/services/search.go +++ b/internal/services/search.go @@ -30,6 +30,7 @@ type SearchParams struct { YearMax int HasCover bool SearchQuery string + Sort string Limit int Offset int } @@ -76,6 +77,7 @@ func (s *SearchService) SearchMediaItemsUnified(ctx context.Context, params Sear SearchQuery: pgtype.Text{String: searchQuery, Valid: true}, IsExactSearch: pgtype.Bool{Bool: isExact, Valid: true}, SearchPattern: pgtype.Text{String: searchPattern, Valid: isExact}, + Sort: pgtype.Text{String: params.Sort, Valid: true}, Limit: pgtype.Int4{Int32: int32(params.Limit), Valid: true}, Offset: pgtype.Int4{Int32: int32(params.Offset), Valid: true}, }