add tenant page
This commit is contained in:
@@ -1,10 +1,16 @@
|
||||
package tenants
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
|
||||
"backend/database/models/qvyun_v2/public/model"
|
||||
"backend/database/models/qvyun_v2/public/table"
|
||||
"backend/providers/otel"
|
||||
|
||||
. "github.com/go-jet/jet/v2/postgres"
|
||||
log "github.com/sirupsen/logrus"
|
||||
semconv "go.opentelemetry.io/otel/semconv/v1.15.0"
|
||||
)
|
||||
|
||||
// @provider:except
|
||||
@@ -18,3 +24,80 @@ func (svc *Service) Prepare() error {
|
||||
_ = Int(1)
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetTenantBySlug
|
||||
func (svc *Service) GetTenantBySlug(ctx context.Context, slug string) (*model.Tenants, error) {
|
||||
ctx, span := otel.Start(ctx, "tenants.service.GetTenantBySlug")
|
||||
defer span.End()
|
||||
|
||||
tbl := table.Tenants
|
||||
stmt := tbl.
|
||||
SELECT(tbl.AllColumns).
|
||||
WHERE(tbl.Slug.EQ(String(slug)))
|
||||
|
||||
var tenant model.Tenants
|
||||
if err := stmt.QueryContext(ctx, svc.db, &tenant); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &tenant, nil
|
||||
}
|
||||
|
||||
// TenantHasUser
|
||||
func (svc *Service) TenantHasUser(ctx context.Context, tenantID, userID int64) (bool, error) {
|
||||
ctx, span := otel.Start(ctx, "tenants.service.TenantHasUser")
|
||||
defer span.End()
|
||||
|
||||
tbl := table.TenantUsers
|
||||
stmt := tbl.
|
||||
SELECT(COUNT(tbl.ID).AS("cnt")).
|
||||
WHERE(tbl.TenantID.EQ(Int(tenantID))).
|
||||
WHERE(tbl.UserID.EQ(Int(userID)))
|
||||
span.SetAttributes(semconv.DBStatementKey.String(stmt.DebugSql()))
|
||||
|
||||
var count struct {
|
||||
Cnt int64
|
||||
}
|
||||
|
||||
if err := stmt.QueryContext(ctx, svc.db, &count); err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
return count.Cnt > 0, nil
|
||||
}
|
||||
|
||||
// BindUserToTenant
|
||||
func (svc *Service) BindUserToTenant(ctx context.Context, tenantID, userID int64) error {
|
||||
ctx, span := otel.Start(ctx, "tenants.service.BindUserToTenant")
|
||||
defer span.End()
|
||||
|
||||
tbl := table.TenantUsers
|
||||
stmt := tbl.
|
||||
INSERT(tbl.TenantID, tbl.UserID).
|
||||
VALUES(Int(tenantID), Int(userID)).
|
||||
ON_CONFLICT().
|
||||
DO_NOTHING()
|
||||
span.SetAttributes(semconv.DBStatementKey.String(stmt.DebugSql()))
|
||||
|
||||
if _, err := stmt.ExecContext(ctx, svc.db); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// BindUserToTenantIfNotExists
|
||||
func (svc *Service) BindUserToTenantIfNotExists(ctx context.Context, tenantID, userID int64) error {
|
||||
ctx, span := otel.Start(ctx, "tenants.service.BindUserToTenantIfNotExists")
|
||||
defer span.End()
|
||||
|
||||
has, err := svc.TenantHasUser(ctx, tenantID, userID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if has {
|
||||
return nil
|
||||
}
|
||||
return svc.BindUserToTenant(ctx, tenantID, userID)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user