after fork
This commit is contained in:
86
examples/api.go
Normal file
86
examples/api.go
Normal file
@ -0,0 +1,86 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"mime/multipart"
|
||||
|
||||
"github.com/google/uuid"
|
||||
|
||||
"git.ma-al.com/goc_marek/fiber_docs/security"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
|
||||
type TokenHeader struct {
|
||||
Token string `header:"token" validate:"required" json:"token" example:"test"`
|
||||
}
|
||||
type TestQueryReq struct {
|
||||
TokenHeader ` embed:""`
|
||||
Name string ` query:"name" validate:"required" json:"name" description:"name of model" example:"test"`
|
||||
Enum string ` query:"enum" validate:"required,oneof=1 2" json:"enum" description:"enum of model" example:"1"`
|
||||
Optional string ` query:"optional" json:"optional"`
|
||||
}
|
||||
|
||||
func TestQuery(c *fiber.Ctx, req TestQueryReq) error {
|
||||
user := c.Locals(security.Credentials).(security.User)
|
||||
fmt.Println(user)
|
||||
return c.JSON(req)
|
||||
}
|
||||
|
||||
type TestQueryListReq struct {
|
||||
TokenHeader ` embed:""`
|
||||
Name string ` query:"name" validate:"required" json:"name" description:"name of model" example:"test"`
|
||||
}
|
||||
|
||||
func TestQueryList(c *fiber.Ctx, req TestQueryListReq) error {
|
||||
user := c.Locals(security.Credentials).(security.User)
|
||||
fmt.Println(user)
|
||||
return c.JSON([]TestQueryListReq{req})
|
||||
}
|
||||
|
||||
type TestQueryPathReq struct {
|
||||
Name string `query:"name" validate:"required" json:"name" description:"name of model" example:"test"`
|
||||
ID int ` validate:"required" json:"id" description:"id of model" example:"1" uri:"id"`
|
||||
UUID uuid.UUID `query:"uuid" validate:"required" json:"uuid" description:"uuid of model"`
|
||||
Token string ` validate:"required" json:"token" example:"test" header:"token"`
|
||||
Num *int `query:"num" json:"num" example:"1"`
|
||||
}
|
||||
|
||||
func TestQueryPath(c *fiber.Ctx, req TestQueryPathReq) error {
|
||||
return c.JSON(req)
|
||||
}
|
||||
|
||||
type TestFormReq struct {
|
||||
ID int `query:"id" validate:"required" json:"id" description:"id of model" example:"1"`
|
||||
Name string ` validate:"required" json:"name" description:"name of model" example:"test" form:"name"`
|
||||
List []int ` validate:"required" json:"list" description:"list of model" form:"list"`
|
||||
Enum string ` validate:"required,oneof=1 2" json:"enum" description:"enum of model" example:"1" form:"enum"`
|
||||
}
|
||||
|
||||
func TestForm(c *fiber.Ctx, req TestFormReq) error {
|
||||
fmt.Println(req)
|
||||
return c.JSON(req)
|
||||
}
|
||||
|
||||
type TestJsonReq struct {
|
||||
ID int `query:"id" validate:"required" json:"id" description:"id of model" example:"1"`
|
||||
Name string ` validate:"required" json:"name" description:"name of model" example:"test"`
|
||||
List []int ` validate:"required" json:"list" description:"list of model"`
|
||||
Enum string ` validate:"required,oneof=1 2" json:"enum" description:"enum of model" example:"1"`
|
||||
}
|
||||
|
||||
func TestJson(c *fiber.Ctx, req TestJsonReq) error {
|
||||
return c.JSON(req)
|
||||
}
|
||||
|
||||
func TestNoModel(c *fiber.Ctx) error {
|
||||
return c.SendString("no model")
|
||||
}
|
||||
|
||||
type TestFileReq struct {
|
||||
File *multipart.FileHeader `form:"file" validate:"required" description:"file upload"`
|
||||
}
|
||||
|
||||
func TestFile(c *fiber.Ctx, req TestFileReq) error {
|
||||
fmt.Println(fiber.Map{"file": req.File.Filename})
|
||||
return c.JSON(fiber.Map{"file": req.File.Filename})
|
||||
}
|
53
examples/main.go
Normal file
53
examples/main.go
Normal file
@ -0,0 +1,53 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"git.ma-al.com/goc_marek/fiber_docs/security"
|
||||
"github.com/go-playground/validator/v10"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
fibers "git.ma-al.com/goc_marek/fiber_docs"
|
||||
"github.com/gofiber/fiber/v2/middleware/cors"
|
||||
"github.com/gofiber/fiber/v2/middleware/logger"
|
||||
"github.com/gofiber/fiber/v2/middleware/recover"
|
||||
)
|
||||
|
||||
func main() {
|
||||
app := fibers.New(NewSwagger(), fiber.Config{ErrorHandler: func(c *fiber.Ctx, err error) error {
|
||||
code := fiber.StatusInternalServerError
|
||||
if e, ok := err.(*fiber.Error); ok {
|
||||
code = e.Code
|
||||
}
|
||||
if _, ok := err.(validator.ValidationErrors); ok {
|
||||
code = fiber.StatusBadRequest
|
||||
}
|
||||
err = c.Status(code).JSON(fiber.Map{
|
||||
"error": err.Error(),
|
||||
})
|
||||
if err != nil {
|
||||
return c.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
|
||||
}
|
||||
return nil
|
||||
}})
|
||||
app.Use(
|
||||
logger.New(),
|
||||
recover.New(),
|
||||
cors.New(),
|
||||
)
|
||||
subApp := fibers.New(NewSwagger(), fiber.Config{})
|
||||
subApp.Get("/noModel", noModel)
|
||||
app.Mount("/sub", subApp)
|
||||
queryGroup := app.Group("/query", fibers.Tags("Query"))
|
||||
queryGroup.Get("/list", queryList)
|
||||
queryGroup.Get("/:id", queryPath)
|
||||
queryGroup.Delete("", query)
|
||||
|
||||
app.Get("/noModel", noModel)
|
||||
|
||||
bodyGroup := app.Group("/body", fibers.Tags("Body"), fibers.Security(&security.Bearer{}))
|
||||
bodyGroup.Post("/encoded", formEncode)
|
||||
bodyGroup.Post("/file", file)
|
||||
bodyGroup.Post("/json", body)
|
||||
|
||||
log.Fatal(app.Listen("0.0.0.0:8080"))
|
||||
}
|
74
examples/routers.go
Normal file
74
examples/routers.go
Normal file
@ -0,0 +1,74 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"git.ma-al.com/goc_marek/fiber_docs/router"
|
||||
"git.ma-al.com/goc_marek/fiber_docs/security"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
)
|
||||
|
||||
var (
|
||||
query = router.New(
|
||||
TestQuery,
|
||||
router.Summary("Test query"),
|
||||
router.Description("Test query model"),
|
||||
router.Security(&security.Basic{}),
|
||||
router.Responses(router.Response{
|
||||
"200": router.ResponseItem{
|
||||
Model: TestQueryReq{},
|
||||
Description: "response model description",
|
||||
},
|
||||
}),
|
||||
)
|
||||
|
||||
queryList = router.New(
|
||||
TestQueryList,
|
||||
router.Summary("Test query list"),
|
||||
router.Description("Test query list model"),
|
||||
router.Security(&security.Basic{}),
|
||||
router.Responses(router.Response{
|
||||
"200": router.ResponseItem{
|
||||
Model: []TestQueryListReq{},
|
||||
},
|
||||
}),
|
||||
)
|
||||
noModel = router.NewX(
|
||||
TestNoModel,
|
||||
router.Summary("Test no model"),
|
||||
router.Description("Test no model"),
|
||||
router.Responses(router.Response{
|
||||
"200": router.ResponseItem{
|
||||
Description: "success",
|
||||
},
|
||||
}),
|
||||
)
|
||||
queryPath = router.New(
|
||||
TestQueryPath,
|
||||
router.Summary("Test query path"),
|
||||
router.Description("Test query path model"),
|
||||
router.Responses(router.Response{
|
||||
"200": router.ResponseItem{
|
||||
Description: "success",
|
||||
Model: TestQueryPathReq{},
|
||||
},
|
||||
}),
|
||||
)
|
||||
formEncode = router.New(
|
||||
TestForm,
|
||||
router.Summary("Test form"),
|
||||
router.ContentType(fiber.MIMEApplicationForm, router.ContentTypeRequest),
|
||||
)
|
||||
body = router.New(
|
||||
TestJson,
|
||||
router.Summary("Test json body"),
|
||||
router.Responses(router.Response{
|
||||
"200": router.ResponseItem{
|
||||
Model: TestFormReq{},
|
||||
},
|
||||
}),
|
||||
)
|
||||
file = router.New(
|
||||
TestFile,
|
||||
router.Summary("Test file upload"),
|
||||
router.ContentType(fiber.MIMEApplicationForm, router.ContentTypeRequest),
|
||||
)
|
||||
)
|
21
examples/swagger.go
Normal file
21
examples/swagger.go
Normal file
@ -0,0 +1,21 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"git.ma-al.com/goc_marek/fiber_docs/swagger"
|
||||
"github.com/getkin/kin-openapi/openapi3"
|
||||
)
|
||||
|
||||
func NewSwagger() *swagger.Swagger {
|
||||
return swagger.New("Fibers", "Swagger + Fiber = Fibers", "0.1.0",
|
||||
swagger.License(&openapi3.License{
|
||||
Name: "Apache License 2.0",
|
||||
URL: "https://git.ma-al.com/goc_marek/fiber_docs/blob/dev/LICENSE",
|
||||
}),
|
||||
swagger.Contact(&openapi3.Contact{
|
||||
Name: "long2ice",
|
||||
URL: "https://git.ma-al.com/goc_marek/fiber_docs",
|
||||
Email: "long2ice@gmail.com",
|
||||
}),
|
||||
swagger.TermsOfService("https://github.com/long2ice"),
|
||||
)
|
||||
}
|
Reference in New Issue
Block a user