Files
qvyun/backend/app/http/tenants/controller.go
2025-01-10 19:44:24 +08:00

61 lines
1.2 KiB
Go

package tenants
import (
"time"
"backend/app/consts"
"backend/providers/jwt"
"backend/providers/otel"
"github.com/gofiber/fiber/v3"
log "github.com/sirupsen/logrus"
)
// @provider
type Controller struct {
svc *Service
jwt *jwt.JWT
log *log.Entry `inject:"false"`
}
func (c *Controller) Prepare() error {
c.log = log.WithField("module", "tenants.Controller")
return nil
}
// @Router /t/:tenant [get]
//
// @Bind claim local
// @Bind tenant path
func (c *Controller) Index(ctx fiber.Ctx, tenant string, claim *jwt.Claims) error {
_ctx, span := otel.Start(ctx.Context(), "tenants.controller.index")
defer span.End()
tenantModel, err := c.svc.GetTenantBySlug(_ctx, tenant)
if err != nil {
return err
}
if err := c.svc.BindUserToTenantIfNotExists(_ctx, tenantModel.ID, claim.UserID); err != nil {
return err
}
if claim.TenantID == nil {
claim.TenantID = &tenantModel.ID
token, err := c.jwt.CreateToken(claim)
if err != nil {
return err
}
ctx.Cookie(&fiber.Cookie{
Name: consts.TokenTypeUser.String(),
Value: token,
Expires: time.Now().Add(6 * time.Hour),
HTTPOnly: true,
})
}
// TODO: render page
return nil
}