From d2450ffc89d1ee16311c140c3422dea8f166745f Mon Sep 17 00:00:00 2001 From: Iron_Felix Date: Sat, 15 Nov 2025 00:52:23 +0300 Subject: [PATCH] feat: titles.go added --- api/api.gen.go | 24 ++++++++ api/openapi.yaml | 10 ++++ modules/backend/handlers/titles.go | 96 ++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 modules/backend/handlers/titles.go diff --git a/api/api.gen.go b/api/api.gen.go index 40c0fa2..d17b591 100644 --- a/api/api.gen.go +++ b/api/api.gen.go @@ -546,6 +546,14 @@ func (response GetTitle204Response) VisitGetTitleResponse(w http.ResponseWriter) return nil } +type GetTitle400Response struct { +} + +func (response GetTitle400Response) VisitGetTitleResponse(w http.ResponseWriter) error { + w.WriteHeader(400) + return nil +} + type GetTitle500Response struct { } @@ -593,6 +601,14 @@ func (response GetUsersUserId200JSONResponse) VisitGetUsersUserIdResponse(w http return json.NewEncoder(w).Encode(response) } +type GetUsersUserId400Response struct { +} + +func (response GetUsersUserId400Response) VisitGetUsersUserIdResponse(w http.ResponseWriter) error { + w.WriteHeader(400) + return nil +} + type GetUsersUserId404Response struct { } @@ -601,6 +617,14 @@ func (response GetUsersUserId404Response) VisitGetUsersUserIdResponse(w http.Res return nil } +type GetUsersUserId500Response struct { +} + +func (response GetUsersUserId500Response) VisitGetUsersUserIdResponse(w http.ResponseWriter) error { + w.WriteHeader(500) + return nil +} + // StrictServerInterface represents all server handlers. type StrictServerInterface interface { // Get titles diff --git a/api/openapi.yaml b/api/openapi.yaml index b17b539..43e380d 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -10,6 +10,7 @@ paths: summary: Get titles parameters: - in: query +<<<<<<< Updated upstream name: word schema: type: string @@ -32,6 +33,12 @@ paths: schema: $ref: '#/components/schemas/ReleaseSeason' - in: query +======= + name: query + schema: + type: string + - in: query +>>>>>>> Stashed changes name: limit schema: type: integer @@ -57,10 +64,13 @@ paths: $ref: '#/components/schemas/Title' '204': description: No titles found +<<<<<<< Updated upstream '400': description: Request params are not correct '500': description: Unknown server error +======= +>>>>>>> Stashed changes # /title/{title_id}: # get: diff --git a/modules/backend/handlers/titles.go b/modules/backend/handlers/titles.go new file mode 100644 index 0000000..7bfcf58 --- /dev/null +++ b/modules/backend/handlers/titles.go @@ -0,0 +1,96 @@ +package handlers + +import ( + "context" + "fmt" + oapi "nyanimedb/api" + sqlc "nyanimedb/sql" + + log "github.com/sirupsen/logrus" +) + +func Word2Sqlc(s *string) *string { + if s == nil { + return nil + } + if *s == "" { + return nil + } + return s +} + +func TitleStatus2Sqlc(s *oapi.TitleStatus) (*sqlc.TitleStatusT, error) { + if s == nil { + return nil, nil + } + var t sqlc.TitleStatusT + if *s == "finished" { + t = "finished" + } else if *s == "ongoing" { + t = "ongoing" + } else if *s == "planned" { + t = "planned" + } else { + return nil, fmt.Errorf("unexpected tittle status: %s", *s) + } + return &t, nil +} + +func ReleaseSeason2sqlc(s *oapi.ReleaseSeason) (*sqlc.ReleaseSeasonT, error) { + if s == nil { + return nil, nil + } + var t sqlc.ReleaseSeasonT + if *s == "winter" { + t = "winter" + } else if *s == "spring" { + t = "spring" + } else if *s == "summer" { + t = "summer" + } else if *s == "fall" { + t = "fall" + } else { + return nil, fmt.Errorf("unexpected release season: %s", *s) + } + return &t, nil +} + +func (s Server) GetTitle(ctx context.Context, request oapi.GetTitleRequestObject) (oapi.GetTitleResponseObject, error) { + var result []oapi.Title + + word := Word2Sqlc(request.Params.Word) + status, err := TitleStatus2Sqlc(request.Params.Status) + if err != nil { + log.Errorf("%v", err) + return oapi.GetTitle400Response{}, err + } + season, err := ReleaseSeason2sqlc(request.Params.ReleaseSeason) + if err != nil { + log.Errorf("%v", err) + return oapi.GetTitle400Response{}, err + } + // param = nil means it will not be used + titles, err := s.db.SearchTitles(ctx, sqlc.SearchTitlesParams{ + Word: word, + Status: status, + Rating: request.Params.Rating, + ReleaseYear: request.Params.ReleaseYear, + ReleaseSeason: season, + }) + if err != nil { + return oapi.GetTitle500Response{}, nil + } + if len(titles) == 0 { + return oapi.GetTitle204Response{}, nil + } + + for _, title := range titles { + t := oapi.Title{ + Rating: title.Rating, + PosterId: title.PosterID, + } + result = append(result, t) + } + + return oapi.GetTitle200JSONResponse(result), nil +}