Files
silo-server/internal/api/handlers/legacy_read_routes.go
T

101 lines
2.2 KiB
Go

package handlers
import (
"fmt"
"net/http"
"net/url"
"strings"
)
const legacyReadSunset = "Wed, 01 Jul 2026 00:00:00 GMT"
func writeDeprecatedReadHeaders(w http.ResponseWriter, successor string) {
headers := w.Header()
headers.Set("Deprecation", "true")
headers.Set("Sunset", legacyReadSunset)
if successor != "" {
headers.Set("Link", fmt.Sprintf("<%s>; rel=\"successor-version\"", successor))
}
}
func buildLegacyItemsCatalogValues(values url.Values) (url.Values, bool) {
translated := cloneCatalogValues(values)
if strings.TrimSpace(values.Get("person_id")) != "" {
translated.Set("source", "person")
} else {
translated.Set("source", "query")
}
if sort := strings.TrimSpace(values.Get("sort")); sort != "" {
if sort == "created_at" {
sort = "added_at"
}
translated.Set("sort", sort)
}
return translated, true
}
func buildLegacyLatestCatalogValues(values url.Values) url.Values {
translated := cloneCatalogValues(values)
translated.Set("source", "query")
translated.Set("sort", "added_at")
translated.Set("order", "desc")
return translated
}
func buildLegacySearchCatalogValues(values url.Values) (url.Values, bool) {
query := strings.TrimSpace(values.Get("q"))
if query == "" {
return nil, false
}
types := parseSearchTypes(values["type"])
if len(types) > 1 {
return nil, false
}
if len(types) == 1 && types[0] != "movie" && types[0] != "series" {
return nil, false
}
translated := url.Values{}
translated.Set("source", "query")
translated.Set("q", query)
translated.Set("sort", "relevance")
translated.Set("order", "desc")
copyCatalogValue(translated, values, "limit")
copyCatalogValue(translated, values, "offset")
if len(types) == 1 {
translated.Set("type", types[0])
}
return translated, true
}
func cloneCatalogValues(values url.Values) url.Values {
translated := url.Values{}
for _, key := range []string{
"q",
"name_prefix",
"type",
"genre",
"year_min",
"year_max",
"content_rating",
"library_id",
"person_id",
"status",
"limit",
"offset",
"order",
} {
copyCatalogValue(translated, values, key)
}
return translated
}
func copyCatalogValue(dst, src url.Values, key string) {
if value := strings.TrimSpace(src.Get(key)); value != "" {
dst.Set(key, value)
}
}