feat: first commit

This commit is contained in:
2025-07-25 01:40:34 +03:00
parent 791042057f
commit 96437cafb2
20 changed files with 1698 additions and 22 deletions

View File

@ -0,0 +1,441 @@
// 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"
)
// Todo defines model for Todo.
type Todo struct {
Completed bool `json:"completed"`
Description *string `json:"description,omitempty"`
Id string `json:"id"`
Title string `json:"title"`
}
// TodoCreate defines model for TodoCreate.
type TodoCreate struct {
Description *string `json:"description,omitempty"`
Title string `json:"title"`
}
// TodoUpdate defines model for TodoUpdate.
type TodoUpdate struct {
Completed *bool `json:"completed,omitempty"`
Description *string `json:"description,omitempty"`
Title *string `json:"title,omitempty"`
}
// PostTodosJSONRequestBody defines body for PostTodos for application/json ContentType.
type PostTodosJSONRequestBody = TodoCreate
// PutTodosTodoIdJSONRequestBody defines body for PutTodosTodoId for application/json ContentType.
type PutTodosTodoIdJSONRequestBody = TodoUpdate
// ServerInterface represents all server handlers.
type ServerInterface interface {
// Get all todos
// (GET /todos)
GetTodos(c *fiber.Ctx) error
// Create a new todo
// (POST /todos)
PostTodos(c *fiber.Ctx) error
// Delete a todo by ID
// (DELETE /todos/{todoId})
DeleteTodosTodoId(c *fiber.Ctx, todoId string) error
// Get a todo by ID
// (GET /todos/{todoId})
GetTodosTodoId(c *fiber.Ctx, todoId string) error
// Update a todo by ID
// (PUT /todos/{todoId})
PutTodosTodoId(c *fiber.Ctx, todoId string) error
}
// ServerInterfaceWrapper converts contexts to parameters.
type ServerInterfaceWrapper struct {
Handler ServerInterface
}
type MiddlewareFunc fiber.Handler
// GetTodos operation middleware
func (siw *ServerInterfaceWrapper) GetTodos(c *fiber.Ctx) error {
return siw.Handler.GetTodos(c)
}
// PostTodos operation middleware
func (siw *ServerInterfaceWrapper) PostTodos(c *fiber.Ctx) error {
return siw.Handler.PostTodos(c)
}
// DeleteTodosTodoId operation middleware
func (siw *ServerInterfaceWrapper) DeleteTodosTodoId(c *fiber.Ctx) error {
var err error
// ------------- Path parameter "todoId" -------------
var todoId string
err = runtime.BindStyledParameterWithOptions("simple", "todoId", c.Params("todoId"), &todoId, runtime.BindStyledParameterOptions{Explode: false, Required: true})
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter todoId: %w", err).Error())
}
return siw.Handler.DeleteTodosTodoId(c, todoId)
}
// GetTodosTodoId operation middleware
func (siw *ServerInterfaceWrapper) GetTodosTodoId(c *fiber.Ctx) error {
var err error
// ------------- Path parameter "todoId" -------------
var todoId string
err = runtime.BindStyledParameterWithOptions("simple", "todoId", c.Params("todoId"), &todoId, runtime.BindStyledParameterOptions{Explode: false, Required: true})
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter todoId: %w", err).Error())
}
return siw.Handler.GetTodosTodoId(c, todoId)
}
// PutTodosTodoId operation middleware
func (siw *ServerInterfaceWrapper) PutTodosTodoId(c *fiber.Ctx) error {
var err error
// ------------- Path parameter "todoId" -------------
var todoId string
err = runtime.BindStyledParameterWithOptions("simple", "todoId", c.Params("todoId"), &todoId, runtime.BindStyledParameterOptions{Explode: false, Required: true})
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, fmt.Errorf("Invalid format for parameter todoId: %w", err).Error())
}
return siw.Handler.PutTodosTodoId(c, todoId)
}
// 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.Get(options.BaseURL+"/todos", wrapper.GetTodos)
router.Post(options.BaseURL+"/todos", wrapper.PostTodos)
router.Delete(options.BaseURL+"/todos/:todoId", wrapper.DeleteTodosTodoId)
router.Get(options.BaseURL+"/todos/:todoId", wrapper.GetTodosTodoId)
router.Put(options.BaseURL+"/todos/:todoId", wrapper.PutTodosTodoId)
}
type GetTodosRequestObject struct {
}
type GetTodosResponseObject interface {
VisitGetTodosResponse(ctx *fiber.Ctx) error
}
type GetTodos200JSONResponse []Todo
func (response GetTodos200JSONResponse) VisitGetTodosResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/json")
ctx.Status(200)
return ctx.JSON(&response)
}
type PostTodosRequestObject struct {
Body *PostTodosJSONRequestBody
}
type PostTodosResponseObject interface {
VisitPostTodosResponse(ctx *fiber.Ctx) error
}
type PostTodos201JSONResponse Todo
func (response PostTodos201JSONResponse) VisitPostTodosResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/json")
ctx.Status(201)
return ctx.JSON(&response)
}
type DeleteTodosTodoIdRequestObject struct {
TodoId string `json:"todoId"`
}
type DeleteTodosTodoIdResponseObject interface {
VisitDeleteTodosTodoIdResponse(ctx *fiber.Ctx) error
}
type DeleteTodosTodoId204Response struct {
}
func (response DeleteTodosTodoId204Response) VisitDeleteTodosTodoIdResponse(ctx *fiber.Ctx) error {
ctx.Status(204)
return nil
}
type DeleteTodosTodoId404Response struct {
}
func (response DeleteTodosTodoId404Response) VisitDeleteTodosTodoIdResponse(ctx *fiber.Ctx) error {
ctx.Status(404)
return nil
}
type GetTodosTodoIdRequestObject struct {
TodoId string `json:"todoId"`
}
type GetTodosTodoIdResponseObject interface {
VisitGetTodosTodoIdResponse(ctx *fiber.Ctx) error
}
type GetTodosTodoId200JSONResponse Todo
func (response GetTodosTodoId200JSONResponse) VisitGetTodosTodoIdResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/json")
ctx.Status(200)
return ctx.JSON(&response)
}
type GetTodosTodoId404Response struct {
}
func (response GetTodosTodoId404Response) VisitGetTodosTodoIdResponse(ctx *fiber.Ctx) error {
ctx.Status(404)
return nil
}
type PutTodosTodoIdRequestObject struct {
TodoId string `json:"todoId"`
Body *PutTodosTodoIdJSONRequestBody
}
type PutTodosTodoIdResponseObject interface {
VisitPutTodosTodoIdResponse(ctx *fiber.Ctx) error
}
type PutTodosTodoId200JSONResponse Todo
func (response PutTodosTodoId200JSONResponse) VisitPutTodosTodoIdResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/json")
ctx.Status(200)
return ctx.JSON(&response)
}
type PutTodosTodoId404Response struct {
}
func (response PutTodosTodoId404Response) VisitPutTodosTodoIdResponse(ctx *fiber.Ctx) error {
ctx.Status(404)
return nil
}
// StrictServerInterface represents all server handlers.
type StrictServerInterface interface {
// Get all todos
// (GET /todos)
GetTodos(ctx context.Context, request GetTodosRequestObject) (GetTodosResponseObject, error)
// Create a new todo
// (POST /todos)
PostTodos(ctx context.Context, request PostTodosRequestObject) (PostTodosResponseObject, error)
// Delete a todo by ID
// (DELETE /todos/{todoId})
DeleteTodosTodoId(ctx context.Context, request DeleteTodosTodoIdRequestObject) (DeleteTodosTodoIdResponseObject, error)
// Get a todo by ID
// (GET /todos/{todoId})
GetTodosTodoId(ctx context.Context, request GetTodosTodoIdRequestObject) (GetTodosTodoIdResponseObject, error)
// Update a todo by ID
// (PUT /todos/{todoId})
PutTodosTodoId(ctx context.Context, request PutTodosTodoIdRequestObject) (PutTodosTodoIdResponseObject, 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
}
// GetTodos operation middleware
func (sh *strictHandler) GetTodos(ctx *fiber.Ctx) error {
var request GetTodosRequestObject
handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) {
return sh.ssi.GetTodos(ctx.UserContext(), request.(GetTodosRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "GetTodos")
}
response, err := handler(ctx, request)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if validResponse, ok := response.(GetTodosResponseObject); ok {
if err := validResponse.VisitGetTodosResponse(ctx); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
} else if response != nil {
return fmt.Errorf("unexpected response type: %T", response)
}
return nil
}
// PostTodos operation middleware
func (sh *strictHandler) PostTodos(ctx *fiber.Ctx) error {
var request PostTodosRequestObject
var body PostTodosJSONRequestBody
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.PostTodos(ctx.UserContext(), request.(PostTodosRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "PostTodos")
}
response, err := handler(ctx, request)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if validResponse, ok := response.(PostTodosResponseObject); ok {
if err := validResponse.VisitPostTodosResponse(ctx); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
} else if response != nil {
return fmt.Errorf("unexpected response type: %T", response)
}
return nil
}
// DeleteTodosTodoId operation middleware
func (sh *strictHandler) DeleteTodosTodoId(ctx *fiber.Ctx, todoId string) error {
var request DeleteTodosTodoIdRequestObject
request.TodoId = todoId
handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) {
return sh.ssi.DeleteTodosTodoId(ctx.UserContext(), request.(DeleteTodosTodoIdRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "DeleteTodosTodoId")
}
response, err := handler(ctx, request)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if validResponse, ok := response.(DeleteTodosTodoIdResponseObject); ok {
if err := validResponse.VisitDeleteTodosTodoIdResponse(ctx); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
} else if response != nil {
return fmt.Errorf("unexpected response type: %T", response)
}
return nil
}
// GetTodosTodoId operation middleware
func (sh *strictHandler) GetTodosTodoId(ctx *fiber.Ctx, todoId string) error {
var request GetTodosTodoIdRequestObject
request.TodoId = todoId
handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) {
return sh.ssi.GetTodosTodoId(ctx.UserContext(), request.(GetTodosTodoIdRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "GetTodosTodoId")
}
response, err := handler(ctx, request)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if validResponse, ok := response.(GetTodosTodoIdResponseObject); ok {
if err := validResponse.VisitGetTodosTodoIdResponse(ctx); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
} else if response != nil {
return fmt.Errorf("unexpected response type: %T", response)
}
return nil
}
// PutTodosTodoId operation middleware
func (sh *strictHandler) PutTodosTodoId(ctx *fiber.Ctx, todoId string) error {
var request PutTodosTodoIdRequestObject
request.TodoId = todoId
var body PutTodosTodoIdJSONRequestBody
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.PutTodosTodoId(ctx.UserContext(), request.(PutTodosTodoIdRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "PutTodosTodoId")
}
response, err := handler(ctx, request)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if validResponse, ok := response.(PutTodosTodoIdResponseObject); ok {
if err := validResponse.VisitPutTodosTodoIdResponse(ctx); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
} else if response != nil {
return fmt.Errorf("unexpected response type: %T", response)
}
return nil
}

View File

@ -0,0 +1,3 @@
package handler
//go:generate go tool oapi-codegen -config ../../../../api/todo/cfg.yaml ../../../../api/todo/todo.yaml

View File

@ -0,0 +1,46 @@
package handler
import (
"context"
"github.com/gofiber/fiber/v2"
)
type TodoHandler struct {
}
var _ StrictServerInterface = (*TodoHandler)(nil)
func (t TodoHandler) GetTodos(ctx context.Context, request GetTodosRequestObject) (GetTodosResponseObject, error) {
//TODO implement me
panic("implement me")
}
func (t TodoHandler) PostTodos(ctx context.Context, request PostTodosRequestObject) (PostTodosResponseObject, error) {
//TODO implement me
panic("implement me")
}
func (t TodoHandler) DeleteTodosTodoId(ctx context.Context, request DeleteTodosTodoIdRequestObject) (DeleteTodosTodoIdResponseObject, error) {
//TODO implement me
panic("implement me")
}
func (t TodoHandler) GetTodosTodoId(ctx context.Context, request GetTodosTodoIdRequestObject) (GetTodosTodoIdResponseObject, error) {
//TODO implement me
panic("implement me")
}
func (t TodoHandler) PutTodosTodoId(ctx context.Context, request PutTodosTodoIdRequestObject) (PutTodosTodoIdResponseObject, error) {
//TODO implement me
panic("implement me")
}
func NewTodoHandler() *TodoHandler {
return &TodoHandler{}
}
func RegisterApp(router fiber.Router) {
server := NewStrictHandler(NewTodoHandler(), nil)
RegisterHandlers(router, server)
}

View File

@ -0,0 +1,441 @@
// 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"
openapi_types "github.com/oapi-codegen/runtime/types"
)
// User defines model for User.
type User struct {
Email openapi_types.Email `json:"email"`
Id string `json:"id"`
Username string `json:"username"`
}
// UserCreate defines model for UserCreate.
type UserCreate struct {
Email openapi_types.Email `json:"email"`
Password string `json:"password"`
Username string `json:"username"`
}
// UserUpdate defines model for UserUpdate.
type UserUpdate struct {
Email openapi_types.Email `json:"email"`
Username string `json:"username"`
}
// PostUsersJSONRequestBody defines body for PostUsers for application/json ContentType.
type PostUsersJSONRequestBody = UserCreate
// PutUsersUserIdJSONRequestBody defines body for PutUsersUserId for application/json ContentType.
type PutUsersUserIdJSONRequestBody = UserUpdate
// ServerInterface represents all server handlers.
type ServerInterface interface {
// Get all users
// (GET /users)
GetUsers(c *fiber.Ctx) error
// Create a new user
// (POST /users)
PostUsers(c *fiber.Ctx) error
// Delete a user by ID
// (DELETE /users/{userId})
DeleteUsersUserId(c *fiber.Ctx, userId string) error
// Get a user by ID
// (GET /users/{userId})
GetUsersUserId(c *fiber.Ctx, userId string) error
// Update a user by ID
// (PUT /users/{userId})
PutUsersUserId(c *fiber.Ctx, userId string) error
}
// ServerInterfaceWrapper converts contexts to parameters.
type ServerInterfaceWrapper struct {
Handler ServerInterface
}
type MiddlewareFunc fiber.Handler
// GetUsers operation middleware
func (siw *ServerInterfaceWrapper) GetUsers(c *fiber.Ctx) error {
return siw.Handler.GetUsers(c)
}
// PostUsers operation middleware
func (siw *ServerInterfaceWrapper) PostUsers(c *fiber.Ctx) error {
return siw.Handler.PostUsers(c)
}
// DeleteUsersUserId operation middleware
func (siw *ServerInterfaceWrapper) DeleteUsersUserId(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.DeleteUsersUserId(c, userId)
}
// GetUsersUserId operation middleware
func (siw *ServerInterfaceWrapper) GetUsersUserId(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.GetUsersUserId(c, userId)
}
// PutUsersUserId operation middleware
func (siw *ServerInterfaceWrapper) PutUsersUserId(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.PutUsersUserId(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.Get(options.BaseURL+"/users", wrapper.GetUsers)
router.Post(options.BaseURL+"/users", wrapper.PostUsers)
router.Delete(options.BaseURL+"/users/:userId", wrapper.DeleteUsersUserId)
router.Get(options.BaseURL+"/users/:userId", wrapper.GetUsersUserId)
router.Put(options.BaseURL+"/users/:userId", wrapper.PutUsersUserId)
}
type GetUsersRequestObject struct {
}
type GetUsersResponseObject interface {
VisitGetUsersResponse(ctx *fiber.Ctx) error
}
type GetUsers200JSONResponse []User
func (response GetUsers200JSONResponse) VisitGetUsersResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/json")
ctx.Status(200)
return ctx.JSON(&response)
}
type PostUsersRequestObject struct {
Body *PostUsersJSONRequestBody
}
type PostUsersResponseObject interface {
VisitPostUsersResponse(ctx *fiber.Ctx) error
}
type PostUsers201JSONResponse User
func (response PostUsers201JSONResponse) VisitPostUsersResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/json")
ctx.Status(201)
return ctx.JSON(&response)
}
type DeleteUsersUserIdRequestObject struct {
UserId string `json:"userId"`
}
type DeleteUsersUserIdResponseObject interface {
VisitDeleteUsersUserIdResponse(ctx *fiber.Ctx) error
}
type DeleteUsersUserId204Response struct {
}
func (response DeleteUsersUserId204Response) VisitDeleteUsersUserIdResponse(ctx *fiber.Ctx) error {
ctx.Status(204)
return nil
}
type DeleteUsersUserId404Response struct {
}
func (response DeleteUsersUserId404Response) VisitDeleteUsersUserIdResponse(ctx *fiber.Ctx) error {
ctx.Status(404)
return nil
}
type GetUsersUserIdRequestObject struct {
UserId string `json:"userId"`
}
type GetUsersUserIdResponseObject interface {
VisitGetUsersUserIdResponse(ctx *fiber.Ctx) error
}
type GetUsersUserId200JSONResponse User
func (response GetUsersUserId200JSONResponse) VisitGetUsersUserIdResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/json")
ctx.Status(200)
return ctx.JSON(&response)
}
type GetUsersUserId404Response struct {
}
func (response GetUsersUserId404Response) VisitGetUsersUserIdResponse(ctx *fiber.Ctx) error {
ctx.Status(404)
return nil
}
type PutUsersUserIdRequestObject struct {
UserId string `json:"userId"`
Body *PutUsersUserIdJSONRequestBody
}
type PutUsersUserIdResponseObject interface {
VisitPutUsersUserIdResponse(ctx *fiber.Ctx) error
}
type PutUsersUserId200JSONResponse User
func (response PutUsersUserId200JSONResponse) VisitPutUsersUserIdResponse(ctx *fiber.Ctx) error {
ctx.Response().Header.Set("Content-Type", "application/json")
ctx.Status(200)
return ctx.JSON(&response)
}
type PutUsersUserId404Response struct {
}
func (response PutUsersUserId404Response) VisitPutUsersUserIdResponse(ctx *fiber.Ctx) error {
ctx.Status(404)
return nil
}
// StrictServerInterface represents all server handlers.
type StrictServerInterface interface {
// Get all users
// (GET /users)
GetUsers(ctx context.Context, request GetUsersRequestObject) (GetUsersResponseObject, error)
// Create a new user
// (POST /users)
PostUsers(ctx context.Context, request PostUsersRequestObject) (PostUsersResponseObject, error)
// Delete a user by ID
// (DELETE /users/{userId})
DeleteUsersUserId(ctx context.Context, request DeleteUsersUserIdRequestObject) (DeleteUsersUserIdResponseObject, error)
// Get a user by ID
// (GET /users/{userId})
GetUsersUserId(ctx context.Context, request GetUsersUserIdRequestObject) (GetUsersUserIdResponseObject, error)
// Update a user by ID
// (PUT /users/{userId})
PutUsersUserId(ctx context.Context, request PutUsersUserIdRequestObject) (PutUsersUserIdResponseObject, 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
}
// GetUsers operation middleware
func (sh *strictHandler) GetUsers(ctx *fiber.Ctx) error {
var request GetUsersRequestObject
handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) {
return sh.ssi.GetUsers(ctx.UserContext(), request.(GetUsersRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "GetUsers")
}
response, err := handler(ctx, request)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if validResponse, ok := response.(GetUsersResponseObject); ok {
if err := validResponse.VisitGetUsersResponse(ctx); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
} else if response != nil {
return fmt.Errorf("unexpected response type: %T", response)
}
return nil
}
// PostUsers operation middleware
func (sh *strictHandler) PostUsers(ctx *fiber.Ctx) error {
var request PostUsersRequestObject
var body PostUsersJSONRequestBody
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.PostUsers(ctx.UserContext(), request.(PostUsersRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "PostUsers")
}
response, err := handler(ctx, request)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if validResponse, ok := response.(PostUsersResponseObject); ok {
if err := validResponse.VisitPostUsersResponse(ctx); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
} else if response != nil {
return fmt.Errorf("unexpected response type: %T", response)
}
return nil
}
// DeleteUsersUserId operation middleware
func (sh *strictHandler) DeleteUsersUserId(ctx *fiber.Ctx, userId string) error {
var request DeleteUsersUserIdRequestObject
request.UserId = userId
handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) {
return sh.ssi.DeleteUsersUserId(ctx.UserContext(), request.(DeleteUsersUserIdRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "DeleteUsersUserId")
}
response, err := handler(ctx, request)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if validResponse, ok := response.(DeleteUsersUserIdResponseObject); ok {
if err := validResponse.VisitDeleteUsersUserIdResponse(ctx); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
} else if response != nil {
return fmt.Errorf("unexpected response type: %T", response)
}
return nil
}
// GetUsersUserId operation middleware
func (sh *strictHandler) GetUsersUserId(ctx *fiber.Ctx, userId string) error {
var request GetUsersUserIdRequestObject
request.UserId = userId
handler := func(ctx *fiber.Ctx, request interface{}) (interface{}, error) {
return sh.ssi.GetUsersUserId(ctx.UserContext(), request.(GetUsersUserIdRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "GetUsersUserId")
}
response, err := handler(ctx, request)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if validResponse, ok := response.(GetUsersUserIdResponseObject); ok {
if err := validResponse.VisitGetUsersUserIdResponse(ctx); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
} else if response != nil {
return fmt.Errorf("unexpected response type: %T", response)
}
return nil
}
// PutUsersUserId operation middleware
func (sh *strictHandler) PutUsersUserId(ctx *fiber.Ctx, userId string) error {
var request PutUsersUserIdRequestObject
request.UserId = userId
var body PutUsersUserIdJSONRequestBody
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.PutUsersUserId(ctx.UserContext(), request.(PutUsersUserIdRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "PutUsersUserId")
}
response, err := handler(ctx, request)
if err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
} else if validResponse, ok := response.(PutUsersUserIdResponseObject); ok {
if err := validResponse.VisitPutUsersUserIdResponse(ctx); err != nil {
return fiber.NewError(fiber.StatusBadRequest, err.Error())
}
} else if response != nil {
return fmt.Errorf("unexpected response type: %T", response)
}
return nil
}

View File

@ -0,0 +1,3 @@
package handler
//go:generate go tool oapi-codegen -config ../../../../api/user/cfg.yaml ../../../../api/user/user.yaml

View File

@ -0,0 +1,47 @@
package handler
import (
"context"
"github.com/gofiber/fiber/v2"
)
type UserHandler struct {
}
var _ StrictServerInterface = (*UserHandler)(nil)
func (u UserHandler) GetUsers(ctx context.Context, request GetUsersRequestObject) (GetUsersResponseObject, error) {
var response = make([]User, 0)
return GetUsers200JSONResponse(response), nil
}
func (u UserHandler) PostUsers(ctx context.Context, request PostUsersRequestObject) (PostUsersResponseObject, error) {
//TODO implement me
panic("implement me")
}
func (u UserHandler) DeleteUsersUserId(ctx context.Context, request DeleteUsersUserIdRequestObject) (DeleteUsersUserIdResponseObject, error) {
//TODO implement me
panic("implement me")
}
func (u UserHandler) GetUsersUserId(ctx context.Context, request GetUsersUserIdRequestObject) (GetUsersUserIdResponseObject, error) {
//TODO implement me
panic("implement me")
}
func (u UserHandler) PutUsersUserId(ctx context.Context, request PutUsersUserIdRequestObject) (PutUsersUserIdResponseObject, error) {
//TODO implement me
panic("implement me")
}
func NewUserHandler() *UserHandler {
return &UserHandler{}
}
func RegisterApp(router fiber.Router) {
server := NewStrictHandler(NewUserHandler(), nil)
RegisterHandlers(router, server)
}

View File

@ -0,0 +1,4 @@
package repository
type UserRepo interface {
}

View File

@ -0,0 +1,13 @@
package service
import (
"git.logidex.ru/fakz9/logidex-id/internal/api/user/repository"
)
type UserService struct {
repo *repository.UserRepo
}
func NewUserService(repo *repository.UserRepo) *UserService {
return &UserService{repo: repo}
}