221 lines
6.3 KiB
Go
221 lines
6.3 KiB
Go
// Package handler provides primitives to interact with the openapi HTTP API.
|
|
//
|
|
// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.5.0 DO NOT EDIT.
|
|
package handler
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/oapi-codegen/runtime"
|
|
)
|
|
|
|
// User defines model for User.
|
|
type User struct {
|
|
PhoneNumber string `json:"phone_number"`
|
|
Uuid string `json:"uuid"`
|
|
}
|
|
|
|
// UserCreate defines model for UserCreate.
|
|
type UserCreate struct {
|
|
PhoneNumber string `json:"phone_number"`
|
|
}
|
|
|
|
// CreateUserJSONRequestBody defines body for CreateUser for application/json ContentType.
|
|
type CreateUserJSONRequestBody = UserCreate
|
|
|
|
// ServerInterface represents all server handlers.
|
|
type ServerInterface interface {
|
|
// Create a new user with phone number
|
|
// (POST /users)
|
|
CreateUser(c *fiber.Ctx) error
|
|
// Get a user by ID
|
|
// (GET /users/{userId})
|
|
GetUserById(c *fiber.Ctx, userId string) error
|
|
}
|
|
|
|
// ServerInterfaceWrapper converts contexts to parameters.
|
|
type ServerInterfaceWrapper struct {
|
|
Handler ServerInterface
|
|
}
|
|
|
|
type MiddlewareFunc fiber.Handler
|
|
|
|
// CreateUser operation middleware
|
|
func (siw *ServerInterfaceWrapper) CreateUser(c *fiber.Ctx) error {
|
|
|
|
return siw.Handler.CreateUser(c)
|
|
}
|
|
|
|
// GetUserById operation middleware
|
|
func (siw *ServerInterfaceWrapper) GetUserById(c *fiber.Ctx) error {
|
|
|
|
var err error
|
|
|
|
// ------------- Path parameter "userId" -------------
|
|
var userId string
|
|
|
|
err = runtime.BindStyledParameterWithOptions("simple", "userId", c.Params("userId"), &userId, runtime.BindStyledParameterOptions{Explode: false, Required: true})
|
|
if err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter userId: %w", err).Error())
|
|
}
|
|
|
|
return siw.Handler.GetUserById(c, userId)
|
|
}
|
|
|
|
// FiberServerOptions provides options for the Fiber server.
|
|
type FiberServerOptions struct {
|
|
BaseURL string
|
|
Middlewares []MiddlewareFunc
|
|
}
|
|
|
|
// RegisterHandlers creates http.Handler with routing matching OpenAPI spec.
|
|
func RegisterHandlers(router fiber.Router, si ServerInterface) {
|
|
RegisterHandlersWithOptions(router, si, FiberServerOptions{})
|
|
}
|
|
|
|
// RegisterHandlersWithOptions creates http.Handler with additional options
|
|
func RegisterHandlersWithOptions(router fiber.Router, si ServerInterface, options FiberServerOptions) {
|
|
wrapper := ServerInterfaceWrapper{
|
|
Handler: si,
|
|
}
|
|
|
|
for _, m := range options.Middlewares {
|
|
router.Use(fiber.Handler(m))
|
|
}
|
|
|
|
router.Post(options.BaseURL+"/users", wrapper.CreateUser)
|
|
|
|
router.Get(options.BaseURL+"/users/:userId", wrapper.GetUserById)
|
|
|
|
}
|
|
|
|
type CreateUserRequestObject struct {
|
|
Body *CreateUserJSONRequestBody
|
|
}
|
|
|
|
type CreateUserResponseObject interface {
|
|
VisitCreateUserResponse(ctx *fiber.Ctx) error
|
|
}
|
|
|
|
type CreateUser200JSONResponse User
|
|
|
|
func (response CreateUser200JSONResponse) VisitCreateUserResponse(ctx *fiber.Ctx) error {
|
|
ctx.Response().Header.Set("Content-Type", "application/json")
|
|
ctx.Status(200)
|
|
|
|
return ctx.JSON(&response)
|
|
}
|
|
|
|
type GetUserByIdRequestObject struct {
|
|
UserId string `json:"userId"`
|
|
}
|
|
|
|
type GetUserByIdResponseObject interface {
|
|
VisitGetUserByIdResponse(ctx *fiber.Ctx) error
|
|
}
|
|
|
|
type GetUserById200JSONResponse struct {
|
|
User User `json:"user"`
|
|
}
|
|
|
|
func (response GetUserById200JSONResponse) VisitGetUserByIdResponse(ctx *fiber.Ctx) error {
|
|
ctx.Response().Header.Set("Content-Type", "application/json")
|
|
ctx.Status(200)
|
|
|
|
return ctx.JSON(&response)
|
|
}
|
|
|
|
type GetUserById404JSONResponse struct {
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
func (response GetUserById404JSONResponse) VisitGetUserByIdResponse(ctx *fiber.Ctx) error {
|
|
ctx.Response().Header.Set("Content-Type", "application/json")
|
|
ctx.Status(404)
|
|
|
|
return ctx.JSON(&response)
|
|
}
|
|
|
|
// StrictServerInterface represents all server handlers.
|
|
type StrictServerInterface interface {
|
|
// Create a new user with phone number
|
|
// (POST /users)
|
|
CreateUser(ctx context.Context, request CreateUserRequestObject) (CreateUserResponseObject, error)
|
|
// Get a user by ID
|
|
// (GET /users/{userId})
|
|
GetUserById(ctx context.Context, request GetUserByIdRequestObject) (GetUserByIdResponseObject, error)
|
|
}
|
|
|
|
type StrictHandlerFunc func(ctx *fiber.Ctx, args interface{}) (interface{}, error)
|
|
|
|
type StrictMiddlewareFunc func(f StrictHandlerFunc, operationID string) StrictHandlerFunc
|
|
|
|
func NewStrictHandler(ssi StrictServerInterface, middlewares []StrictMiddlewareFunc) ServerInterface {
|
|
return &strictHandler{ssi: ssi, middlewares: middlewares}
|
|
}
|
|
|
|
type strictHandler struct {
|
|
ssi StrictServerInterface
|
|
middlewares []StrictMiddlewareFunc
|
|
}
|
|
|
|
// CreateUser operation middleware
|
|
func (sh *strictHandler) CreateUser(ctx *fiber.Ctx) error {
|
|
var request CreateUserRequestObject
|
|
|
|
var body CreateUserJSONRequestBody
|
|
if err := ctx.BodyParser(&body); err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
}
|
|
request.Body = &body
|
|
|
|
handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) {
|
|
return sh.ssi.CreateUser(ctx.UserContext(), request.(CreateUserRequestObject))
|
|
}
|
|
for _, middleware := range sh.middlewares {
|
|
handler = middleware(handler, "CreateUser")
|
|
}
|
|
|
|
response, err := handler(ctx, request)
|
|
|
|
if err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
} else if validResponse, ok := response.(CreateUserResponseObject); ok {
|
|
if err := validResponse.VisitCreateUserResponse(ctx); err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
}
|
|
} else if response != nil {
|
|
return fmt.Errorf("unexpected response type: %T", response)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetUserById operation middleware
|
|
func (sh *strictHandler) GetUserById(ctx *fiber.Ctx, userId string) error {
|
|
var request GetUserByIdRequestObject
|
|
|
|
request.UserId = userId
|
|
|
|
handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) {
|
|
return sh.ssi.GetUserById(ctx.UserContext(), request.(GetUserByIdRequestObject))
|
|
}
|
|
for _, middleware := range sh.middlewares {
|
|
handler = middleware(handler, "GetUserById")
|
|
}
|
|
|
|
response, err := handler(ctx, request)
|
|
|
|
if err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
} else if validResponse, ok := response.(GetUserByIdResponseObject); ok {
|
|
if err := validResponse.VisitGetUserByIdResponse(ctx); err != nil {
|
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
|
}
|
|
} else if response != nil {
|
|
return fmt.Errorf("unexpected response type: %T", response)
|
|
}
|
|
return nil
|
|
}
|