feat: done
This commit is contained in:
@@ -50,3 +50,22 @@ func (ctl *auth) login(ctx fiber.Ctx, form *dto.LoginForm) (*dto.LoginResponse,
|
||||
|
||||
return &dto.LoginResponse{Token: token}, nil
|
||||
}
|
||||
|
||||
// Token
|
||||
//
|
||||
// @Tags Super
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Success 200 {object} dto.LoginResponse "成功"
|
||||
//
|
||||
// @Router /super/v1/auth/token [get]
|
||||
func (ctl *auth) token(ctx fiber.Ctx) (*dto.LoginResponse, error) {
|
||||
token, err := ctl.jwt.CreateToken(ctl.jwt.CreateClaims(jwt.BaseClaims{
|
||||
UserID: 2,
|
||||
}))
|
||||
if err != nil {
|
||||
return nil, errorx.Wrap(err).WithMsg("登录凭证生成失败")
|
||||
}
|
||||
|
||||
return &dto.LoginResponse{Token: token}, nil
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package super
|
||||
|
||||
import (
|
||||
"quyun/v2/app/middlewares"
|
||||
"quyun/v2/providers/app"
|
||||
"quyun/v2/providers/jwt"
|
||||
|
||||
@@ -26,13 +27,15 @@ func Provide(opts ...opt.Option) error {
|
||||
}
|
||||
if err := container.Container.Provide(func(
|
||||
auth *auth,
|
||||
middlewares *middlewares.Middlewares,
|
||||
tenant *tenant,
|
||||
user *user,
|
||||
) (contracts.HttpRoute, error) {
|
||||
obj := &Routes{
|
||||
auth: auth,
|
||||
tenant: tenant,
|
||||
user: user,
|
||||
auth: auth,
|
||||
middlewares: middlewares,
|
||||
tenant: tenant,
|
||||
user: user,
|
||||
}
|
||||
if err := obj.Prepare(); err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -5,12 +5,14 @@
|
||||
package super
|
||||
|
||||
import (
|
||||
"quyun/v2/app/http/super/dto"
|
||||
"quyun/v2/app/middlewares"
|
||||
|
||||
"github.com/gofiber/fiber/v3"
|
||||
log "github.com/sirupsen/logrus"
|
||||
_ "go.ipao.vip/atom"
|
||||
_ "go.ipao.vip/atom/contracts"
|
||||
. "go.ipao.vip/atom/fen"
|
||||
"quyun/v2/app/http/super/dto"
|
||||
)
|
||||
|
||||
// Routes implements the HttpRoute contract and provides route registration
|
||||
@@ -18,7 +20,8 @@ import (
|
||||
//
|
||||
// @provider contracts.HttpRoute atom.GroupRoutes
|
||||
type Routes struct {
|
||||
log *log.Entry `inject:"false"`
|
||||
log *log.Entry `inject:"false"`
|
||||
middlewares *middlewares.Middlewares
|
||||
// Controller instances
|
||||
auth *auth
|
||||
tenant *tenant
|
||||
@@ -41,49 +44,53 @@ func (r *Routes) Name() string {
|
||||
// Each route is registered with its corresponding controller action and parameter bindings.
|
||||
func (r *Routes) Register(router fiber.Router) {
|
||||
// Register routes for controller: auth
|
||||
r.log.Debugf("Registering route: Get /super/v1/auth/token -> auth.token")
|
||||
router.Get("/super/v1/auth/token"[len(r.Path()):], DataFunc0(
|
||||
r.auth.token,
|
||||
))
|
||||
r.log.Debugf("Registering route: Post /super/v1/auth/login -> auth.login")
|
||||
router.Post("/super/v1/auth/login", DataFunc1(
|
||||
router.Post("/super/v1/auth/login"[len(r.Path()):], DataFunc1(
|
||||
r.auth.login,
|
||||
Body[dto.LoginForm]("form"),
|
||||
))
|
||||
// Register routes for controller: tenant
|
||||
r.log.Debugf("Registering route: Get /super/v1/tenants -> tenant.list")
|
||||
router.Get("/super/v1/tenants", DataFunc1(
|
||||
router.Get("/super/v1/tenants"[len(r.Path()):], DataFunc1(
|
||||
r.tenant.list,
|
||||
Query[dto.TenantFilter]("filter"),
|
||||
))
|
||||
r.log.Debugf("Registering route: Get /super/v1/tenants/statuses -> tenant.statusList")
|
||||
router.Get("/super/v1/tenants/statuses", DataFunc0(
|
||||
router.Get("/super/v1/tenants/statuses"[len(r.Path()):], DataFunc0(
|
||||
r.tenant.statusList,
|
||||
))
|
||||
r.log.Debugf("Registering route: Patch /super/v1/tenants/:tenantID -> tenant.updateExpire")
|
||||
router.Patch("/super/v1/tenants/:tenantID", Func2(
|
||||
router.Patch("/super/v1/tenants/:tenantID"[len(r.Path()):], Func2(
|
||||
r.tenant.updateExpire,
|
||||
PathParam[int64]("tenantID"),
|
||||
Body[dto.TenantExpireUpdateForm]("form"),
|
||||
))
|
||||
r.log.Debugf("Registering route: Patch /super/v1/tenants/:tenantID/status -> tenant.updateStatus")
|
||||
router.Patch("/super/v1/tenants/:tenantID/status", Func2(
|
||||
router.Patch("/super/v1/tenants/:tenantID/status"[len(r.Path()):], Func2(
|
||||
r.tenant.updateStatus,
|
||||
PathParam[int64]("tenantID"),
|
||||
Body[dto.TenantStatusUpdateForm]("form"),
|
||||
))
|
||||
// Register routes for controller: user
|
||||
r.log.Debugf("Registering route: Get /super/v1/users -> user.list")
|
||||
router.Get("/super/v1/users", DataFunc1(
|
||||
router.Get("/super/v1/users"[len(r.Path()):], DataFunc1(
|
||||
r.user.list,
|
||||
Query[dto.UserPageFilter]("filter"),
|
||||
))
|
||||
r.log.Debugf("Registering route: Get /super/v1/users/statistics -> user.statistics")
|
||||
router.Get("/super/v1/users/statistics", DataFunc0(
|
||||
router.Get("/super/v1/users/statistics"[len(r.Path()):], DataFunc0(
|
||||
r.user.statistics,
|
||||
))
|
||||
r.log.Debugf("Registering route: Get /super/v1/users/statuses -> user.statusList")
|
||||
router.Get("/super/v1/users/statuses", DataFunc0(
|
||||
router.Get("/super/v1/users/statuses"[len(r.Path()):], DataFunc0(
|
||||
r.user.statusList,
|
||||
))
|
||||
r.log.Debugf("Registering route: Patch /super/v1/users/:userID/status -> user.updateStatus")
|
||||
router.Patch("/super/v1/users/:userID/status", Func2(
|
||||
router.Patch("/super/v1/users/:userID/status"[len(r.Path()):], Func2(
|
||||
r.user.updateStatus,
|
||||
PathParam[int64]("userID"),
|
||||
Body[dto.UserStatusUpdateForm]("form"),
|
||||
|
||||
9
backend/app/http/super/routes.manual.go
Normal file
9
backend/app/http/super/routes.manual.go
Normal file
@@ -0,0 +1,9 @@
|
||||
package super
|
||||
|
||||
func (r *Routes) Path() string {
|
||||
return "/super"
|
||||
}
|
||||
|
||||
func (r *Routes) Middlewares() []any {
|
||||
return []any{}
|
||||
}
|
||||
9
backend/app/http/tenant/dto/me.go
Normal file
9
backend/app/http/tenant/dto/me.go
Normal file
@@ -0,0 +1,9 @@
|
||||
package dto
|
||||
|
||||
import "quyun/v2/database/models"
|
||||
|
||||
type MeResponse struct {
|
||||
Tenant *models.Tenant `json:"tenant,omitempty"`
|
||||
User *models.User `json:"user,omitempty"`
|
||||
TenantUser *models.TenantUser `json:"tenant_user,omitempty"`
|
||||
}
|
||||
32
backend/app/http/tenant/me.go
Normal file
32
backend/app/http/tenant/me.go
Normal file
@@ -0,0 +1,32 @@
|
||||
package tenant
|
||||
|
||||
import (
|
||||
"quyun/v2/app/http/tenant/dto"
|
||||
"quyun/v2/database/models"
|
||||
|
||||
"github.com/gofiber/fiber/v3"
|
||||
)
|
||||
|
||||
// @provider
|
||||
type me struct{}
|
||||
|
||||
// get
|
||||
//
|
||||
// @Summary 当前租户上下文信息
|
||||
// @Tags Tenant
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param tenant_code path string true "Tenant Code"
|
||||
// @Success 200 {object} dto.MeResponse
|
||||
//
|
||||
// @Router /t/:tenant_code/v1/me [get]
|
||||
// @Bind tenant local key(tenant)
|
||||
// @Bind user local key(user)
|
||||
// @Bind tenantUser local key(tenant_user)
|
||||
func (*me) get(ctx fiber.Ctx, tenant *models.Tenant, user *models.User, tenantUser *models.TenantUser) (*dto.MeResponse, error) {
|
||||
return &dto.MeResponse{
|
||||
Tenant: tenant,
|
||||
User: user,
|
||||
TenantUser: tenantUser,
|
||||
}, nil
|
||||
}
|
||||
37
backend/app/http/tenant/provider.gen.go
Executable file
37
backend/app/http/tenant/provider.gen.go
Executable file
@@ -0,0 +1,37 @@
|
||||
package tenant
|
||||
|
||||
import (
|
||||
"quyun/v2/app/middlewares"
|
||||
|
||||
"go.ipao.vip/atom"
|
||||
"go.ipao.vip/atom/container"
|
||||
"go.ipao.vip/atom/contracts"
|
||||
"go.ipao.vip/atom/opt"
|
||||
)
|
||||
|
||||
func Provide(opts ...opt.Option) error {
|
||||
if err := container.Container.Provide(func() (*me, error) {
|
||||
obj := &me{}
|
||||
|
||||
return obj, nil
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := container.Container.Provide(func(
|
||||
me *me,
|
||||
middlewares *middlewares.Middlewares,
|
||||
) (contracts.HttpRoute, error) {
|
||||
obj := &Routes{
|
||||
me: me,
|
||||
middlewares: middlewares,
|
||||
}
|
||||
if err := obj.Prepare(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return obj, nil
|
||||
}, atom.GroupRoutes); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
54
backend/app/http/tenant/routes.gen.go
Normal file
54
backend/app/http/tenant/routes.gen.go
Normal file
@@ -0,0 +1,54 @@
|
||||
// Code generated by atomctl. DO NOT EDIT.
|
||||
|
||||
// Package tenant provides HTTP route definitions and registration
|
||||
// for the quyun/v2 application.
|
||||
package tenant
|
||||
|
||||
import (
|
||||
"quyun/v2/app/middlewares"
|
||||
"quyun/v2/database/models"
|
||||
|
||||
"github.com/gofiber/fiber/v3"
|
||||
log "github.com/sirupsen/logrus"
|
||||
_ "go.ipao.vip/atom"
|
||||
_ "go.ipao.vip/atom/contracts"
|
||||
. "go.ipao.vip/atom/fen"
|
||||
)
|
||||
|
||||
// Routes implements the HttpRoute contract and provides route registration
|
||||
// for all controllers in the tenant module.
|
||||
//
|
||||
// @provider contracts.HttpRoute atom.GroupRoutes
|
||||
type Routes struct {
|
||||
log *log.Entry `inject:"false"`
|
||||
middlewares *middlewares.Middlewares
|
||||
// Controller instances
|
||||
me *me
|
||||
}
|
||||
|
||||
// Prepare initializes the routes provider with logging configuration.
|
||||
func (r *Routes) Prepare() error {
|
||||
r.log = log.WithField("module", "routes.tenant")
|
||||
r.log.Info("Initializing routes module")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Name returns the unique identifier for this routes provider.
|
||||
func (r *Routes) Name() string {
|
||||
return "tenant"
|
||||
}
|
||||
|
||||
// Register registers all HTTP routes with the provided fiber router.
|
||||
// Each route is registered with its corresponding controller action and parameter bindings.
|
||||
func (r *Routes) Register(router fiber.Router) {
|
||||
// Register routes for controller: me
|
||||
r.log.Debugf("Registering route: Get /t/:tenant_code/v1/me -> me.get")
|
||||
router.Get("/t/:tenant_code/v1/me"[len(r.Path()):], DataFunc3(
|
||||
r.me.get,
|
||||
Local[*models.Tenant]("tenant"),
|
||||
Local[*models.User]("user"),
|
||||
Local[*models.TenantUser]("tenant_user"),
|
||||
))
|
||||
|
||||
r.log.Info("Successfully registered all routes")
|
||||
}
|
||||
14
backend/app/http/tenant/routes.manual.go
Normal file
14
backend/app/http/tenant/routes.manual.go
Normal file
@@ -0,0 +1,14 @@
|
||||
package tenant
|
||||
|
||||
func (r *Routes) Path() string {
|
||||
return "/t/:tenant_code/v1"
|
||||
}
|
||||
|
||||
func (r *Routes) Middlewares() []any {
|
||||
return []any{
|
||||
r.middlewares.DebugMode,
|
||||
r.middlewares.TenantResolve,
|
||||
r.middlewares.TenantAuth,
|
||||
r.middlewares.TenantRequireMember,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user