feat(api): search with Meilisearch (M2)
ci / api / api (push) Successful in 27s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m1s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 34s
ci / ts / ts (packages + web) (push) Successful in 1m1s
ci / docker / docker (образы собираются — их сервер собирает сам при обновлении) (push) Successful in 25s
ci / api / api (push) Successful in 27s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m1s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 34s
ci / ts / ts (packages + web) (push) Successful in 1m1s
ci / docker / docker (образы собираются — их сервер собирает сам при обновлении) (push) Successful in 25s
- artists, albums and tracks indexes are rebuilt from PostgreSQL next to the live ones and swapped in, so search keeps working; a rebuild runs on start, after every scan and when a source is removed - transliteration fields (Кино ↔ kino) and a retry in the other keyboard layout (ghbdtn → привет) reported as corrected_query - /search/suggest (3 artists, 3 albums, 5 tracks), /search by type with cursor pages, /admin/search/reindex; Meilisearch is part of /readyz - found ids are hydrated from the catalog, so a lagging index never returns deleted entries Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c583991d14
commit
c1160cccd3
16 files changed
+1590
-124
No files matched your search
@@ -101,6 +101,14 @@ const (
|
||||
Island UiPrefsWebPlayer = "island"
|
||||
)
|
||||
|
||||
// Defines values for SearchParamsType.
|
||||
const (
|
||||
Albums SearchParamsType = "albums"
|
||||
All SearchParamsType = "all"
|
||||
Artists SearchParamsType = "artists"
|
||||
Tracks SearchParamsType = "tracks"
|
||||
)
|
||||
|
||||
// AdminUser defines model for AdminUser.
|
||||
type AdminUser struct {
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
@@ -403,6 +411,24 @@ type ScanRequest struct {
|
||||
Full *bool `json:"full,omitempty"`
|
||||
}
|
||||
|
||||
// SearchResults defines model for SearchResults.
|
||||
type SearchResults struct {
|
||||
Albums []AlbumSummary `json:"albums"`
|
||||
Artists []ArtistRef `json:"artists"`
|
||||
|
||||
// CorrectedQuery Запрос в другой раскладке, если по исходному ничего не нашлось
|
||||
CorrectedQuery *string `json:"corrected_query"`
|
||||
NextCursor *string `json:"next_cursor"`
|
||||
|
||||
// Totals Оценка общего числа совпадений
|
||||
Totals struct {
|
||||
Albums int `json:"albums"`
|
||||
Artists int `json:"artists"`
|
||||
Tracks int `json:"tracks"`
|
||||
} `json:"totals"`
|
||||
Tracks []Track `json:"tracks"`
|
||||
}
|
||||
|
||||
// ServerInfo defines model for ServerInfo.
|
||||
type ServerInfo struct {
|
||||
ApiVersion string `json:"api_version"`
|
||||
@@ -642,6 +668,24 @@ type RefreshTokensParams struct {
|
||||
PipuRt *string `form:"pipu_rt,omitempty" json:"pipu_rt,omitempty"`
|
||||
}
|
||||
|
||||
// SearchParams defines parameters for Search.
|
||||
type SearchParams struct {
|
||||
Q string `form:"q" json:"q"`
|
||||
Type *SearchParamsType `form:"type,omitempty" json:"type,omitempty"`
|
||||
Limit *Limit `form:"limit,omitempty" json:"limit,omitempty"`
|
||||
|
||||
// Cursor Непрозрачный курсор из `next_cursor` предыдущей страницы
|
||||
Cursor *Cursor `form:"cursor,omitempty" json:"cursor,omitempty"`
|
||||
}
|
||||
|
||||
// SearchParamsType defines parameters for Search.
|
||||
type SearchParamsType string
|
||||
|
||||
// SearchSuggestParams defines parameters for SearchSuggest.
|
||||
type SearchSuggestParams struct {
|
||||
Q string `form:"q" json:"q"`
|
||||
}
|
||||
|
||||
// CreateSourceJSONRequestBody defines body for CreateSource for application/json ContentType.
|
||||
type CreateSourceJSONRequestBody = SourceInput
|
||||
|
||||
@@ -692,6 +736,9 @@ type ServerInterface interface {
|
||||
// Состояние библиотеки (admin, moderator)
|
||||
// (GET /api/v1/admin/library/status)
|
||||
GetLibraryStatus(w http.ResponseWriter, r *http.Request)
|
||||
// Пересобрать поисковые индексы (admin)
|
||||
// (POST /api/v1/admin/search/reindex)
|
||||
ReindexSearch(w http.ResponseWriter, r *http.Request)
|
||||
// Хранилища (admin)
|
||||
// (GET /api/v1/admin/sources)
|
||||
ListSources(w http.ResponseWriter, r *http.Request)
|
||||
@@ -776,6 +823,12 @@ type ServerInterface interface {
|
||||
// Завершить сессию на устройстве
|
||||
// (DELETE /api/v1/me/sessions/{id})
|
||||
RevokeMySession(w http.ResponseWriter, r *http.Request, id openapi_types.UUID)
|
||||
// Страница поиска
|
||||
// (GET /api/v1/search)
|
||||
Search(w http.ResponseWriter, r *http.Request, params SearchParams)
|
||||
// Выпадающий список поиска — до 3 исполнителей, 3 альбомов, 5 треков
|
||||
// (GET /api/v1/search/suggest)
|
||||
SearchSuggest(w http.ResponseWriter, r *http.Request, params SearchSuggestParams)
|
||||
// Сведения о сервере для клиентов
|
||||
// (GET /api/v1/server-info)
|
||||
GetServerInfo(w http.ResponseWriter, r *http.Request)
|
||||
@@ -818,6 +871,12 @@ func (_ Unimplemented) GetLibraryStatus(w http.ResponseWriter, r *http.Request)
|
||||
w.WriteHeader(http.StatusNotImplemented)
|
||||
}
|
||||
|
||||
// Пересобрать поисковые индексы (admin)
|
||||
// (POST /api/v1/admin/search/reindex)
|
||||
func (_ Unimplemented) ReindexSearch(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusNotImplemented)
|
||||
}
|
||||
|
||||
// Хранилища (admin)
|
||||
// (GET /api/v1/admin/sources)
|
||||
func (_ Unimplemented) ListSources(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -986,6 +1045,18 @@ func (_ Unimplemented) RevokeMySession(w http.ResponseWriter, r *http.Request, i
|
||||
w.WriteHeader(http.StatusNotImplemented)
|
||||
}
|
||||
|
||||
// Страница поиска
|
||||
// (GET /api/v1/search)
|
||||
func (_ Unimplemented) Search(w http.ResponseWriter, r *http.Request, params SearchParams) {
|
||||
w.WriteHeader(http.StatusNotImplemented)
|
||||
}
|
||||
|
||||
// Выпадающий список поиска — до 3 исполнителей, 3 альбомов, 5 треков
|
||||
// (GET /api/v1/search/suggest)
|
||||
func (_ Unimplemented) SearchSuggest(w http.ResponseWriter, r *http.Request, params SearchSuggestParams) {
|
||||
w.WriteHeader(http.StatusNotImplemented)
|
||||
}
|
||||
|
||||
// Сведения о сервере для клиентов
|
||||
// (GET /api/v1/server-info)
|
||||
func (_ Unimplemented) GetServerInfo(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -1154,6 +1225,26 @@ func (siw *ServerInterfaceWrapper) GetLibraryStatus(w http.ResponseWriter, r *ht
|
||||
handler.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
// ReindexSearch operation middleware
|
||||
func (siw *ServerInterfaceWrapper) ReindexSearch(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
ctx := r.Context()
|
||||
|
||||
ctx = context.WithValue(ctx, BearerAuthScopes, []string{})
|
||||
|
||||
r = r.WithContext(ctx)
|
||||
|
||||
handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
siw.Handler.ReindexSearch(w, r)
|
||||
}))
|
||||
|
||||
for _, middleware := range siw.HandlerMiddlewares {
|
||||
handler = middleware(handler)
|
||||
}
|
||||
|
||||
handler.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
// ListSources operation middleware
|
||||
func (siw *ServerInterfaceWrapper) ListSources(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
@@ -1924,6 +2015,110 @@ func (siw *ServerInterfaceWrapper) RevokeMySession(w http.ResponseWriter, r *htt
|
||||
handler.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
// Search operation middleware
|
||||
func (siw *ServerInterfaceWrapper) Search(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
var err error
|
||||
|
||||
ctx := r.Context()
|
||||
|
||||
ctx = context.WithValue(ctx, BearerAuthScopes, []string{})
|
||||
|
||||
r = r.WithContext(ctx)
|
||||
|
||||
// Parameter object where we will unmarshal all parameters from the context
|
||||
var params SearchParams
|
||||
|
||||
// ------------- Required query parameter "q" -------------
|
||||
|
||||
if paramValue := r.URL.Query().Get("q"); paramValue != "" {
|
||||
|
||||
} else {
|
||||
siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "q"})
|
||||
return
|
||||
}
|
||||
|
||||
err = runtime.BindQueryParameter("form", true, true, "q", r.URL.Query(), ¶ms.Q)
|
||||
if err != nil {
|
||||
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "q", Err: err})
|
||||
return
|
||||
}
|
||||
|
||||
// ------------- Optional query parameter "type" -------------
|
||||
|
||||
err = runtime.BindQueryParameter("form", true, false, "type", r.URL.Query(), ¶ms.Type)
|
||||
if err != nil {
|
||||
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "type", Err: err})
|
||||
return
|
||||
}
|
||||
|
||||
// ------------- Optional query parameter "limit" -------------
|
||||
|
||||
err = runtime.BindQueryParameter("form", true, false, "limit", r.URL.Query(), ¶ms.Limit)
|
||||
if err != nil {
|
||||
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "limit", Err: err})
|
||||
return
|
||||
}
|
||||
|
||||
// ------------- Optional query parameter "cursor" -------------
|
||||
|
||||
err = runtime.BindQueryParameter("form", true, false, "cursor", r.URL.Query(), ¶ms.Cursor)
|
||||
if err != nil {
|
||||
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "cursor", Err: err})
|
||||
return
|
||||
}
|
||||
|
||||
handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
siw.Handler.Search(w, r, params)
|
||||
}))
|
||||
|
||||
for _, middleware := range siw.HandlerMiddlewares {
|
||||
handler = middleware(handler)
|
||||
}
|
||||
|
||||
handler.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
// SearchSuggest operation middleware
|
||||
func (siw *ServerInterfaceWrapper) SearchSuggest(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
var err error
|
||||
|
||||
ctx := r.Context()
|
||||
|
||||
ctx = context.WithValue(ctx, BearerAuthScopes, []string{})
|
||||
|
||||
r = r.WithContext(ctx)
|
||||
|
||||
// Parameter object where we will unmarshal all parameters from the context
|
||||
var params SearchSuggestParams
|
||||
|
||||
// ------------- Required query parameter "q" -------------
|
||||
|
||||
if paramValue := r.URL.Query().Get("q"); paramValue != "" {
|
||||
|
||||
} else {
|
||||
siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "q"})
|
||||
return
|
||||
}
|
||||
|
||||
err = runtime.BindQueryParameter("form", true, true, "q", r.URL.Query(), ¶ms.Q)
|
||||
if err != nil {
|
||||
siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "q", Err: err})
|
||||
return
|
||||
}
|
||||
|
||||
handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
siw.Handler.SearchSuggest(w, r, params)
|
||||
}))
|
||||
|
||||
for _, middleware := range siw.HandlerMiddlewares {
|
||||
handler = middleware(handler)
|
||||
}
|
||||
|
||||
handler.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
// GetServerInfo operation middleware
|
||||
func (siw *ServerInterfaceWrapper) GetServerInfo(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
@@ -2122,6 +2317,9 @@ func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handl
|
||||
r.Group(func(r chi.Router) {
|
||||
r.Get(options.BaseURL+"/api/v1/admin/library/status", wrapper.GetLibraryStatus)
|
||||
})
|
||||
r.Group(func(r chi.Router) {
|
||||
r.Post(options.BaseURL+"/api/v1/admin/search/reindex", wrapper.ReindexSearch)
|
||||
})
|
||||
r.Group(func(r chi.Router) {
|
||||
r.Get(options.BaseURL+"/api/v1/admin/sources", wrapper.ListSources)
|
||||
})
|
||||
@@ -2206,6 +2404,12 @@ func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handl
|
||||
r.Group(func(r chi.Router) {
|
||||
r.Delete(options.BaseURL+"/api/v1/me/sessions/{id}", wrapper.RevokeMySession)
|
||||
})
|
||||
r.Group(func(r chi.Router) {
|
||||
r.Get(options.BaseURL+"/api/v1/search", wrapper.Search)
|
||||
})
|
||||
r.Group(func(r chi.Router) {
|
||||
r.Get(options.BaseURL+"/api/v1/search/suggest", wrapper.SearchSuggest)
|
||||
})
|
||||
r.Group(func(r chi.Router) {
|
||||
r.Get(options.BaseURL+"/api/v1/server-info", wrapper.GetServerInfo)
|
||||
})
|
||||
@@ -2339,6 +2543,33 @@ func (response GetLibraryStatusdefaultApplicationProblemPlusJSONResponse) VisitG
|
||||
return json.NewEncoder(w).Encode(response.Body)
|
||||
}
|
||||
|
||||
type ReindexSearchRequestObject struct {
|
||||
}
|
||||
|
||||
type ReindexSearchResponseObject interface {
|
||||
VisitReindexSearchResponse(w http.ResponseWriter) error
|
||||
}
|
||||
|
||||
type ReindexSearch202Response struct {
|
||||
}
|
||||
|
||||
func (response ReindexSearch202Response) VisitReindexSearchResponse(w http.ResponseWriter) error {
|
||||
w.WriteHeader(202)
|
||||
return nil
|
||||
}
|
||||
|
||||
type ReindexSearchdefaultApplicationProblemPlusJSONResponse struct {
|
||||
Body Problem
|
||||
StatusCode int
|
||||
}
|
||||
|
||||
func (response ReindexSearchdefaultApplicationProblemPlusJSONResponse) VisitReindexSearchResponse(w http.ResponseWriter) error {
|
||||
w.Header().Set("Content-Type", "application/problem+json")
|
||||
w.WriteHeader(response.StatusCode)
|
||||
|
||||
return json.NewEncoder(w).Encode(response.Body)
|
||||
}
|
||||
|
||||
type ListSourcesRequestObject struct {
|
||||
}
|
||||
|
||||
@@ -3147,6 +3378,64 @@ func (response RevokeMySessiondefaultApplicationProblemPlusJSONResponse) VisitRe
|
||||
return json.NewEncoder(w).Encode(response.Body)
|
||||
}
|
||||
|
||||
type SearchRequestObject struct {
|
||||
Params SearchParams
|
||||
}
|
||||
|
||||
type SearchResponseObject interface {
|
||||
VisitSearchResponse(w http.ResponseWriter) error
|
||||
}
|
||||
|
||||
type Search200JSONResponse SearchResults
|
||||
|
||||
func (response Search200JSONResponse) VisitSearchResponse(w http.ResponseWriter) error {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(200)
|
||||
|
||||
return json.NewEncoder(w).Encode(response)
|
||||
}
|
||||
|
||||
type SearchdefaultApplicationProblemPlusJSONResponse struct {
|
||||
Body Problem
|
||||
StatusCode int
|
||||
}
|
||||
|
||||
func (response SearchdefaultApplicationProblemPlusJSONResponse) VisitSearchResponse(w http.ResponseWriter) error {
|
||||
w.Header().Set("Content-Type", "application/problem+json")
|
||||
w.WriteHeader(response.StatusCode)
|
||||
|
||||
return json.NewEncoder(w).Encode(response.Body)
|
||||
}
|
||||
|
||||
type SearchSuggestRequestObject struct {
|
||||
Params SearchSuggestParams
|
||||
}
|
||||
|
||||
type SearchSuggestResponseObject interface {
|
||||
VisitSearchSuggestResponse(w http.ResponseWriter) error
|
||||
}
|
||||
|
||||
type SearchSuggest200JSONResponse SearchResults
|
||||
|
||||
func (response SearchSuggest200JSONResponse) VisitSearchSuggestResponse(w http.ResponseWriter) error {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(200)
|
||||
|
||||
return json.NewEncoder(w).Encode(response)
|
||||
}
|
||||
|
||||
type SearchSuggestdefaultApplicationProblemPlusJSONResponse struct {
|
||||
Body Problem
|
||||
StatusCode int
|
||||
}
|
||||
|
||||
func (response SearchSuggestdefaultApplicationProblemPlusJSONResponse) VisitSearchSuggestResponse(w http.ResponseWriter) error {
|
||||
w.Header().Set("Content-Type", "application/problem+json")
|
||||
w.WriteHeader(response.StatusCode)
|
||||
|
||||
return json.NewEncoder(w).Encode(response.Body)
|
||||
}
|
||||
|
||||
type GetServerInfoRequestObject struct {
|
||||
}
|
||||
|
||||
@@ -3259,6 +3548,9 @@ type StrictServerInterface interface {
|
||||
// Состояние библиотеки (admin, moderator)
|
||||
// (GET /api/v1/admin/library/status)
|
||||
GetLibraryStatus(ctx context.Context, request GetLibraryStatusRequestObject) (GetLibraryStatusResponseObject, error)
|
||||
// Пересобрать поисковые индексы (admin)
|
||||
// (POST /api/v1/admin/search/reindex)
|
||||
ReindexSearch(ctx context.Context, request ReindexSearchRequestObject) (ReindexSearchResponseObject, error)
|
||||
// Хранилища (admin)
|
||||
// (GET /api/v1/admin/sources)
|
||||
ListSources(ctx context.Context, request ListSourcesRequestObject) (ListSourcesResponseObject, error)
|
||||
@@ -3343,6 +3635,12 @@ type StrictServerInterface interface {
|
||||
// Завершить сессию на устройстве
|
||||
// (DELETE /api/v1/me/sessions/{id})
|
||||
RevokeMySession(ctx context.Context, request RevokeMySessionRequestObject) (RevokeMySessionResponseObject, error)
|
||||
// Страница поиска
|
||||
// (GET /api/v1/search)
|
||||
Search(ctx context.Context, request SearchRequestObject) (SearchResponseObject, error)
|
||||
// Выпадающий список поиска — до 3 исполнителей, 3 альбомов, 5 треков
|
||||
// (GET /api/v1/search/suggest)
|
||||
SearchSuggest(ctx context.Context, request SearchSuggestRequestObject) (SearchSuggestResponseObject, error)
|
||||
// Сведения о сервере для клиентов
|
||||
// (GET /api/v1/server-info)
|
||||
GetServerInfo(ctx context.Context, request GetServerInfoRequestObject) (GetServerInfoResponseObject, error)
|
||||
@@ -3488,6 +3786,30 @@ func (sh *strictHandler) GetLibraryStatus(w http.ResponseWriter, r *http.Request
|
||||
}
|
||||
}
|
||||
|
||||
// ReindexSearch operation middleware
|
||||
func (sh *strictHandler) ReindexSearch(w http.ResponseWriter, r *http.Request) {
|
||||
var request ReindexSearchRequestObject
|
||||
|
||||
handler := func(ctx context.Context, w http.ResponseWriter, r *http.Request, request interface{}) (interface{}, error) {
|
||||
return sh.ssi.ReindexSearch(ctx, request.(ReindexSearchRequestObject))
|
||||
}
|
||||
for _, middleware := range sh.middlewares {
|
||||
handler = middleware(handler, "ReindexSearch")
|
||||
}
|
||||
|
||||
response, err := handler(r.Context(), w, r, request)
|
||||
|
||||
if err != nil {
|
||||
sh.options.ResponseErrorHandlerFunc(w, r, err)
|
||||
} else if validResponse, ok := response.(ReindexSearchResponseObject); ok {
|
||||
if err := validResponse.VisitReindexSearchResponse(w); err != nil {
|
||||
sh.options.ResponseErrorHandlerFunc(w, r, err)
|
||||
}
|
||||
} else if response != nil {
|
||||
sh.options.ResponseErrorHandlerFunc(w, r, fmt.Errorf("unexpected response type: %T", response))
|
||||
}
|
||||
}
|
||||
|
||||
// ListSources operation middleware
|
||||
func (sh *strictHandler) ListSources(w http.ResponseWriter, r *http.Request) {
|
||||
var request ListSourcesRequestObject
|
||||
@@ -4278,6 +4600,58 @@ func (sh *strictHandler) RevokeMySession(w http.ResponseWriter, r *http.Request,
|
||||
}
|
||||
}
|
||||
|
||||
// Search operation middleware
|
||||
func (sh *strictHandler) Search(w http.ResponseWriter, r *http.Request, params SearchParams) {
|
||||
var request SearchRequestObject
|
||||
|
||||
request.Params = params
|
||||
|
||||
handler := func(ctx context.Context, w http.ResponseWriter, r *http.Request, request interface{}) (interface{}, error) {
|
||||
return sh.ssi.Search(ctx, request.(SearchRequestObject))
|
||||
}
|
||||
for _, middleware := range sh.middlewares {
|
||||
handler = middleware(handler, "Search")
|
||||
}
|
||||
|
||||
response, err := handler(r.Context(), w, r, request)
|
||||
|
||||
if err != nil {
|
||||
sh.options.ResponseErrorHandlerFunc(w, r, err)
|
||||
} else if validResponse, ok := response.(SearchResponseObject); ok {
|
||||
if err := validResponse.VisitSearchResponse(w); err != nil {
|
||||
sh.options.ResponseErrorHandlerFunc(w, r, err)
|
||||
}
|
||||
} else if response != nil {
|
||||
sh.options.ResponseErrorHandlerFunc(w, r, fmt.Errorf("unexpected response type: %T", response))
|
||||
}
|
||||
}
|
||||
|
||||
// SearchSuggest operation middleware
|
||||
func (sh *strictHandler) SearchSuggest(w http.ResponseWriter, r *http.Request, params SearchSuggestParams) {
|
||||
var request SearchSuggestRequestObject
|
||||
|
||||
request.Params = params
|
||||
|
||||
handler := func(ctx context.Context, w http.ResponseWriter, r *http.Request, request interface{}) (interface{}, error) {
|
||||
return sh.ssi.SearchSuggest(ctx, request.(SearchSuggestRequestObject))
|
||||
}
|
||||
for _, middleware := range sh.middlewares {
|
||||
handler = middleware(handler, "SearchSuggest")
|
||||
}
|
||||
|
||||
response, err := handler(r.Context(), w, r, request)
|
||||
|
||||
if err != nil {
|
||||
sh.options.ResponseErrorHandlerFunc(w, r, err)
|
||||
} else if validResponse, ok := response.(SearchSuggestResponseObject); ok {
|
||||
if err := validResponse.VisitSearchSuggestResponse(w); err != nil {
|
||||
sh.options.ResponseErrorHandlerFunc(w, r, err)
|
||||
}
|
||||
} else if response != nil {
|
||||
sh.options.ResponseErrorHandlerFunc(w, r, fmt.Errorf("unexpected response type: %T", response))
|
||||
}
|
||||
}
|
||||
|
||||
// GetServerInfo operation middleware
|
||||
func (sh *strictHandler) GetServerInfo(w http.ResponseWriter, r *http.Request) {
|
||||
var request GetServerInfoRequestObject
|
||||
@@ -4379,125 +4753,133 @@ func (sh *strictHandler) GetReadyz(w http.ResponseWriter, r *http.Request) {
|
||||
// Base64 encoded, gzipped, json marshaled Swagger object
|
||||
var swaggerSpec = []string{
|
||||
|
||||
"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",
|
||||
"AAA=",
|
||||
"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",
|
||||
}
|
||||
|
||||
// GetSwagger returns the content of the embedded swagger specification file
|
||||
|
||||
Reference in new issue
Block a user