diff --git a/bin/neomovies-api b/bin/neomovies-api new file mode 100755 index 0000000..27f5a08 Binary files /dev/null and b/bin/neomovies-api differ diff --git a/main b/main new file mode 100755 index 0000000..9ee41a9 Binary files /dev/null and b/main differ diff --git a/pkg/handlers/lang_helper.go b/pkg/handlers/lang_helper.go new file mode 100644 index 0000000..d097106 --- /dev/null +++ b/pkg/handlers/lang_helper.go @@ -0,0 +1,35 @@ +package handlers + +import ( + "net/http" +) + +// GetLanguage extracts the lang parameter from request and returns it with default "ru" +// Supports both "lang" and "language" query parameters +// Valid values: "ru", "en" +// Default: "ru" +func GetLanguage(r *http.Request) string { + // Check "lang" parameter first (our new standard) + lang := r.URL.Query().Get("lang") + + // Fall back to "language" for backward compatibility + if lang == "" { + lang = r.URL.Query().Get("language") + } + + // Default to "ru" if not specified + if lang == "" { + return "ru-RU" + } + + // Convert short codes to TMDB format + switch lang { + case "en": + return "en-US" + case "ru": + return "ru-RU" + default: + // Return as-is if already in correct format + return lang + } +} diff --git a/pkg/handlers/movie.go b/pkg/handlers/movie.go index 26f59d9..b299e82 100644 --- a/pkg/handlers/movie.go +++ b/pkg/handlers/movie.go @@ -29,7 +29,7 @@ func (h *MovieHandler) Search(w http.ResponseWriter, r *http.Request) { } page := getIntQuery(r, "page", 1) - language := r.URL.Query().Get("language") + language := GetLanguage(r) region := r.URL.Query().Get("region") year := getIntQuery(r, "year", 0) @@ -54,7 +54,7 @@ func (h *MovieHandler) GetByID(w http.ResponseWriter, r *http.Request) { return } - language := r.URL.Query().Get("language") + language := GetLanguage(r) movie, err := h.movieService.GetByID(id, language) if err != nil { @@ -71,7 +71,7 @@ func (h *MovieHandler) GetByID(w http.ResponseWriter, r *http.Request) { func (h *MovieHandler) Popular(w http.ResponseWriter, r *http.Request) { page := getIntQuery(r, "page", 1) - language := r.URL.Query().Get("language") + language := GetLanguage(r) region := r.URL.Query().Get("region") movies, err := h.movieService.GetPopular(page, language, region) @@ -89,7 +89,7 @@ func (h *MovieHandler) Popular(w http.ResponseWriter, r *http.Request) { func (h *MovieHandler) TopRated(w http.ResponseWriter, r *http.Request) { page := getIntQuery(r, "page", 1) - language := r.URL.Query().Get("language") + language := GetLanguage(r) region := r.URL.Query().Get("region") movies, err := h.movieService.GetTopRated(page, language, region) @@ -107,7 +107,7 @@ func (h *MovieHandler) TopRated(w http.ResponseWriter, r *http.Request) { func (h *MovieHandler) Upcoming(w http.ResponseWriter, r *http.Request) { page := getIntQuery(r, "page", 1) - language := r.URL.Query().Get("language") + language := GetLanguage(r) region := r.URL.Query().Get("region") movies, err := h.movieService.GetUpcoming(page, language, region) @@ -125,7 +125,7 @@ func (h *MovieHandler) Upcoming(w http.ResponseWriter, r *http.Request) { func (h *MovieHandler) NowPlaying(w http.ResponseWriter, r *http.Request) { page := getIntQuery(r, "page", 1) - language := r.URL.Query().Get("language") + language := GetLanguage(r) region := r.URL.Query().Get("region") movies, err := h.movieService.GetNowPlaying(page, language, region) @@ -150,7 +150,7 @@ func (h *MovieHandler) GetRecommendations(w http.ResponseWriter, r *http.Request } page := getIntQuery(r, "page", 1) - language := r.URL.Query().Get("language") + language := GetLanguage(r) movies, err := h.movieService.GetRecommendations(id, page, language) if err != nil { @@ -174,7 +174,7 @@ func (h *MovieHandler) GetSimilar(w http.ResponseWriter, r *http.Request) { } page := getIntQuery(r, "page", 1) - language := r.URL.Query().Get("language") + language := GetLanguage(r) movies, err := h.movieService.GetSimilar(id, page, language) if err != nil { diff --git a/pkg/handlers/tv.go b/pkg/handlers/tv.go index 95a1965..4297751 100644 --- a/pkg/handlers/tv.go +++ b/pkg/handlers/tv.go @@ -29,7 +29,7 @@ func (h *TVHandler) Search(w http.ResponseWriter, r *http.Request) { } page := getIntQuery(r, "page", 1) - language := r.URL.Query().Get("language") + language := GetLanguage(r) year := getIntQuery(r, "first_air_date_year", 0) tvShows, err := h.tvService.Search(query, page, language, year) @@ -53,7 +53,7 @@ func (h *TVHandler) GetByID(w http.ResponseWriter, r *http.Request) { return } - language := r.URL.Query().Get("language") + language := GetLanguage(r) tvShow, err := h.tvService.GetByID(id, language) if err != nil { @@ -70,7 +70,7 @@ func (h *TVHandler) GetByID(w http.ResponseWriter, r *http.Request) { func (h *TVHandler) Popular(w http.ResponseWriter, r *http.Request) { page := getIntQuery(r, "page", 1) - language := r.URL.Query().Get("language") + language := GetLanguage(r) tvShows, err := h.tvService.GetPopular(page, language) if err != nil { @@ -87,7 +87,7 @@ func (h *TVHandler) Popular(w http.ResponseWriter, r *http.Request) { func (h *TVHandler) TopRated(w http.ResponseWriter, r *http.Request) { page := getIntQuery(r, "page", 1) - language := r.URL.Query().Get("language") + language := GetLanguage(r) tvShows, err := h.tvService.GetTopRated(page, language) if err != nil { @@ -104,7 +104,7 @@ func (h *TVHandler) TopRated(w http.ResponseWriter, r *http.Request) { func (h *TVHandler) OnTheAir(w http.ResponseWriter, r *http.Request) { page := getIntQuery(r, "page", 1) - language := r.URL.Query().Get("language") + language := GetLanguage(r) tvShows, err := h.tvService.GetOnTheAir(page, language) if err != nil { @@ -121,7 +121,7 @@ func (h *TVHandler) OnTheAir(w http.ResponseWriter, r *http.Request) { func (h *TVHandler) AiringToday(w http.ResponseWriter, r *http.Request) { page := getIntQuery(r, "page", 1) - language := r.URL.Query().Get("language") + language := GetLanguage(r) tvShows, err := h.tvService.GetAiringToday(page, language) if err != nil { @@ -145,7 +145,7 @@ func (h *TVHandler) GetRecommendations(w http.ResponseWriter, r *http.Request) { } page := getIntQuery(r, "page", 1) - language := r.URL.Query().Get("language") + language := GetLanguage(r) tvShows, err := h.tvService.GetRecommendations(id, page, language) if err != nil { @@ -169,7 +169,7 @@ func (h *TVHandler) GetSimilar(w http.ResponseWriter, r *http.Request) { } page := getIntQuery(r, "page", 1) - language := r.URL.Query().Get("language") + language := GetLanguage(r) tvShows, err := h.tvService.GetSimilar(id, page, language) if err != nil {