feat: get user titles described

This commit is contained in:
Iron_Felix 2025-11-18 04:59:19 +03:00
parent 8deba7afd9
commit 09d0d1eb4d
5 changed files with 461 additions and 124 deletions

View file

@ -26,9 +26,17 @@ const (
// Defines values for TitleStatus. // Defines values for TitleStatus.
const ( const (
Finished TitleStatus = "finished" TitleStatusFinished TitleStatus = "finished"
Ongoing TitleStatus = "ongoing" TitleStatusOngoing TitleStatus = "ongoing"
Planned TitleStatus = "planned" TitleStatusPlanned TitleStatus = "planned"
)
// Defines values for UserTitleStatus.
const (
UserTitleStatusDropped UserTitleStatus = "dropped"
UserTitleStatusFinished UserTitleStatus = "finished"
UserTitleStatusInProgress UserTitleStatus = "in-progress"
UserTitleStatusPlanned UserTitleStatus = "planned"
) )
// Image defines model for Image. // Image defines model for Image.
@ -110,8 +118,27 @@ type User struct {
UserDesc *string `json:"user_desc,omitempty"` UserDesc *string `json:"user_desc,omitempty"`
} }
// GetTitleParams defines parameters for GetTitle. // UserTitle defines model for UserTitle.
type GetTitleParams struct { type UserTitle struct {
Ctime *time.Time `json:"ctime,omitempty"`
Rate *int32 `json:"rate,omitempty"`
ReviewId *int64 `json:"review_id,omitempty"`
// Status User's title status
Status UserTitleStatus `json:"status"`
TitleId int64 `json:"title_id"`
UserId int64 `json:"user_id"`
AdditionalProperties map[string]interface{} `json:"-"`
}
// UserTitleStatus User's title status
type UserTitleStatus string
// Cursor defines model for cursor.
type Cursor = string
// GetTitlesParams defines parameters for GetTitles.
type GetTitlesParams struct {
Word *string `form:"word,omitempty" json:"word,omitempty"` Word *string `form:"word,omitempty" json:"word,omitempty"`
Status *TitleStatus `form:"status,omitempty" json:"status,omitempty"` Status *TitleStatus `form:"status,omitempty" json:"status,omitempty"`
Rating *float64 `form:"rating,omitempty" json:"rating,omitempty"` Rating *float64 `form:"rating,omitempty" json:"rating,omitempty"`
@ -122,8 +149,8 @@ type GetTitleParams struct {
Fields *string `form:"fields,omitempty" json:"fields,omitempty"` Fields *string `form:"fields,omitempty" json:"fields,omitempty"`
} }
// GetTitleTitleIdParams defines parameters for GetTitleTitleId. // GetTitlesTitleIdParams defines parameters for GetTitlesTitleId.
type GetTitleTitleIdParams struct { type GetTitlesTitleIdParams struct {
Fields *string `form:"fields,omitempty" json:"fields,omitempty"` Fields *string `form:"fields,omitempty" json:"fields,omitempty"`
} }
@ -132,6 +159,15 @@ type GetUsersUserIdParams struct {
Fields *string `form:"fields,omitempty" json:"fields,omitempty"` Fields *string `form:"fields,omitempty" json:"fields,omitempty"`
} }
// GetUsersUserIdTitlesParams defines parameters for GetUsersUserIdTitles.
type GetUsersUserIdTitlesParams struct {
Cursor *Cursor `form:"cursor,omitempty" json:"cursor,omitempty"`
Query *string `form:"query,omitempty" json:"query,omitempty"`
Limit *int `form:"limit,omitempty" json:"limit,omitempty"`
Offset *int `form:"offset,omitempty" json:"offset,omitempty"`
Fields *string `form:"fields,omitempty" json:"fields,omitempty"`
}
// Getter for additional properties for Title. Returns the specified // Getter for additional properties for Title. Returns the specified
// element and whether it was found // element and whether it was found
func (a Title) Get(fieldName string) (value interface{}, found bool) { func (a Title) Get(fieldName string) (value interface{}, found bool) {
@ -374,17 +410,157 @@ func (a Title) MarshalJSON() ([]byte, error) {
return json.Marshal(object) return json.Marshal(object)
} }
// Getter for additional properties for UserTitle. Returns the specified
// element and whether it was found
func (a UserTitle) Get(fieldName string) (value interface{}, found bool) {
if a.AdditionalProperties != nil {
value, found = a.AdditionalProperties[fieldName]
}
return
}
// Setter for additional properties for UserTitle
func (a *UserTitle) Set(fieldName string, value interface{}) {
if a.AdditionalProperties == nil {
a.AdditionalProperties = make(map[string]interface{})
}
a.AdditionalProperties[fieldName] = value
}
// Override default JSON handling for UserTitle to handle AdditionalProperties
func (a *UserTitle) UnmarshalJSON(b []byte) error {
object := make(map[string]json.RawMessage)
err := json.Unmarshal(b, &object)
if err != nil {
return err
}
if raw, found := object["ctime"]; found {
err = json.Unmarshal(raw, &a.Ctime)
if err != nil {
return fmt.Errorf("error reading 'ctime': %w", err)
}
delete(object, "ctime")
}
if raw, found := object["rate"]; found {
err = json.Unmarshal(raw, &a.Rate)
if err != nil {
return fmt.Errorf("error reading 'rate': %w", err)
}
delete(object, "rate")
}
if raw, found := object["review_id"]; found {
err = json.Unmarshal(raw, &a.ReviewId)
if err != nil {
return fmt.Errorf("error reading 'review_id': %w", err)
}
delete(object, "review_id")
}
if raw, found := object["status"]; found {
err = json.Unmarshal(raw, &a.Status)
if err != nil {
return fmt.Errorf("error reading 'status': %w", err)
}
delete(object, "status")
}
if raw, found := object["title_id"]; found {
err = json.Unmarshal(raw, &a.TitleId)
if err != nil {
return fmt.Errorf("error reading 'title_id': %w", err)
}
delete(object, "title_id")
}
if raw, found := object["user_id"]; found {
err = json.Unmarshal(raw, &a.UserId)
if err != nil {
return fmt.Errorf("error reading 'user_id': %w", err)
}
delete(object, "user_id")
}
if len(object) != 0 {
a.AdditionalProperties = make(map[string]interface{})
for fieldName, fieldBuf := range object {
var fieldVal interface{}
err := json.Unmarshal(fieldBuf, &fieldVal)
if err != nil {
return fmt.Errorf("error unmarshaling field %s: %w", fieldName, err)
}
a.AdditionalProperties[fieldName] = fieldVal
}
}
return nil
}
// Override default JSON handling for UserTitle to handle AdditionalProperties
func (a UserTitle) MarshalJSON() ([]byte, error) {
var err error
object := make(map[string]json.RawMessage)
if a.Ctime != nil {
object["ctime"], err = json.Marshal(a.Ctime)
if err != nil {
return nil, fmt.Errorf("error marshaling 'ctime': %w", err)
}
}
if a.Rate != nil {
object["rate"], err = json.Marshal(a.Rate)
if err != nil {
return nil, fmt.Errorf("error marshaling 'rate': %w", err)
}
}
if a.ReviewId != nil {
object["review_id"], err = json.Marshal(a.ReviewId)
if err != nil {
return nil, fmt.Errorf("error marshaling 'review_id': %w", err)
}
}
object["status"], err = json.Marshal(a.Status)
if err != nil {
return nil, fmt.Errorf("error marshaling 'status': %w", err)
}
object["title_id"], err = json.Marshal(a.TitleId)
if err != nil {
return nil, fmt.Errorf("error marshaling 'title_id': %w", err)
}
object["user_id"], err = json.Marshal(a.UserId)
if err != nil {
return nil, fmt.Errorf("error marshaling 'user_id': %w", err)
}
for fieldName, field := range a.AdditionalProperties {
object[fieldName], err = json.Marshal(field)
if err != nil {
return nil, fmt.Errorf("error marshaling '%s': %w", fieldName, err)
}
}
return json.Marshal(object)
}
// ServerInterface represents all server handlers. // ServerInterface represents all server handlers.
type ServerInterface interface { type ServerInterface interface {
// Get titles // Get titles
// (GET /title) // (GET /titles)
GetTitle(c *gin.Context, params GetTitleParams) GetTitles(c *gin.Context, params GetTitlesParams)
// Get title description // Get title description
// (GET /title/{title_id}) // (GET /titles/{title_id})
GetTitleTitleId(c *gin.Context, titleId int64, params GetTitleTitleIdParams) GetTitlesTitleId(c *gin.Context, titleId int64, params GetTitlesTitleIdParams)
// Get user info // Get user info
// (GET /users/{user_id}) // (GET /users/{user_id})
GetUsersUserId(c *gin.Context, userId string, params GetUsersUserIdParams) GetUsersUserId(c *gin.Context, userId string, params GetUsersUserIdParams)
// Get user titles
// (GET /users/{user_id}/titles/)
GetUsersUserIdTitles(c *gin.Context, userId string, params GetUsersUserIdTitlesParams)
} }
// ServerInterfaceWrapper converts contexts to parameters. // ServerInterfaceWrapper converts contexts to parameters.
@ -396,13 +572,13 @@ type ServerInterfaceWrapper struct {
type MiddlewareFunc func(c *gin.Context) type MiddlewareFunc func(c *gin.Context)
// GetTitle operation middleware // GetTitles operation middleware
func (siw *ServerInterfaceWrapper) GetTitle(c *gin.Context) { func (siw *ServerInterfaceWrapper) GetTitles(c *gin.Context) {
var err error var err error
// Parameter object where we will unmarshal all parameters from the context // Parameter object where we will unmarshal all parameters from the context
var params GetTitleParams var params GetTitlesParams
// ------------- Optional query parameter "word" ------------- // ------------- Optional query parameter "word" -------------
@ -475,11 +651,11 @@ func (siw *ServerInterfaceWrapper) GetTitle(c *gin.Context) {
} }
} }
siw.Handler.GetTitle(c, params) siw.Handler.GetTitles(c, params)
} }
// GetTitleTitleId operation middleware // GetTitlesTitleId operation middleware
func (siw *ServerInterfaceWrapper) GetTitleTitleId(c *gin.Context) { func (siw *ServerInterfaceWrapper) GetTitlesTitleId(c *gin.Context) {
var err error var err error
@ -493,7 +669,7 @@ func (siw *ServerInterfaceWrapper) GetTitleTitleId(c *gin.Context) {
} }
// Parameter object where we will unmarshal all parameters from the context // Parameter object where we will unmarshal all parameters from the context
var params GetTitleTitleIdParams var params GetTitlesTitleIdParams
// ------------- Optional query parameter "fields" ------------- // ------------- Optional query parameter "fields" -------------
@ -510,7 +686,7 @@ func (siw *ServerInterfaceWrapper) GetTitleTitleId(c *gin.Context) {
} }
} }
siw.Handler.GetTitleTitleId(c, titleId, params) siw.Handler.GetTitlesTitleId(c, titleId, params)
} }
// GetUsersUserId operation middleware // GetUsersUserId operation middleware
@ -548,6 +724,73 @@ func (siw *ServerInterfaceWrapper) GetUsersUserId(c *gin.Context) {
siw.Handler.GetUsersUserId(c, userId, params) siw.Handler.GetUsersUserId(c, userId, params)
} }
// GetUsersUserIdTitles operation middleware
func (siw *ServerInterfaceWrapper) GetUsersUserIdTitles(c *gin.Context) {
var err error
// ------------- Path parameter "user_id" -------------
var userId string
err = runtime.BindStyledParameterWithOptions("simple", "user_id", c.Param("user_id"), &userId, runtime.BindStyledParameterOptions{Explode: false, Required: true})
if err != nil {
siw.ErrorHandler(c, fmt.Errorf("Invalid format for parameter user_id: %w", err), http.StatusBadRequest)
return
}
// Parameter object where we will unmarshal all parameters from the context
var params GetUsersUserIdTitlesParams
// ------------- Optional query parameter "cursor" -------------
err = runtime.BindQueryParameter("form", true, false, "cursor", c.Request.URL.Query(), &params.Cursor)
if err != nil {
siw.ErrorHandler(c, fmt.Errorf("Invalid format for parameter cursor: %w", err), http.StatusBadRequest)
return
}
// ------------- Optional query parameter "query" -------------
err = runtime.BindQueryParameter("form", true, false, "query", c.Request.URL.Query(), &params.Query)
if err != nil {
siw.ErrorHandler(c, fmt.Errorf("Invalid format for parameter query: %w", err), http.StatusBadRequest)
return
}
// ------------- Optional query parameter "limit" -------------
err = runtime.BindQueryParameter("form", true, false, "limit", c.Request.URL.Query(), &params.Limit)
if err != nil {
siw.ErrorHandler(c, fmt.Errorf("Invalid format for parameter limit: %w", err), http.StatusBadRequest)
return
}
// ------------- Optional query parameter "offset" -------------
err = runtime.BindQueryParameter("form", true, false, "offset", c.Request.URL.Query(), &params.Offset)
if err != nil {
siw.ErrorHandler(c, fmt.Errorf("Invalid format for parameter offset: %w", err), http.StatusBadRequest)
return
}
// ------------- Optional query parameter "fields" -------------
err = runtime.BindQueryParameter("form", true, false, "fields", c.Request.URL.Query(), &params.Fields)
if err != nil {
siw.ErrorHandler(c, fmt.Errorf("Invalid format for parameter fields: %w", err), http.StatusBadRequest)
return
}
for _, middleware := range siw.HandlerMiddlewares {
middleware(c)
if c.IsAborted() {
return
}
}
siw.Handler.GetUsersUserIdTitles(c, userId, params)
}
// GinServerOptions provides options for the Gin server. // GinServerOptions provides options for the Gin server.
type GinServerOptions struct { type GinServerOptions struct {
BaseURL string BaseURL string
@ -575,98 +818,99 @@ func RegisterHandlersWithOptions(router gin.IRouter, si ServerInterface, options
ErrorHandler: errorHandler, ErrorHandler: errorHandler,
} }
router.GET(options.BaseURL+"/title", wrapper.GetTitle) router.GET(options.BaseURL+"/titles", wrapper.GetTitles)
router.GET(options.BaseURL+"/title/:title_id", wrapper.GetTitleTitleId) router.GET(options.BaseURL+"/titles/:title_id", wrapper.GetTitlesTitleId)
router.GET(options.BaseURL+"/users/:user_id", wrapper.GetUsersUserId) router.GET(options.BaseURL+"/users/:user_id", wrapper.GetUsersUserId)
router.GET(options.BaseURL+"/users/:user_id/titles/", wrapper.GetUsersUserIdTitles)
} }
type GetTitleRequestObject struct { type GetTitlesRequestObject struct {
Params GetTitleParams Params GetTitlesParams
} }
type GetTitleResponseObject interface { type GetTitlesResponseObject interface {
VisitGetTitleResponse(w http.ResponseWriter) error VisitGetTitlesResponse(w http.ResponseWriter) error
} }
type GetTitle200JSONResponse []Title type GetTitles200JSONResponse []Title
func (response GetTitle200JSONResponse) VisitGetTitleResponse(w http.ResponseWriter) error { func (response GetTitles200JSONResponse) VisitGetTitlesResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
w.WriteHeader(200) w.WriteHeader(200)
return json.NewEncoder(w).Encode(response) return json.NewEncoder(w).Encode(response)
} }
type GetTitle204Response struct { type GetTitles204Response struct {
} }
func (response GetTitle204Response) VisitGetTitleResponse(w http.ResponseWriter) error { func (response GetTitles204Response) VisitGetTitlesResponse(w http.ResponseWriter) error {
w.WriteHeader(204) w.WriteHeader(204)
return nil return nil
} }
type GetTitle400Response struct { type GetTitles400Response struct {
} }
func (response GetTitle400Response) VisitGetTitleResponse(w http.ResponseWriter) error { func (response GetTitles400Response) VisitGetTitlesResponse(w http.ResponseWriter) error {
w.WriteHeader(400) w.WriteHeader(400)
return nil return nil
} }
type GetTitle500Response struct { type GetTitles500Response struct {
} }
func (response GetTitle500Response) VisitGetTitleResponse(w http.ResponseWriter) error { func (response GetTitles500Response) VisitGetTitlesResponse(w http.ResponseWriter) error {
w.WriteHeader(500) w.WriteHeader(500)
return nil return nil
} }
type GetTitleTitleIdRequestObject struct { type GetTitlesTitleIdRequestObject struct {
TitleId int64 `json:"title_id"` TitleId int64 `json:"title_id"`
Params GetTitleTitleIdParams Params GetTitlesTitleIdParams
} }
type GetTitleTitleIdResponseObject interface { type GetTitlesTitleIdResponseObject interface {
VisitGetTitleTitleIdResponse(w http.ResponseWriter) error VisitGetTitlesTitleIdResponse(w http.ResponseWriter) error
} }
type GetTitleTitleId200JSONResponse Title type GetTitlesTitleId200JSONResponse Title
func (response GetTitleTitleId200JSONResponse) VisitGetTitleTitleIdResponse(w http.ResponseWriter) error { func (response GetTitlesTitleId200JSONResponse) VisitGetTitlesTitleIdResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
w.WriteHeader(200) w.WriteHeader(200)
return json.NewEncoder(w).Encode(response) return json.NewEncoder(w).Encode(response)
} }
type GetTitleTitleId204Response struct { type GetTitlesTitleId204Response struct {
} }
func (response GetTitleTitleId204Response) VisitGetTitleTitleIdResponse(w http.ResponseWriter) error { func (response GetTitlesTitleId204Response) VisitGetTitlesTitleIdResponse(w http.ResponseWriter) error {
w.WriteHeader(204) w.WriteHeader(204)
return nil return nil
} }
type GetTitleTitleId400Response struct { type GetTitlesTitleId400Response struct {
} }
func (response GetTitleTitleId400Response) VisitGetTitleTitleIdResponse(w http.ResponseWriter) error { func (response GetTitlesTitleId400Response) VisitGetTitlesTitleIdResponse(w http.ResponseWriter) error {
w.WriteHeader(400) w.WriteHeader(400)
return nil return nil
} }
type GetTitleTitleId404Response struct { type GetTitlesTitleId404Response struct {
} }
func (response GetTitleTitleId404Response) VisitGetTitleTitleIdResponse(w http.ResponseWriter) error { func (response GetTitlesTitleId404Response) VisitGetTitlesTitleIdResponse(w http.ResponseWriter) error {
w.WriteHeader(404) w.WriteHeader(404)
return nil return nil
} }
type GetTitleTitleId500Response struct { type GetTitlesTitleId500Response struct {
} }
func (response GetTitleTitleId500Response) VisitGetTitleTitleIdResponse(w http.ResponseWriter) error { func (response GetTitlesTitleId500Response) VisitGetTitlesTitleIdResponse(w http.ResponseWriter) error {
w.WriteHeader(500) w.WriteHeader(500)
return nil return nil
} }
@ -713,17 +957,62 @@ func (response GetUsersUserId500Response) VisitGetUsersUserIdResponse(w http.Res
return nil return nil
} }
type GetUsersUserIdTitlesRequestObject struct {
UserId string `json:"user_id"`
Params GetUsersUserIdTitlesParams
}
type GetUsersUserIdTitlesResponseObject interface {
VisitGetUsersUserIdTitlesResponse(w http.ResponseWriter) error
}
type GetUsersUserIdTitles200JSONResponse []UserTitle
func (response GetUsersUserIdTitles200JSONResponse) VisitGetUsersUserIdTitlesResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(200)
return json.NewEncoder(w).Encode(response)
}
type GetUsersUserIdTitles204Response struct {
}
func (response GetUsersUserIdTitles204Response) VisitGetUsersUserIdTitlesResponse(w http.ResponseWriter) error {
w.WriteHeader(204)
return nil
}
type GetUsersUserIdTitles400Response struct {
}
func (response GetUsersUserIdTitles400Response) VisitGetUsersUserIdTitlesResponse(w http.ResponseWriter) error {
w.WriteHeader(400)
return nil
}
type GetUsersUserIdTitles500Response struct {
}
func (response GetUsersUserIdTitles500Response) VisitGetUsersUserIdTitlesResponse(w http.ResponseWriter) error {
w.WriteHeader(500)
return nil
}
// StrictServerInterface represents all server handlers. // StrictServerInterface represents all server handlers.
type StrictServerInterface interface { type StrictServerInterface interface {
// Get titles // Get titles
// (GET /title) // (GET /titles)
GetTitle(ctx context.Context, request GetTitleRequestObject) (GetTitleResponseObject, error) GetTitles(ctx context.Context, request GetTitlesRequestObject) (GetTitlesResponseObject, error)
// Get title description // Get title description
// (GET /title/{title_id}) // (GET /titles/{title_id})
GetTitleTitleId(ctx context.Context, request GetTitleTitleIdRequestObject) (GetTitleTitleIdResponseObject, error) GetTitlesTitleId(ctx context.Context, request GetTitlesTitleIdRequestObject) (GetTitlesTitleIdResponseObject, error)
// Get user info // Get user info
// (GET /users/{user_id}) // (GET /users/{user_id})
GetUsersUserId(ctx context.Context, request GetUsersUserIdRequestObject) (GetUsersUserIdResponseObject, error) GetUsersUserId(ctx context.Context, request GetUsersUserIdRequestObject) (GetUsersUserIdResponseObject, error)
// Get user titles
// (GET /users/{user_id}/titles/)
GetUsersUserIdTitles(ctx context.Context, request GetUsersUserIdTitlesRequestObject) (GetUsersUserIdTitlesResponseObject, error)
} }
type StrictHandlerFunc = strictgin.StrictGinHandlerFunc type StrictHandlerFunc = strictgin.StrictGinHandlerFunc
@ -738,17 +1027,17 @@ type strictHandler struct {
middlewares []StrictMiddlewareFunc middlewares []StrictMiddlewareFunc
} }
// GetTitle operation middleware // GetTitles operation middleware
func (sh *strictHandler) GetTitle(ctx *gin.Context, params GetTitleParams) { func (sh *strictHandler) GetTitles(ctx *gin.Context, params GetTitlesParams) {
var request GetTitleRequestObject var request GetTitlesRequestObject
request.Params = params request.Params = params
handler := func(ctx *gin.Context, request interface{}) (interface{}, error) { handler := func(ctx *gin.Context, request interface{}) (interface{}, error) {
return sh.ssi.GetTitle(ctx, request.(GetTitleRequestObject)) return sh.ssi.GetTitles(ctx, request.(GetTitlesRequestObject))
} }
for _, middleware := range sh.middlewares { for _, middleware := range sh.middlewares {
handler = middleware(handler, "GetTitle") handler = middleware(handler, "GetTitles")
} }
response, err := handler(ctx, request) response, err := handler(ctx, request)
@ -756,8 +1045,8 @@ func (sh *strictHandler) GetTitle(ctx *gin.Context, params GetTitleParams) {
if err != nil { if err != nil {
ctx.Error(err) ctx.Error(err)
ctx.Status(http.StatusInternalServerError) ctx.Status(http.StatusInternalServerError)
} else if validResponse, ok := response.(GetTitleResponseObject); ok { } else if validResponse, ok := response.(GetTitlesResponseObject); ok {
if err := validResponse.VisitGetTitleResponse(ctx.Writer); err != nil { if err := validResponse.VisitGetTitlesResponse(ctx.Writer); err != nil {
ctx.Error(err) ctx.Error(err)
} }
} else if response != nil { } else if response != nil {
@ -765,18 +1054,18 @@ func (sh *strictHandler) GetTitle(ctx *gin.Context, params GetTitleParams) {
} }
} }
// GetTitleTitleId operation middleware // GetTitlesTitleId operation middleware
func (sh *strictHandler) GetTitleTitleId(ctx *gin.Context, titleId int64, params GetTitleTitleIdParams) { func (sh *strictHandler) GetTitlesTitleId(ctx *gin.Context, titleId int64, params GetTitlesTitleIdParams) {
var request GetTitleTitleIdRequestObject var request GetTitlesTitleIdRequestObject
request.TitleId = titleId request.TitleId = titleId
request.Params = params request.Params = params
handler := func(ctx *gin.Context, request interface{}) (interface{}, error) { handler := func(ctx *gin.Context, request interface{}) (interface{}, error) {
return sh.ssi.GetTitleTitleId(ctx, request.(GetTitleTitleIdRequestObject)) return sh.ssi.GetTitlesTitleId(ctx, request.(GetTitlesTitleIdRequestObject))
} }
for _, middleware := range sh.middlewares { for _, middleware := range sh.middlewares {
handler = middleware(handler, "GetTitleTitleId") handler = middleware(handler, "GetTitlesTitleId")
} }
response, err := handler(ctx, request) response, err := handler(ctx, request)
@ -784,8 +1073,8 @@ func (sh *strictHandler) GetTitleTitleId(ctx *gin.Context, titleId int64, params
if err != nil { if err != nil {
ctx.Error(err) ctx.Error(err)
ctx.Status(http.StatusInternalServerError) ctx.Status(http.StatusInternalServerError)
} else if validResponse, ok := response.(GetTitleTitleIdResponseObject); ok { } else if validResponse, ok := response.(GetTitlesTitleIdResponseObject); ok {
if err := validResponse.VisitGetTitleTitleIdResponse(ctx.Writer); err != nil { if err := validResponse.VisitGetTitlesTitleIdResponse(ctx.Writer); err != nil {
ctx.Error(err) ctx.Error(err)
} }
} else if response != nil { } else if response != nil {
@ -820,3 +1109,31 @@ func (sh *strictHandler) GetUsersUserId(ctx *gin.Context, userId string, params
ctx.Error(fmt.Errorf("unexpected response type: %T", response)) ctx.Error(fmt.Errorf("unexpected response type: %T", response))
} }
} }
// GetUsersUserIdTitles operation middleware
func (sh *strictHandler) GetUsersUserIdTitles(ctx *gin.Context, userId string, params GetUsersUserIdTitlesParams) {
var request GetUsersUserIdTitlesRequestObject
request.UserId = userId
request.Params = params
handler := func(ctx *gin.Context, request interface{}) (interface{}, error) {
return sh.ssi.GetUsersUserIdTitles(ctx, request.(GetUsersUserIdTitlesRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "GetUsersUserIdTitles")
}
response, err := handler(ctx, request)
if err != nil {
ctx.Error(err)
ctx.Status(http.StatusInternalServerError)
} else if validResponse, ok := response.(GetUsersUserIdTitlesResponseObject); ok {
if err := validResponse.VisitGetUsersUserIdTitlesResponse(ctx.Writer); err != nil {
ctx.Error(err)
}
} else if response != nil {
ctx.Error(fmt.Errorf("unexpected response type: %T", response))
}
}

View file

@ -7,7 +7,7 @@ servers:
- url: /api/v1 - url: /api/v1
paths: paths:
/title: /titles:
get: get:
summary: Get titles summary: Get titles
parameters: parameters:
@ -66,7 +66,7 @@ paths:
'500': '500':
description: Unknown server error description: Unknown server error
/title/{title_id}: /titles/{title_id}:
get: get:
summary: Get title description summary: Get title description
parameters: parameters:
@ -126,7 +126,7 @@ paths:
# user_json: # user_json:
# $ref: '#/components/schemas/User' # $ref: '#/components/schemas/User'
# /title/{title_id}/reviews: # /titles/{title_id}/reviews:
# get: # get:
# summary: Get title reviews # summary: Get title reviews
# parameters: # parameters:
@ -278,45 +278,50 @@ paths:
# user_json: # user_json:
# $ref: '#/components/schemas/User' # $ref: '#/components/schemas/User'
# /users/{user_id}/titles: /users/{user_id}/titles/:
# get: get:
# summary: Get user titles summary: Get user titles
# parameters: parameters:
# - in: path - $ref: '#/components/parameters/cursor'
# name: user_id - in: path
# required: true name: user_id
# schema: required: true
# type: string schema:
# - in: query type: string
# name: query - in: query
# schema: name: query
# type: string schema:
# - in: query type: string
# name: limit - in: query
# schema: name: limit
# type: integer schema:
# default: 10 type: integer
# - in: query default: 10
# name: offset - in: query
# schema: name: offset
# type: integer schema:
# default: 0 type: integer
# - in: query default: 0
# name: fields - in: query
# schema: name: fields
# type: string schema:
# default: all type: string
# responses: default: all
# '200': responses:
# description: List of user titles '200':
# content: description: List of user titles
# application/json: content:
# schema: application/json:
# type: array schema:
# items: type: array
# $ref: '#/components/schemas/UserTitle' items:
# '204': $ref: '#/components/schemas/UserTitle'
# description: No titles found '204':
description: No titles found
'400':
description: Request params are not correct
'500':
description: Unknown server error
# post: # post:
# summary: Add user title # summary: Add user title
@ -571,6 +576,14 @@ paths:
# type: string # type: string
components: components:
parameters:
cursor:
in: query
name: cursor
required: false
schema:
type: string
schemas: schemas:
Image: Image:
type: object type: object
@ -769,7 +782,7 @@ components:
type: integer type: integer
format: int64 format: int64
status: status:
$ref: '#components/schemas/UserTitleStatus' $ref: '#/components/schemas/UserTitleStatus'
rate: rate:
type: integer type: integer
format: int32 format: int32

View file

@ -25,11 +25,11 @@ func TitleStatus2Sqlc(s *oapi.TitleStatus) (*sqlc.TitleStatusT, error) {
} }
var t sqlc.TitleStatusT var t sqlc.TitleStatusT
switch *s { switch *s {
case oapi.Finished: case oapi.TitleStatusFinished:
t = sqlc.TitleStatusTFinished t = sqlc.TitleStatusTFinished
case oapi.Ongoing: case oapi.TitleStatusOngoing:
t = sqlc.TitleStatusTOngoing t = sqlc.TitleStatusTOngoing
case oapi.Planned: case oapi.TitleStatusPlanned:
t = sqlc.TitleStatusTPlanned t = sqlc.TitleStatusTPlanned
default: default:
return nil, fmt.Errorf("unexpected tittle status: %s", *s) return nil, fmt.Errorf("unexpected tittle status: %s", *s)
@ -195,40 +195,40 @@ func (s Server) mapTitle(ctx context.Context, title sqlc.Title) (oapi.Title, err
return oapi_title, nil return oapi_title, nil
} }
func (s Server) GetTitleTitleId(ctx context.Context, request oapi.GetTitleTitleIdRequestObject) (oapi.GetTitleTitleIdResponseObject, error) { func (s Server) GetTitlesTitleId(ctx context.Context, request oapi.GetTitlesTitleIdRequestObject) (oapi.GetTitlesTitleIdResponseObject, error) {
var oapi_title oapi.Title var oapi_title oapi.Title
sqlc_title, err := s.db.GetTitleByID(ctx, request.TitleId) sqlc_title, err := s.db.GetTitleByID(ctx, request.TitleId)
if err != nil { if err != nil {
if err == pgx.ErrNoRows { if err == pgx.ErrNoRows {
return oapi.GetTitleTitleId204Response{}, nil return oapi.GetTitlesTitleId204Response{}, nil
} }
log.Errorf("%v", err) log.Errorf("%v", err)
return oapi.GetTitleTitleId500Response{}, nil return oapi.GetTitlesTitleId500Response{}, nil
} }
oapi_title, err = s.mapTitle(ctx, sqlc_title) oapi_title, err = s.mapTitle(ctx, sqlc_title)
if err != nil { if err != nil {
log.Errorf("%v", err) log.Errorf("%v", err)
return oapi.GetTitleTitleId500Response{}, nil return oapi.GetTitlesTitleId500Response{}, nil
} }
return oapi.GetTitleTitleId200JSONResponse(oapi_title), nil return oapi.GetTitlesTitleId200JSONResponse(oapi_title), nil
} }
func (s Server) GetTitle(ctx context.Context, request oapi.GetTitleRequestObject) (oapi.GetTitleResponseObject, error) { func (s Server) GetTitles(ctx context.Context, request oapi.GetTitlesRequestObject) (oapi.GetTitlesResponseObject, error) {
opai_titles := make([]oapi.Title, 0) opai_titles := make([]oapi.Title, 0)
word := Word2Sqlc(request.Params.Word) word := Word2Sqlc(request.Params.Word)
status, err := TitleStatus2Sqlc(request.Params.Status) status, err := TitleStatus2Sqlc(request.Params.Status)
if err != nil { if err != nil {
log.Errorf("%v", err) log.Errorf("%v", err)
return oapi.GetTitle400Response{}, err return oapi.GetTitles400Response{}, err
} }
season, err := ReleaseSeason2sqlc(request.Params.ReleaseSeason) season, err := ReleaseSeason2sqlc(request.Params.ReleaseSeason)
if err != nil { if err != nil {
log.Errorf("%v", err) log.Errorf("%v", err)
return oapi.GetTitle400Response{}, err return oapi.GetTitles400Response{}, err
} }
// param = nil means it will not be used // param = nil means it will not be used
titles, err := s.db.SearchTitles(ctx, sqlc.SearchTitlesParams{ titles, err := s.db.SearchTitles(ctx, sqlc.SearchTitlesParams{
@ -242,10 +242,10 @@ func (s Server) GetTitle(ctx context.Context, request oapi.GetTitleRequestObject
}) })
if err != nil { if err != nil {
log.Errorf("%v", err) log.Errorf("%v", err)
return oapi.GetTitle500Response{}, nil return oapi.GetTitles500Response{}, nil
} }
if len(titles) == 0 { if len(titles) == 0 {
return oapi.GetTitle204Response{}, nil return oapi.GetTitles204Response{}, nil
} }
for _, title := range titles { for _, title := range titles {
@ -253,10 +253,10 @@ func (s Server) GetTitle(ctx context.Context, request oapi.GetTitleRequestObject
t, err := s.mapTitle(ctx, title) t, err := s.mapTitle(ctx, title)
if err != nil { if err != nil {
log.Errorf("%v", err) log.Errorf("%v", err)
return oapi.GetTitle500Response{}, nil return oapi.GetTitles500Response{}, nil
} }
opai_titles = append(opai_titles, t) opai_titles = append(opai_titles, t)
} }
return oapi.GetTitle200JSONResponse(opai_titles), nil return oapi.GetTitles200JSONResponse(opai_titles), nil
} }

View file

@ -48,3 +48,10 @@ func (s Server) GetUsersUserId(ctx context.Context, req oapi.GetUsersUserIdReque
} }
return oapi.GetUsersUserId200JSONResponse(mapUser(user)), nil return oapi.GetUsersUserId200JSONResponse(mapUser(user)), nil
} }
func (s Server) GetUsersUserIdTitles(ctx context.Context, request oapi.GetUsersUserIdTitlesRequestObject) (oapi.GetUsersUserIdTitlesResponseObject, error) {
// oapi_user_titles := make([]oapi.UserTitle, 0)
return nil, nil
}

View file

@ -86,7 +86,7 @@ CREATE TABLE usertitles (
title_id bigint NOT NULL REFERENCES titles (id), title_id bigint NOT NULL REFERENCES titles (id),
status usertitle_status_t NOT NULL, status usertitle_status_t NOT NULL,
rate int CHECK (rate > 0 AND rate <= 10), rate int CHECK (rate > 0 AND rate <= 10),
review_id bigint NOT NULL REFERENCES reviews (id), review_id bigint REFERENCES reviews (id),
ctime timestamptz ctime timestamptz
-- // TODO: series status -- // TODO: series status
); );