package dao import ( "context" "fmt" "git.x2erp.com/qdy/go-svc-configure/internal/tables" "github.com/jmoiron/sqlx" ) // CreateTenant 创建租户 func CreateTenant(ctx context.Context, tx *sqlx.Tx, tenantID, name, creator string) (int64, error) { id := fmt.Sprintf("tenant.%s", tenantID) query := ` INSERT INTO config_tenant (id, tenant_id, name, creator, created_at) VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP) ` result, err := tx.ExecContext(ctx, query, id, tenantID, name, creator) if err != nil { return -1, fmt.Errorf("创建租户失败: %v", err) } return ValidateResultRowsAffected(result, err, 1) } // GetTenantByTenantID 根据租户ID查询租户 func GetTenantByTenantID(ctx context.Context, db *sqlx.DB, tenantID string) (*tables.TenantDB, error) { var tenant tables.TenantDB query := ` SELECT id, tenant_id, name, creator, created_at FROM config_tenant WHERE tenant_id = ? ` err := db.GetContext(ctx, &tenant, query, tenantID) if err != nil { return nil, fmt.Errorf("查询租户失败: %v", err) } return &tenant, nil } // ListTenants 查询租户列表 func ListTenants(ctx context.Context, db *sqlx.DB) ([]tables.TenantDB, error) { var tenants []tables.TenantDB query := ` SELECT id, tenant_id, name, creator, created_at FROM config_tenant ORDER BY created_at DESC ` err := db.SelectContext(ctx, &tenants, query) if err != nil { return nil, fmt.Errorf("查询租户列表失败: %v", err) } return tenants, nil } // UpdateTenant 更新租户信息 func UpdateTenant(ctx context.Context, tx *sqlx.Tx, tenantID, name string) (int64, error) { query := ` UPDATE config_tenant SET name = ? WHERE tenant_id = ? ` result, err := tx.ExecContext(ctx, query, name, tenantID) if err != nil { return -1, fmt.Errorf("更新租户失败: %v", err) } return ValidateResultRowsAffected(result, err, 1) } // DeleteTenant 删除租户 func DeleteTenant(ctx context.Context, tx *sqlx.Tx, tenantID string) (int64, error) { query := `DELETE FROM config_tenant WHERE tenant_id = ?` result, err := tx.ExecContext(ctx, query, tenantID) if err != nil { return -1, fmt.Errorf("删除租户失败: %v", err) } return ValidateResultRowsAffected(result, err, 1) } // CheckTenantExists 检查租户是否存在 func CheckTenantExists(ctx context.Context, db *sqlx.DB, tenantID string) (bool, error) { var count int query := `SELECT COUNT(*) FROM config_tenant WHERE tenant_id = ?` err := db.GetContext(ctx, &count, query, tenantID) if err != nil { return false, fmt.Errorf("检查租户存在性失败: %v", err) } return count > 0, nil }