Files
ArmedPolice/router/router.go

168 lines
3.9 KiB
Go
Raw Normal View History

2021-11-02 09:43:19 +08:00
package router
import (
2021-11-02 16:22:07 +08:00
"ArmedPolice/app/api"
"ArmedPolice/config"
"ArmedPolice/router/rate"
2021-11-02 09:43:19 +08:00
"io"
"net/http"
"os"
"time"
"github.com/gin-gonic/gin"
)
type Router struct {
*Option
handler *gin.Engine
}
type (
Option struct {
Mode string
IsCors bool
*RateLimitConfig
}
// RateLimitConfig 限流配置
RateLimitConfig struct {
IsRate bool `json:"is_rate"`
Limit int `json:"limit"`
Capacity int `json:"capacity"`
}
)
func (this *Router) registerAPI() {
apiPrefix := "/api"
g := this.handler.Group(apiPrefix)
g.Use()
// 登录验证
g.Use(NeedLogin(AddSkipperURL([]string{
2021-11-02 16:22:07 +08:00
apiPrefix + "/v1/account/login",
apiPrefix + "/v1/account/logout",
2021-11-04 16:44:42 +08:00
apiPrefix + "/v1/captcha",
2021-11-08 11:09:27 +08:00
apiPrefix + "/v1/config",
2021-11-02 09:43:19 +08:00
}...)))
v1 := g.Group("/v1")
2021-11-08 11:09:27 +08:00
// Websocket socket接口管理
{
_api := new(api.Websocket)
v1.GET("/ws", _api.Ws)
v1.GET("/pong", _api.Pong)
}
// Captcha 验证码接口管理
2021-11-04 15:15:11 +08:00
v1.GET("/captcha", new(api.Captcha).Captcha)
2021-11-08 11:09:27 +08:00
// Upload 上传接口管理
2021-11-04 15:15:11 +08:00
v1.POST("/upload", new(api.Upload).Upload)
2021-11-02 09:43:19 +08:00
// Account 接口管理
2021-11-02 17:01:04 +08:00
accountV1 := v1.Group("/account")
2021-11-02 09:43:19 +08:00
{
_api := new(api.Account)
2021-11-02 17:01:04 +08:00
accountV1.POST("/login", _api.Login)
accountV1.POST("/logout", _api.Logout)
}
2021-11-04 16:16:57 +08:00
// Config 配置管理
configV1 := v1.Group("/config")
{
_api := new(api.Config)
2021-11-08 11:09:27 +08:00
configV1.GET("", _api.List)
configV1.POST("/edit", _api.Edit)
2021-11-04 16:16:57 +08:00
configV1.GET("/area", _api.Area)
2021-11-05 15:27:04 +08:00
configV1.POST("/breakdown", _api.Breakdown)
2021-11-04 16:16:57 +08:00
}
2021-11-04 15:30:10 +08:00
// Tenant 租户单位管理
tenantV1 := v1.Group("/tenant")
2021-11-04 15:15:11 +08:00
{
2021-11-04 15:30:10 +08:00
_api := new(api.Tenant)
tenantV1.POST("/list", _api.List)
tenantV1.POST("/add", _api.Add)
tenantV1.POST("/edit", _api.Add)
tenantV1.POST("/delete", _api.Add)
2021-11-04 15:15:11 +08:00
}
2021-11-02 17:01:04 +08:00
// User 用户管理
2021-11-04 15:15:11 +08:00
userV1 := v1.Group("/user")
{
_api := new(api.User)
userV1.GET("/info", _api.Info)
userV1.GET("/menu", _api.Menu)
userV1.POST("/list", _api.List)
}
2021-11-04 15:30:10 +08:00
// Menu 菜单管理
menuV1 := v1.Group("/menu")
{
_api := new(api.Menu)
2021-11-04 16:16:57 +08:00
menuV1.GET("/list", _api.List)
2021-11-04 15:30:10 +08:00
menuV1.POST("/add", _api.Add)
menuV1.POST("/edit", _api.Edit)
menuV1.POST("/status", _api.Status)
menuV1.POST("/delete", _api.Delete)
}
2021-11-04 15:15:11 +08:00
// Role 角色管理
roleV1 := v1.Group("/role")
2021-11-02 17:01:04 +08:00
{
2021-11-04 15:30:10 +08:00
_api := new(api.Role)
2021-11-05 15:27:04 +08:00
roleV1.GET("/list", _api.List)
2021-11-04 15:30:10 +08:00
roleV1.POST("/add", _api.Add)
roleV1.POST("/menu", _api.Edit)
roleV1.POST("/delete", _api.Delete)
roleV1.POST("/menus", _api.Menu)
roleV1.POST("/menu/bind", _api.MenuBind)
2021-11-02 09:43:19 +08:00
}
2021-11-04 17:48:12 +08:00
// Manage 数据管理
manageV1 := v1.Group("/manage")
{
_api := new(api.Manage)
manageV1.POST("/equipment", _api.Equipment)
manageV1.POST("/equipment/detail", _api.EquipmentDetail)
manageV1.POST("/equipment/add", _api.EquipmentAdd)
manageV1.POST("/equipment/edit", _api.EquipmentEdit)
manageV1.POST("/equipment/delete", _api.EquipmentDelete)
manageV1.POST("/material", _api.Material)
manageV1.POST("/material/add", _api.MaterialAdd)
manageV1.POST("/material/edit", _api.MaterialEdit)
manageV1.POST("/material/delete", _api.MaterialDelete)
}
2021-11-05 15:27:04 +08:00
// Work 工单管理
workV1 := v1.Group("/work")
{
_api := new(api.Work)
workV1.POST("/list", _api.Instance)
}
2021-11-02 09:43:19 +08:00
}
func (this *Router) Init() *gin.Engine {
gin.SetMode(this.Mode)
app := gin.New()
if this.IsCors {
app.Use(Cors())
}
app.NoRoute(NoRouteHandler())
app.NoMethod(NoMethodHandler())
app.Use(LoggerHandle("log/gin.log", 3))
app.Use(TimeoutHandle(time.Second * 30))
app.Use(RecoveryHandler())
if this.RateLimitConfig != nil {
if this.RateLimitConfig.IsRate {
rate.NewIPRateLimiter()(this.RateLimitConfig.Limit, this.RateLimitConfig.Capacity)
app.Use(rate.RequestIPRateLimiter()(this.RateLimitConfig.Limit, this.RateLimitConfig.Capacity))
}
}
if config.IsDebug() {
gin.DefaultWriter = io.MultiWriter(os.Stdout)
app.StaticFS("/api-docs", http.Dir("./doc"))
}
app.StaticFS("/upload", http.Dir("./upload"))
app.MaxMultipartMemory = 4 << 20
this.handler = app
// 注册路由
this.registerAPI()
return app
}
func NewRouter(option *Option) *Router {
return &Router{Option: option}
}