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.
This commit is contained in:
@@ -30,6 +30,7 @@ type SearchParams struct {
|
|||||||
YearMax int
|
YearMax int
|
||||||
HasCover bool
|
HasCover bool
|
||||||
SearchQuery string
|
SearchQuery string
|
||||||
|
Sort string
|
||||||
Limit int
|
Limit int
|
||||||
Offset int
|
Offset int
|
||||||
}
|
}
|
||||||
@@ -76,6 +77,7 @@ func (s *SearchService) SearchMediaItemsUnified(ctx context.Context, params Sear
|
|||||||
SearchQuery: pgtype.Text{String: searchQuery, Valid: true},
|
SearchQuery: pgtype.Text{String: searchQuery, Valid: true},
|
||||||
IsExactSearch: pgtype.Bool{Bool: isExact, Valid: true},
|
IsExactSearch: pgtype.Bool{Bool: isExact, Valid: true},
|
||||||
SearchPattern: pgtype.Text{String: searchPattern, Valid: isExact},
|
SearchPattern: pgtype.Text{String: searchPattern, Valid: isExact},
|
||||||
|
Sort: pgtype.Text{String: params.Sort, Valid: true},
|
||||||
Limit: pgtype.Int4{Int32: int32(params.Limit), Valid: true},
|
Limit: pgtype.Int4{Int32: int32(params.Limit), Valid: true},
|
||||||
Offset: pgtype.Int4{Int32: int32(params.Offset), Valid: true},
|
Offset: pgtype.Int4{Int32: int32(params.Offset), Valid: true},
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user