feat: delete usertitle implemented
All checks were successful
Build and Deploy Go App / build (push) Successful in 6m12s
Build and Deploy Go App / deploy (push) Successful in 25s

This commit is contained in:
Iron_Felix 2025-11-27 08:00:29 +03:00
parent 246fdc86b5
commit 451df61127
7 changed files with 160 additions and 492 deletions

View file

@ -419,7 +419,12 @@ paths:
schema: schema:
type: integer type: integer
format: int64 format: int64
example: 123 - name: title_id
in: query
required: true
schema:
type: integer
format: int64
responses: responses:
'200': '200':
description: Title successfully deleted description: Title successfully deleted
@ -581,7 +586,6 @@ components:
additionalProperties: additionalProperties:
type: number type: number
format: double format: double
additionalProperties: true
required: required:
- id - id
- title_names - title_names

View file

@ -112,8 +112,7 @@ type Title struct {
TitleNames map[string][]string `json:"title_names"` TitleNames map[string][]string `json:"title_names"`
// TitleStatus Title status // TitleStatus Title status
TitleStatus *TitleStatus `json:"title_status,omitempty"` TitleStatus *TitleStatus `json:"title_status,omitempty"`
AdditionalProperties map[string]interface{} `json:"-"`
} }
// TitleSort Title sort order // TitleSort Title sort order
@ -191,13 +190,13 @@ type GetTitlesParams struct {
Fields *string `form:"fields,omitempty" json:"fields,omitempty"` Fields *string `form:"fields,omitempty" json:"fields,omitempty"`
} }
// GetTitlesTitleIdParams defines parameters for GetTitlesTitleId. // GetTitleParams defines parameters for GetTitle.
type GetTitlesTitleIdParams struct { type GetTitleParams struct {
Fields *string `form:"fields,omitempty" json:"fields,omitempty"` Fields *string `form:"fields,omitempty" json:"fields,omitempty"`
} }
// GetUsersUserIdParams defines parameters for GetUsersUserId. // GetUsersIdParams defines parameters for GetUsersId.
type GetUsersUserIdParams struct { type GetUsersIdParams struct {
Fields *string `form:"fields,omitempty" json:"fields,omitempty"` Fields *string `form:"fields,omitempty" json:"fields,omitempty"`
} }
@ -219,6 +218,11 @@ type UpdateUserJSONBody struct {
UserDesc *string `json:"user_desc,omitempty"` UserDesc *string `json:"user_desc,omitempty"`
} }
// DeleteUserTitleParams defines parameters for DeleteUserTitle.
type DeleteUserTitleParams struct {
TitleId int64 `form:"title_id" json:"title_id"`
}
// GetUsersUserIdTitlesParams defines parameters for GetUsersUserIdTitles. // GetUsersUserIdTitlesParams defines parameters for GetUsersUserIdTitles.
type GetUsersUserIdTitlesParams struct { type GetUsersUserIdTitlesParams struct {
Cursor *Cursor `form:"cursor,omitempty" json:"cursor,omitempty"` Cursor *Cursor `form:"cursor,omitempty" json:"cursor,omitempty"`
@ -264,248 +268,6 @@ type UpdateUserTitleJSONRequestBody UpdateUserTitleJSONBody
// AddUserTitleJSONRequestBody defines body for AddUserTitle for application/json ContentType. // AddUserTitleJSONRequestBody defines body for AddUserTitle for application/json ContentType.
type AddUserTitleJSONRequestBody AddUserTitleJSONBody type AddUserTitleJSONRequestBody AddUserTitleJSONBody
// Getter for additional properties for Title. Returns the specified
// element and whether it was found
func (a Title) Get(fieldName string) (value interface{}, found bool) {
if a.AdditionalProperties != nil {
value, found = a.AdditionalProperties[fieldName]
}
return
}
// Setter for additional properties for Title
func (a *Title) Set(fieldName string, value interface{}) {
if a.AdditionalProperties == nil {
a.AdditionalProperties = make(map[string]interface{})
}
a.AdditionalProperties[fieldName] = value
}
// Override default JSON handling for Title to handle AdditionalProperties
func (a *Title) UnmarshalJSON(b []byte) error {
object := make(map[string]json.RawMessage)
err := json.Unmarshal(b, &object)
if err != nil {
return err
}
if raw, found := object["episodes_aired"]; found {
err = json.Unmarshal(raw, &a.EpisodesAired)
if err != nil {
return fmt.Errorf("error reading 'episodes_aired': %w", err)
}
delete(object, "episodes_aired")
}
if raw, found := object["episodes_all"]; found {
err = json.Unmarshal(raw, &a.EpisodesAll)
if err != nil {
return fmt.Errorf("error reading 'episodes_all': %w", err)
}
delete(object, "episodes_all")
}
if raw, found := object["episodes_len"]; found {
err = json.Unmarshal(raw, &a.EpisodesLen)
if err != nil {
return fmt.Errorf("error reading 'episodes_len': %w", err)
}
delete(object, "episodes_len")
}
if raw, found := object["id"]; found {
err = json.Unmarshal(raw, &a.Id)
if err != nil {
return fmt.Errorf("error reading 'id': %w", err)
}
delete(object, "id")
}
if raw, found := object["poster"]; found {
err = json.Unmarshal(raw, &a.Poster)
if err != nil {
return fmt.Errorf("error reading 'poster': %w", err)
}
delete(object, "poster")
}
if raw, found := object["rating"]; found {
err = json.Unmarshal(raw, &a.Rating)
if err != nil {
return fmt.Errorf("error reading 'rating': %w", err)
}
delete(object, "rating")
}
if raw, found := object["rating_count"]; found {
err = json.Unmarshal(raw, &a.RatingCount)
if err != nil {
return fmt.Errorf("error reading 'rating_count': %w", err)
}
delete(object, "rating_count")
}
if raw, found := object["release_season"]; found {
err = json.Unmarshal(raw, &a.ReleaseSeason)
if err != nil {
return fmt.Errorf("error reading 'release_season': %w", err)
}
delete(object, "release_season")
}
if raw, found := object["release_year"]; found {
err = json.Unmarshal(raw, &a.ReleaseYear)
if err != nil {
return fmt.Errorf("error reading 'release_year': %w", err)
}
delete(object, "release_year")
}
if raw, found := object["studio"]; found {
err = json.Unmarshal(raw, &a.Studio)
if err != nil {
return fmt.Errorf("error reading 'studio': %w", err)
}
delete(object, "studio")
}
if raw, found := object["tags"]; found {
err = json.Unmarshal(raw, &a.Tags)
if err != nil {
return fmt.Errorf("error reading 'tags': %w", err)
}
delete(object, "tags")
}
if raw, found := object["title_names"]; found {
err = json.Unmarshal(raw, &a.TitleNames)
if err != nil {
return fmt.Errorf("error reading 'title_names': %w", err)
}
delete(object, "title_names")
}
if raw, found := object["title_status"]; found {
err = json.Unmarshal(raw, &a.TitleStatus)
if err != nil {
return fmt.Errorf("error reading 'title_status': %w", err)
}
delete(object, "title_status")
}
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 Title to handle AdditionalProperties
func (a Title) MarshalJSON() ([]byte, error) {
var err error
object := make(map[string]json.RawMessage)
if a.EpisodesAired != nil {
object["episodes_aired"], err = json.Marshal(a.EpisodesAired)
if err != nil {
return nil, fmt.Errorf("error marshaling 'episodes_aired': %w", err)
}
}
if a.EpisodesAll != nil {
object["episodes_all"], err = json.Marshal(a.EpisodesAll)
if err != nil {
return nil, fmt.Errorf("error marshaling 'episodes_all': %w", err)
}
}
if a.EpisodesLen != nil {
object["episodes_len"], err = json.Marshal(a.EpisodesLen)
if err != nil {
return nil, fmt.Errorf("error marshaling 'episodes_len': %w", err)
}
}
object["id"], err = json.Marshal(a.Id)
if err != nil {
return nil, fmt.Errorf("error marshaling 'id': %w", err)
}
if a.Poster != nil {
object["poster"], err = json.Marshal(a.Poster)
if err != nil {
return nil, fmt.Errorf("error marshaling 'poster': %w", err)
}
}
if a.Rating != nil {
object["rating"], err = json.Marshal(a.Rating)
if err != nil {
return nil, fmt.Errorf("error marshaling 'rating': %w", err)
}
}
if a.RatingCount != nil {
object["rating_count"], err = json.Marshal(a.RatingCount)
if err != nil {
return nil, fmt.Errorf("error marshaling 'rating_count': %w", err)
}
}
if a.ReleaseSeason != nil {
object["release_season"], err = json.Marshal(a.ReleaseSeason)
if err != nil {
return nil, fmt.Errorf("error marshaling 'release_season': %w", err)
}
}
if a.ReleaseYear != nil {
object["release_year"], err = json.Marshal(a.ReleaseYear)
if err != nil {
return nil, fmt.Errorf("error marshaling 'release_year': %w", err)
}
}
if a.Studio != nil {
object["studio"], err = json.Marshal(a.Studio)
if err != nil {
return nil, fmt.Errorf("error marshaling 'studio': %w", err)
}
}
object["tags"], err = json.Marshal(a.Tags)
if err != nil {
return nil, fmt.Errorf("error marshaling 'tags': %w", err)
}
object["title_names"], err = json.Marshal(a.TitleNames)
if err != nil {
return nil, fmt.Errorf("error marshaling 'title_names': %w", err)
}
if a.TitleStatus != nil {
object["title_status"], err = json.Marshal(a.TitleStatus)
if err != nil {
return nil, fmt.Errorf("error marshaling 'title_status': %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
@ -513,16 +275,16 @@ type ServerInterface interface {
GetTitles(c *gin.Context, params GetTitlesParams) GetTitles(c *gin.Context, params GetTitlesParams)
// Get title description // Get title description
// (GET /titles/{title_id}) // (GET /titles/{title_id})
GetTitlesTitleId(c *gin.Context, titleId int64, params GetTitlesTitleIdParams) GetTitle(c *gin.Context, titleId int64, params GetTitleParams)
// Get user info // Get user info
// (GET /users/{user_id}) // (GET /users/{user_id})
GetUsersUserId(c *gin.Context, userId string, params GetUsersUserIdParams) GetUsersId(c *gin.Context, userId string, params GetUsersIdParams)
// Partially update a user account // Partially update a user account
// (PATCH /users/{user_id}) // (PATCH /users/{user_id})
UpdateUser(c *gin.Context, userId int64) UpdateUser(c *gin.Context, userId int64)
// Delete a usertitle // Delete a usertitle
// (DELETE /users/{user_id}/titles) // (DELETE /users/{user_id}/titles)
DeleteUserTitle(c *gin.Context, userId int64) DeleteUserTitle(c *gin.Context, userId int64, params DeleteUserTitleParams)
// Get user titles // Get user titles
// (GET /users/{user_id}/titles) // (GET /users/{user_id}/titles)
GetUsersUserIdTitles(c *gin.Context, userId string, params GetUsersUserIdTitlesParams) GetUsersUserIdTitles(c *gin.Context, userId string, params GetUsersUserIdTitlesParams)
@ -649,8 +411,8 @@ func (siw *ServerInterfaceWrapper) GetTitles(c *gin.Context) {
siw.Handler.GetTitles(c, params) siw.Handler.GetTitles(c, params)
} }
// GetTitlesTitleId operation middleware // GetTitle operation middleware
func (siw *ServerInterfaceWrapper) GetTitlesTitleId(c *gin.Context) { func (siw *ServerInterfaceWrapper) GetTitle(c *gin.Context) {
var err error var err error
@ -664,7 +426,7 @@ func (siw *ServerInterfaceWrapper) GetTitlesTitleId(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 GetTitlesTitleIdParams var params GetTitleParams
// ------------- Optional query parameter "fields" ------------- // ------------- Optional query parameter "fields" -------------
@ -681,11 +443,11 @@ func (siw *ServerInterfaceWrapper) GetTitlesTitleId(c *gin.Context) {
} }
} }
siw.Handler.GetTitlesTitleId(c, titleId, params) siw.Handler.GetTitle(c, titleId, params)
} }
// GetUsersUserId operation middleware // GetUsersId operation middleware
func (siw *ServerInterfaceWrapper) GetUsersUserId(c *gin.Context) { func (siw *ServerInterfaceWrapper) GetUsersId(c *gin.Context) {
var err error var err error
@ -699,7 +461,7 @@ func (siw *ServerInterfaceWrapper) GetUsersUserId(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 GetUsersUserIdParams var params GetUsersIdParams
// ------------- Optional query parameter "fields" ------------- // ------------- Optional query parameter "fields" -------------
@ -716,7 +478,7 @@ func (siw *ServerInterfaceWrapper) GetUsersUserId(c *gin.Context) {
} }
} }
siw.Handler.GetUsersUserId(c, userId, params) siw.Handler.GetUsersId(c, userId, params)
} }
// UpdateUser operation middleware // UpdateUser operation middleware
@ -757,6 +519,24 @@ func (siw *ServerInterfaceWrapper) DeleteUserTitle(c *gin.Context) {
return return
} }
// Parameter object where we will unmarshal all parameters from the context
var params DeleteUserTitleParams
// ------------- Required query parameter "title_id" -------------
if paramValue := c.Query("title_id"); paramValue != "" {
} else {
siw.ErrorHandler(c, fmt.Errorf("Query argument title_id is required, but not found"), http.StatusBadRequest)
return
}
err = runtime.BindQueryParameter("form", true, true, "title_id", c.Request.URL.Query(), &params.TitleId)
if err != nil {
siw.ErrorHandler(c, fmt.Errorf("Invalid format for parameter title_id: %w", err), http.StatusBadRequest)
return
}
for _, middleware := range siw.HandlerMiddlewares { for _, middleware := range siw.HandlerMiddlewares {
middleware(c) middleware(c)
if c.IsAborted() { if c.IsAborted() {
@ -764,7 +544,7 @@ func (siw *ServerInterfaceWrapper) DeleteUserTitle(c *gin.Context) {
} }
} }
siw.Handler.DeleteUserTitle(c, userId) siw.Handler.DeleteUserTitle(c, userId, params)
} }
// GetUsersUserIdTitles operation middleware // GetUsersUserIdTitles operation middleware
@ -966,8 +746,8 @@ func RegisterHandlersWithOptions(router gin.IRouter, si ServerInterface, options
} }
router.GET(options.BaseURL+"/titles", wrapper.GetTitles) router.GET(options.BaseURL+"/titles", wrapper.GetTitles)
router.GET(options.BaseURL+"/titles/:title_id", wrapper.GetTitlesTitleId) router.GET(options.BaseURL+"/titles/:title_id", wrapper.GetTitle)
router.GET(options.BaseURL+"/users/:user_id", wrapper.GetUsersUserId) router.GET(options.BaseURL+"/users/:user_id", wrapper.GetUsersId)
router.PATCH(options.BaseURL+"/users/:user_id", wrapper.UpdateUser) router.PATCH(options.BaseURL+"/users/:user_id", wrapper.UpdateUser)
router.DELETE(options.BaseURL+"/users/:user_id/titles", wrapper.DeleteUserTitle) router.DELETE(options.BaseURL+"/users/:user_id/titles", wrapper.DeleteUserTitle)
router.GET(options.BaseURL+"/users/:user_id/titles", wrapper.GetUsersUserIdTitles) router.GET(options.BaseURL+"/users/:user_id/titles", wrapper.GetUsersUserIdTitles)
@ -1021,94 +801,94 @@ func (response GetTitles500Response) VisitGetTitlesResponse(w http.ResponseWrite
return nil return nil
} }
type GetTitlesTitleIdRequestObject struct { type GetTitleRequestObject struct {
TitleId int64 `json:"title_id"` TitleId int64 `json:"title_id"`
Params GetTitlesTitleIdParams Params GetTitleParams
} }
type GetTitlesTitleIdResponseObject interface { type GetTitleResponseObject interface {
VisitGetTitlesTitleIdResponse(w http.ResponseWriter) error VisitGetTitleResponse(w http.ResponseWriter) error
} }
type GetTitlesTitleId200JSONResponse Title type GetTitle200JSONResponse Title
func (response GetTitlesTitleId200JSONResponse) VisitGetTitlesTitleIdResponse(w http.ResponseWriter) error { func (response GetTitle200JSONResponse) VisitGetTitleResponse(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 GetTitlesTitleId204Response struct { type GetTitle204Response struct {
} }
func (response GetTitlesTitleId204Response) VisitGetTitlesTitleIdResponse(w http.ResponseWriter) error { func (response GetTitle204Response) VisitGetTitleResponse(w http.ResponseWriter) error {
w.WriteHeader(204) w.WriteHeader(204)
return nil return nil
} }
type GetTitlesTitleId400Response struct { type GetTitle400Response struct {
} }
func (response GetTitlesTitleId400Response) VisitGetTitlesTitleIdResponse(w http.ResponseWriter) error { func (response GetTitle400Response) VisitGetTitleResponse(w http.ResponseWriter) error {
w.WriteHeader(400) w.WriteHeader(400)
return nil return nil
} }
type GetTitlesTitleId404Response struct { type GetTitle404Response struct {
} }
func (response GetTitlesTitleId404Response) VisitGetTitlesTitleIdResponse(w http.ResponseWriter) error { func (response GetTitle404Response) VisitGetTitleResponse(w http.ResponseWriter) error {
w.WriteHeader(404) w.WriteHeader(404)
return nil return nil
} }
type GetTitlesTitleId500Response struct { type GetTitle500Response struct {
} }
func (response GetTitlesTitleId500Response) VisitGetTitlesTitleIdResponse(w http.ResponseWriter) error { func (response GetTitle500Response) VisitGetTitleResponse(w http.ResponseWriter) error {
w.WriteHeader(500) w.WriteHeader(500)
return nil return nil
} }
type GetUsersUserIdRequestObject struct { type GetUsersIdRequestObject struct {
UserId string `json:"user_id"` UserId string `json:"user_id"`
Params GetUsersUserIdParams Params GetUsersIdParams
} }
type GetUsersUserIdResponseObject interface { type GetUsersIdResponseObject interface {
VisitGetUsersUserIdResponse(w http.ResponseWriter) error VisitGetUsersIdResponse(w http.ResponseWriter) error
} }
type GetUsersUserId200JSONResponse User type GetUsersId200JSONResponse User
func (response GetUsersUserId200JSONResponse) VisitGetUsersUserIdResponse(w http.ResponseWriter) error { func (response GetUsersId200JSONResponse) VisitGetUsersIdResponse(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 GetUsersUserId400Response struct { type GetUsersId400Response struct {
} }
func (response GetUsersUserId400Response) VisitGetUsersUserIdResponse(w http.ResponseWriter) error { func (response GetUsersId400Response) VisitGetUsersIdResponse(w http.ResponseWriter) error {
w.WriteHeader(400) w.WriteHeader(400)
return nil return nil
} }
type GetUsersUserId404Response struct { type GetUsersId404Response struct {
} }
func (response GetUsersUserId404Response) VisitGetUsersUserIdResponse(w http.ResponseWriter) error { func (response GetUsersId404Response) VisitGetUsersIdResponse(w http.ResponseWriter) error {
w.WriteHeader(404) w.WriteHeader(404)
return nil return nil
} }
type GetUsersUserId500Response struct { type GetUsersId500Response struct {
} }
func (response GetUsersUserId500Response) VisitGetUsersUserIdResponse(w http.ResponseWriter) error { func (response GetUsersId500Response) VisitGetUsersIdResponse(w http.ResponseWriter) error {
w.WriteHeader(500) w.WriteHeader(500)
return nil return nil
} }
@ -1189,6 +969,7 @@ func (response UpdateUser500Response) VisitUpdateUserResponse(w http.ResponseWri
type DeleteUserTitleRequestObject struct { type DeleteUserTitleRequestObject struct {
UserId int64 `json:"user_id"` UserId int64 `json:"user_id"`
Params DeleteUserTitleParams
} }
type DeleteUserTitleResponseObject interface { type DeleteUserTitleResponseObject interface {
@ -1419,10 +1200,10 @@ type StrictServerInterface interface {
GetTitles(ctx context.Context, request GetTitlesRequestObject) (GetTitlesResponseObject, error) GetTitles(ctx context.Context, request GetTitlesRequestObject) (GetTitlesResponseObject, error)
// Get title description // Get title description
// (GET /titles/{title_id}) // (GET /titles/{title_id})
GetTitlesTitleId(ctx context.Context, request GetTitlesTitleIdRequestObject) (GetTitlesTitleIdResponseObject, error) GetTitle(ctx context.Context, request GetTitleRequestObject) (GetTitleResponseObject, error)
// Get user info // Get user info
// (GET /users/{user_id}) // (GET /users/{user_id})
GetUsersUserId(ctx context.Context, request GetUsersUserIdRequestObject) (GetUsersUserIdResponseObject, error) GetUsersId(ctx context.Context, request GetUsersIdRequestObject) (GetUsersIdResponseObject, error)
// Partially update a user account // Partially update a user account
// (PATCH /users/{user_id}) // (PATCH /users/{user_id})
UpdateUser(ctx context.Context, request UpdateUserRequestObject) (UpdateUserResponseObject, error) UpdateUser(ctx context.Context, request UpdateUserRequestObject) (UpdateUserResponseObject, error)
@ -1479,18 +1260,18 @@ func (sh *strictHandler) GetTitles(ctx *gin.Context, params GetTitlesParams) {
} }
} }
// GetTitlesTitleId operation middleware // GetTitle operation middleware
func (sh *strictHandler) GetTitlesTitleId(ctx *gin.Context, titleId int64, params GetTitlesTitleIdParams) { func (sh *strictHandler) GetTitle(ctx *gin.Context, titleId int64, params GetTitleParams) {
var request GetTitlesTitleIdRequestObject var request GetTitleRequestObject
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.GetTitlesTitleId(ctx, request.(GetTitlesTitleIdRequestObject)) return sh.ssi.GetTitle(ctx, request.(GetTitleRequestObject))
} }
for _, middleware := range sh.middlewares { for _, middleware := range sh.middlewares {
handler = middleware(handler, "GetTitlesTitleId") handler = middleware(handler, "GetTitle")
} }
response, err := handler(ctx, request) response, err := handler(ctx, request)
@ -1498,8 +1279,8 @@ func (sh *strictHandler) GetTitlesTitleId(ctx *gin.Context, titleId int64, param
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.(GetTitlesTitleIdResponseObject); ok { } else if validResponse, ok := response.(GetTitleResponseObject); ok {
if err := validResponse.VisitGetTitlesTitleIdResponse(ctx.Writer); err != nil { if err := validResponse.VisitGetTitleResponse(ctx.Writer); err != nil {
ctx.Error(err) ctx.Error(err)
} }
} else if response != nil { } else if response != nil {
@ -1507,18 +1288,18 @@ func (sh *strictHandler) GetTitlesTitleId(ctx *gin.Context, titleId int64, param
} }
} }
// GetUsersUserId operation middleware // GetUsersId operation middleware
func (sh *strictHandler) GetUsersUserId(ctx *gin.Context, userId string, params GetUsersUserIdParams) { func (sh *strictHandler) GetUsersId(ctx *gin.Context, userId string, params GetUsersIdParams) {
var request GetUsersUserIdRequestObject var request GetUsersIdRequestObject
request.UserId = userId request.UserId = userId
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.GetUsersUserId(ctx, request.(GetUsersUserIdRequestObject)) return sh.ssi.GetUsersId(ctx, request.(GetUsersIdRequestObject))
} }
for _, middleware := range sh.middlewares { for _, middleware := range sh.middlewares {
handler = middleware(handler, "GetUsersUserId") handler = middleware(handler, "GetUsersId")
} }
response, err := handler(ctx, request) response, err := handler(ctx, request)
@ -1526,8 +1307,8 @@ func (sh *strictHandler) GetUsersUserId(ctx *gin.Context, userId string, 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.(GetUsersUserIdResponseObject); ok { } else if validResponse, ok := response.(GetUsersIdResponseObject); ok {
if err := validResponse.VisitGetUsersUserIdResponse(ctx.Writer); err != nil { if err := validResponse.VisitGetUsersIdResponse(ctx.Writer); err != nil {
ctx.Error(err) ctx.Error(err)
} }
} else if response != nil { } else if response != nil {
@ -1571,10 +1352,11 @@ func (sh *strictHandler) UpdateUser(ctx *gin.Context, userId int64) {
} }
// DeleteUserTitle operation middleware // DeleteUserTitle operation middleware
func (sh *strictHandler) DeleteUserTitle(ctx *gin.Context, userId int64) { func (sh *strictHandler) DeleteUserTitle(ctx *gin.Context, userId int64, params DeleteUserTitleParams) {
var request DeleteUserTitleRequestObject var request DeleteUserTitleRequestObject
request.UserId = userId request.UserId = userId
request.Params = params
handler := func(ctx *gin.Context, request interface{}) (interface{}, error) { handler := func(ctx *gin.Context, request interface{}) (interface{}, error) {
return sh.ssi.DeleteUserTitle(ctx, request.(DeleteUserTitleRequestObject)) return sh.ssi.DeleteUserTitle(ctx, request.(DeleteUserTitleRequestObject))

View file

@ -202,7 +202,13 @@ delete:
type: integer type: integer
format: int64 format: int64
description: ID of the user to assign the title to description: ID of the user to assign the title to
example: 123 - in: query
name: title_id
required: true
schema:
type: integer
format: int64
responses: responses:
'200': '200':

View file

@ -132,25 +132,25 @@ func (s Server) GetTagsByTitleId(ctx context.Context, id int64) (oapi.Tags, erro
// return &oapi_studio, nil // return &oapi_studio, nil
// } // }
func (s Server) GetTitlesTitleId(ctx context.Context, request oapi.GetTitlesTitleIdRequestObject) (oapi.GetTitlesTitleIdResponseObject, error) { func (s Server) GetTitle(ctx context.Context, request oapi.GetTitleRequestObject) (oapi.GetTitleResponseObject, 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.GetTitlesTitleId204Response{}, nil return oapi.GetTitle204Response{}, nil
} }
log.Errorf("%v", err) log.Errorf("%v", err)
return oapi.GetTitlesTitleId500Response{}, nil return oapi.GetTitle500Response{}, nil
} }
oapi_title, err = s.mapTitle(sqlc_title) oapi_title, err = s.mapTitle(sqlc_title)
if err != nil { if err != nil {
log.Errorf("%v", err) log.Errorf("%v", err)
return oapi.GetTitlesTitleId500Response{}, nil return oapi.GetTitle500Response{}, nil
} }
return oapi.GetTitlesTitleId200JSONResponse(oapi_title), nil return oapi.GetTitle200JSONResponse(oapi_title), nil
} }
func (s Server) GetTitles(ctx context.Context, request oapi.GetTitlesRequestObject) (oapi.GetTitlesResponseObject, error) { func (s Server) GetTitles(ctx context.Context, request oapi.GetTitlesRequestObject) (oapi.GetTitlesResponseObject, error) {

View file

@ -16,6 +16,10 @@ import (
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
const (
pgErrDuplicateKey = "23505"
)
func mapUser(u sqlc.GetUserByIDRow) (oapi.User, error) { func mapUser(u sqlc.GetUserByIDRow) (oapi.User, error) {
i := oapi.Image{ i := oapi.Image{
Id: u.AvatarID, Id: u.AvatarID,
@ -37,24 +41,24 @@ func mapUser(u sqlc.GetUserByIDRow) (oapi.User, error) {
}, nil }, nil
} }
func (s Server) GetUsersUserId(ctx context.Context, req oapi.GetUsersUserIdRequestObject) (oapi.GetUsersUserIdResponseObject, error) { func (s Server) GetUsersId(ctx context.Context, req oapi.GetUsersIdRequestObject) (oapi.GetUsersIdResponseObject, error) {
userID, err := parseInt64(req.UserId) userID, err := parseInt64(req.UserId)
if err != nil { if err != nil {
return oapi.GetUsersUserId404Response{}, nil return oapi.GetUsersId404Response{}, nil
} }
_user, err := s.db.GetUserByID(context.TODO(), userID) _user, err := s.db.GetUserByID(context.TODO(), userID)
if err != nil { if err != nil {
if err == pgx.ErrNoRows { if err == pgx.ErrNoRows {
return oapi.GetUsersUserId404Response{}, nil return oapi.GetUsersId404Response{}, nil
} }
return nil, err return nil, err
} }
user, err := mapUser(_user) user, err := mapUser(_user)
if err != nil { if err != nil {
log.Errorf("%v", err) log.Errorf("%v", err)
return oapi.GetUsersUserId500Response{}, err return oapi.GetUsersId500Response{}, err
} }
return oapi.GetUsersUserId200JSONResponse(user), nil return oapi.GetUsersId200JSONResponse(user), nil
} }
func sqlDate2oapi(p_date pgtype.Timestamptz) *time.Time { func sqlDate2oapi(p_date pgtype.Timestamptz) *time.Time {
@ -369,7 +373,7 @@ func (s Server) AddUserTitle(ctx context.Context, request oapi.AddUserTitleReque
if errors.As(err, &pgErr) { if errors.As(err, &pgErr) {
// fmt.Println(pgErr.Message) // => syntax error at end of input // fmt.Println(pgErr.Message) // => syntax error at end of input
// fmt.Println(pgErr.Code) // => 42601 // fmt.Println(pgErr.Code) // => 42601
if pgErr.Code == "23505" { //duplicate key value if pgErr.Code == pgErrDuplicateKey { //duplicate key value
return oapi.AddUserTitle409Response{}, nil return oapi.AddUserTitle409Response{}, nil
} }
} else { } else {
@ -405,7 +409,19 @@ func (s Server) AddUserTitle(ctx context.Context, request oapi.AddUserTitleReque
// DeleteUserTitle implements oapi.StrictServerInterface. // DeleteUserTitle implements oapi.StrictServerInterface.
func (s Server) DeleteUserTitle(ctx context.Context, request oapi.DeleteUserTitleRequestObject) (oapi.DeleteUserTitleResponseObject, error) { func (s Server) DeleteUserTitle(ctx context.Context, request oapi.DeleteUserTitleRequestObject) (oapi.DeleteUserTitleResponseObject, error) {
panic("unimplemented") params := sqlc.DeleteUserTitleParams{
UserID: request.UserId,
TitleID: request.Params.TitleId,
}
_, err := s.db.DeleteUserTitle(ctx, params)
if err != nil {
if err == pgx.ErrNoRows {
return oapi.DeleteUserTitle404Response{}, nil
}
log.Errorf("%v", err)
return oapi.DeleteUserTitle500Response{}, nil
}
return oapi.DeleteUserTitle200Response{}, nil
} }
// UpdateUserTitle implements oapi.StrictServerInterface. // UpdateUserTitle implements oapi.StrictServerInterface.

View file

@ -57,17 +57,6 @@ VALUES (
sqlc.arg('tag_names')::jsonb) sqlc.arg('tag_names')::jsonb)
RETURNING id, tag_names; RETURNING id, tag_names;
-- -- name: ListUsers :many
-- SELECT user_id, avatar_id, passhash, mail, nickname, disp_name, user_desc, creation_date
-- FROM users
-- ORDER BY user_id
-- LIMIT $1 OFFSET $2;
-- -- name: CreateUser :one
-- INSERT INTO users (avatar_id, passhash, mail, nickname, disp_name, user_desc, creation_date)
-- VALUES ($1, $2, $3, $4, $5, $6, $7)
-- RETURNING user_id, avatar_id, nickname, disp_name, user_desc, creation_date;
-- name: UpdateUser :one -- name: UpdateUser :one
UPDATE users UPDATE users
SET SET
@ -78,10 +67,6 @@ SET
WHERE id = sqlc.arg('user_id') WHERE id = sqlc.arg('user_id')
RETURNING id, avatar_id, nickname, disp_name, user_desc, creation_date, mail; RETURNING id, avatar_id, nickname, disp_name, user_desc, creation_date, mail;
-- -- name: DeleteUser :exec
-- DELETE FROM users
-- WHERE user_id = $1;
-- name: GetTitleByID :one -- name: GetTitleByID :one
-- sqlc.struct: TitlesFull -- sqlc.struct: TitlesFull
SELECT SELECT
@ -378,78 +363,11 @@ ORDER BY
LIMIT COALESCE(sqlc.narg('limit')::int, 100); -- 100 is default limit LIMIT COALESCE(sqlc.narg('limit')::int, 100); -- 100 is default limit
-- -- name: ListTitles :many
-- SELECT title_id, title_names, studio_id, poster_id, signal_ids,
-- title_status, rating, rating_count, release_year, release_season,
-- season, episodes_aired, episodes_all, episodes_len
-- FROM titles
-- ORDER BY title_id
-- LIMIT $1 OFFSET $2;
-- -- name: UpdateTitle :one
-- UPDATE titles
-- SET
-- title_names = COALESCE(sqlc.narg('title_names'), title_names),
-- studio_id = COALESCE(sqlc.narg('studio_id'), studio_id),
-- poster_id = COALESCE(sqlc.narg('poster_id'), poster_id),
-- signal_ids = COALESCE(sqlc.narg('signal_ids'), signal_ids),
-- title_status = COALESCE(sqlc.narg('title_status'), title_status),
-- release_year = COALESCE(sqlc.narg('release_year'), release_year),
-- release_season = COALESCE(sqlc.narg('release_season'), release_season),
-- episodes_aired = COALESCE(sqlc.narg('episodes_aired'), episodes_aired),
-- episodes_all = COALESCE(sqlc.narg('episodes_all'), episodes_all),
-- episodes_len = COALESCE(sqlc.narg('episodes_len'), episodes_len)
-- WHERE title_id = sqlc.arg('title_id')
-- RETURNING *;
-- name: GetReviewByID :one -- name: GetReviewByID :one
SELECT * SELECT *
FROM reviews FROM reviews
WHERE review_id = sqlc.arg('review_id')::bigint; WHERE review_id = sqlc.arg('review_id')::bigint;
-- -- name: CreateReview :one
-- INSERT INTO reviews (user_id, title_id, image_ids, review_text, creation_date)
-- VALUES ($1, $2, $3, $4, $5)
-- RETURNING review_id, user_id, title_id, image_ids, review_text, creation_date;
-- -- name: UpdateReview :one
-- UPDATE reviews
-- SET
-- image_ids = COALESCE(sqlc.narg('image_ids'), image_ids),
-- review_text = COALESCE(sqlc.narg('review_text'), review_text)
-- WHERE review_id = sqlc.arg('review_id')
-- RETURNING *;
-- -- name: DeleteReview :exec
-- DELETE FROM reviews
-- WHERE review_id = $1;
-- -- name: ListReviewsByTitle :many
-- SELECT review_id, user_id, title_id, image_ids, review_text, creation_date
-- FROM reviews
-- WHERE title_id = $1
-- ORDER BY creation_date DESC
-- LIMIT $2 OFFSET $3;
-- -- name: ListReviewsByUser :many
-- SELECT review_id, user_id, title_id, image_ids, review_text, creation_date
-- FROM reviews
-- WHERE user_id = $1
-- ORDER BY creation_date DESC
-- LIMIT $2 OFFSET $3;
-- -- name: GetUserTitle :one
-- SELECT usertitle_id, user_id, title_id, status, rate, review_id
-- FROM usertitles
-- WHERE user_id = $1 AND title_id = $2;
-- -- name: ListUserTitles :many
-- SELECT usertitle_id, user_id, title_id, status, rate, review_id
-- FROM usertitles
-- WHERE user_id = $1
-- ORDER BY usertitle_id
-- LIMIT $2 OFFSET $3;
-- name: InsertUserTitle :one -- name: InsertUserTitle :one
INSERT INTO usertitles (user_id, title_id, status, rate, review_id) INSERT INTO usertitles (user_id, title_id, status, rate, review_id)
VALUES ( VALUES (
@ -471,3 +389,9 @@ WHERE
user_id = sqlc.arg('user_id') user_id = sqlc.arg('user_id')
AND title_id = sqlc.arg('title_id') AND title_id = sqlc.arg('title_id')
RETURNING *; RETURNING *;
-- name: DeleteUserTitle :one
DELETE FROM usertitles
WHERE user_id = sqlc.arg('user_id')
AND title_id = sqlc.arg('title_id')
RETURNING *;

View file

@ -29,6 +29,32 @@ func (q *Queries) CreateImage(ctx context.Context, arg CreateImageParams) (Image
return i, err return i, err
} }
const deleteUserTitle = `-- name: DeleteUserTitle :one
DELETE FROM usertitles
WHERE user_id = $1
AND title_id = $2
RETURNING user_id, title_id, status, rate, review_id, ctime
`
type DeleteUserTitleParams struct {
UserID int64 `json:"user_id"`
TitleID int64 `json:"title_id"`
}
func (q *Queries) DeleteUserTitle(ctx context.Context, arg DeleteUserTitleParams) (Usertitle, error) {
row := q.db.QueryRow(ctx, deleteUserTitle, arg.UserID, arg.TitleID)
var i Usertitle
err := row.Scan(
&i.UserID,
&i.TitleID,
&i.Status,
&i.Rate,
&i.ReviewID,
&i.Ctime,
)
return i, err
}
const getImageByID = `-- name: GetImageByID :one const getImageByID = `-- name: GetImageByID :one
SELECT id, storage_type, image_path SELECT id, storage_type, image_path
FROM images FROM images
@ -44,40 +70,12 @@ func (q *Queries) GetImageByID(ctx context.Context, illustID int64) (Image, erro
const getReviewByID = `-- name: GetReviewByID :one const getReviewByID = `-- name: GetReviewByID :one
SELECT id, data, rating, user_id, title_id, created_at SELECT id, data, rating, user_id, title_id, created_at
FROM reviews FROM reviews
WHERE review_id = $1::bigint WHERE review_id = $1::bigint
` `
// 100 is default limit // 100 is default limit
// -- name: ListTitles :many
// SELECT title_id, title_names, studio_id, poster_id, signal_ids,
//
// title_status, rating, rating_count, release_year, release_season,
// season, episodes_aired, episodes_all, episodes_len
//
// FROM titles
// ORDER BY title_id
// LIMIT $1 OFFSET $2;
// -- name: UpdateTitle :one
// UPDATE titles
// SET
//
// title_names = COALESCE(sqlc.narg('title_names'), title_names),
// studio_id = COALESCE(sqlc.narg('studio_id'), studio_id),
// poster_id = COALESCE(sqlc.narg('poster_id'), poster_id),
// signal_ids = COALESCE(sqlc.narg('signal_ids'), signal_ids),
// title_status = COALESCE(sqlc.narg('title_status'), title_status),
// release_year = COALESCE(sqlc.narg('release_year'), release_year),
// release_season = COALESCE(sqlc.narg('release_season'), release_season),
// episodes_aired = COALESCE(sqlc.narg('episodes_aired'), episodes_aired),
// episodes_all = COALESCE(sqlc.narg('episodes_all'), episodes_all),
// episodes_len = COALESCE(sqlc.narg('episodes_len'), episodes_len)
//
// WHERE title_id = sqlc.arg('title_id')
// RETURNING *;
func (q *Queries) GetReviewByID(ctx context.Context, reviewID int64) (Review, error) { func (q *Queries) GetReviewByID(ctx context.Context, reviewID int64) (Review, error) {
row := q.db.QueryRow(ctx, getReviewByID, reviewID) row := q.db.QueryRow(ctx, getReviewByID, reviewID)
var i Review var i Review
@ -111,7 +109,6 @@ func (q *Queries) GetStudioByID(ctx context.Context, studioID int64) (Studio, er
} }
const getTitleByID = `-- name: GetTitleByID :one const getTitleByID = `-- name: GetTitleByID :one
SELECT SELECT
t.id, t.title_names, t.studio_id, t.poster_id, t.title_status, t.rating, t.rating_count, t.release_year, t.release_season, t.season, t.episodes_aired, t.episodes_all, t.episodes_len, t.id, t.title_names, t.studio_id, t.poster_id, t.title_status, t.rating, t.rating_count, t.release_year, t.release_season, t.season, t.episodes_aired, t.episodes_all, t.episodes_len,
i.storage_type as title_storage_type, i.storage_type as title_storage_type,
@ -162,9 +159,6 @@ type GetTitleByIDRow struct {
StudioImagePath *string `json:"studio_image_path"` StudioImagePath *string `json:"studio_image_path"`
} }
// -- name: DeleteUser :exec
// DELETE FROM users
// WHERE user_id = $1;
// sqlc.struct: TitlesFull // sqlc.struct: TitlesFull
func (q *Queries) GetTitleByID(ctx context.Context, titleID int64) (GetTitleByIDRow, error) { func (q *Queries) GetTitleByID(ctx context.Context, titleID int64) (GetTitleByIDRow, error) {
row := q.db.QueryRow(ctx, getTitleByID, titleID) row := q.db.QueryRow(ctx, getTitleByID, titleID)
@ -330,13 +324,6 @@ func (q *Queries) InsertTitleTags(ctx context.Context, arg InsertTitleTagsParams
} }
const insertUserTitle = `-- name: InsertUserTitle :one const insertUserTitle = `-- name: InsertUserTitle :one
INSERT INTO usertitles (user_id, title_id, status, rate, review_id) INSERT INTO usertitles (user_id, title_id, status, rate, review_id)
VALUES ( VALUES (
$1::bigint, $1::bigint,
@ -356,46 +343,6 @@ type InsertUserTitleParams struct {
ReviewID *int64 `json:"review_id"` ReviewID *int64 `json:"review_id"`
} }
// -- name: CreateReview :one
// INSERT INTO reviews (user_id, title_id, image_ids, review_text, creation_date)
// VALUES ($1, $2, $3, $4, $5)
// RETURNING review_id, user_id, title_id, image_ids, review_text, creation_date;
// -- name: UpdateReview :one
// UPDATE reviews
// SET
//
// image_ids = COALESCE(sqlc.narg('image_ids'), image_ids),
// review_text = COALESCE(sqlc.narg('review_text'), review_text)
//
// WHERE review_id = sqlc.arg('review_id')
// RETURNING *;
// -- name: DeleteReview :exec
// DELETE FROM reviews
// WHERE review_id = $1;
//
// -- name: ListReviewsByTitle :many
//
// SELECT review_id, user_id, title_id, image_ids, review_text, creation_date
// FROM reviews
// WHERE title_id = $1
// ORDER BY creation_date DESC
// LIMIT $2 OFFSET $3;
// -- name: ListReviewsByUser :many
// SELECT review_id, user_id, title_id, image_ids, review_text, creation_date
// FROM reviews
// WHERE user_id = $1
// ORDER BY creation_date DESC
// LIMIT $2 OFFSET $3;
// -- name: GetUserTitle :one
// SELECT usertitle_id, user_id, title_id, status, rate, review_id
// FROM usertitles
// WHERE user_id = $1 AND title_id = $2;
// -- name: ListUserTitles :many
// SELECT usertitle_id, user_id, title_id, status, rate, review_id
// FROM usertitles
// WHERE user_id = $1
// ORDER BY usertitle_id
// LIMIT $2 OFFSET $3;
func (q *Queries) InsertUserTitle(ctx context.Context, arg InsertUserTitleParams) (Usertitle, error) { func (q *Queries) InsertUserTitle(ctx context.Context, arg InsertUserTitleParams) (Usertitle, error) {
row := q.db.QueryRow(ctx, insertUserTitle, row := q.db.QueryRow(ctx, insertUserTitle,
arg.UserID, arg.UserID,
@ -866,8 +813,6 @@ func (q *Queries) SearchUserTitles(ctx context.Context, arg SearchUserTitlesPara
} }
const updateUser = `-- name: UpdateUser :one const updateUser = `-- name: UpdateUser :one
UPDATE users UPDATE users
SET SET
avatar_id = COALESCE($1, avatar_id), avatar_id = COALESCE($1, avatar_id),
@ -896,15 +841,6 @@ type UpdateUserRow struct {
Mail *string `json:"mail"` Mail *string `json:"mail"`
} }
// -- name: ListUsers :many
// SELECT user_id, avatar_id, passhash, mail, nickname, disp_name, user_desc, creation_date
// FROM users
// ORDER BY user_id
// LIMIT $1 OFFSET $2;
// -- name: CreateUser :one
// INSERT INTO users (avatar_id, passhash, mail, nickname, disp_name, user_desc, creation_date)
// VALUES ($1, $2, $3, $4, $5, $6, $7)
// RETURNING user_id, avatar_id, nickname, disp_name, user_desc, creation_date;
func (q *Queries) UpdateUser(ctx context.Context, arg UpdateUserParams) (UpdateUserRow, error) { func (q *Queries) UpdateUser(ctx context.Context, arg UpdateUserParams) (UpdateUserRow, error) {
row := q.db.QueryRow(ctx, updateUser, row := q.db.QueryRow(ctx, updateUser,
arg.AvatarID, arg.AvatarID,