feat: first commit
This commit is contained in:
441
internal/api/user/handler/gen.go
Normal file
441
internal/api/user/handler/gen.go
Normal 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
|
||||
}
|
||||
3
internal/api/user/handler/generate.go
Normal file
3
internal/api/user/handler/generate.go
Normal file
@ -0,0 +1,3 @@
|
||||
package handler
|
||||
|
||||
//go:generate go tool oapi-codegen -config ../../../../api/user/cfg.yaml ../../../../api/user/user.yaml
|
||||
47
internal/api/user/handler/impl.go
Normal file
47
internal/api/user/handler/impl.go
Normal 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)
|
||||
|
||||
}
|
||||
4
internal/api/user/repository/base.go
Normal file
4
internal/api/user/repository/base.go
Normal file
@ -0,0 +1,4 @@
|
||||
package repository
|
||||
|
||||
type UserRepo interface {
|
||||
}
|
||||
13
internal/api/user/service/user_service.go
Normal file
13
internal/api/user/service/user_service.go
Normal 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}
|
||||
}
|
||||
Reference in New Issue
Block a user