49 lines
944 B
Go
49 lines
944 B
Go
package tenants
|
|
|
|
import (
|
|
"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
|
|
}
|
|
|
|
// set tenant cookie
|
|
ctx.Cookie(&fiber.Cookie{
|
|
Name: "tenant",
|
|
Value: tenantModel.Slug,
|
|
})
|
|
|
|
// TODO: render page
|
|
return nil
|
|
}
|