after fork

This commit is contained in:
2023-04-11 22:43:48 +02:00
commit 6486bfd1c8
33 changed files with 3366 additions and 0 deletions

86
examples/api.go Normal file
View 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
View 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
View 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
View 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"),
)
}