{"record":{"id":"7bf022b4d20235b3","repo":"Tencent/WeKnora","slug":"tenant-has-associated-knowledge-bases","errorCode":null,"errorMessage":"tenant has associated knowledge bases","messagePattern":"tenant has associated knowledge bases","errorType":"error_code","errorClass":null,"httpStatus":400,"severity":"error","filePath":"internal/application/repository/tenant.go","lineNumber":16,"sourceCode":"package repository\n\nimport (\n\t\"context\"\n\t\"errors\"\n\n\t\"github.com/Tencent/WeKnora/internal/logger\"\n\t\"github.com/Tencent/WeKnora/internal/types\"\n\t\"github.com/Tencent/WeKnora/internal/types/interfaces\"\n\t\"gorm.io/gorm\"\n\t\"gorm.io/gorm/clause\"\n)\n\nvar (\n\tErrTenantNotFound         = errors.New(\"tenant not found\")\n\tErrTenantHasKnowledgeBase = errors.New(\"tenant has associated knowledge bases\")\n)\n\n// tenantRepository implements tenant repository interface\ntype tenantRepository struct {\n\tdb *gorm.DB\n}\n\n// NewTenantRepository creates a new tenant repository\nfunc NewTenantRepository(db *gorm.DB) interfaces.TenantRepository {\n\treturn &tenantRepository{db: db}\n}\n\n// CreateTenant creates tenant\nfunc (r *tenantRepository) CreateTenant(ctx context.Context, tenant *types.Tenant) error {\n\treturn r.db.WithContext(ctx).Create(tenant).Error\n}\n\n// GetTenantByID gets tenant by ID","sourceCodeStart":1,"sourceCodeEnd":34,"githubUrl":"https://github.com/Tencent/WeKnora/blob/988cbb03305e055d8ebb7d46d9ac6cc0803cd074/internal/application/repository/tenant.go#L1-L34","documentation":"Sentinel ErrTenantHasKnowledgeBase returned by the tenant repository when a delete is attempted on a tenant that still owns one or more knowledge bases — a referential-integrity guard preventing orphaned KB data. Not a database error.","triggerScenarios":"Thrown at internal/application/repository/tenant.go:16 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Delete or reassign the tenant's knowledge bases first, then retry the tenant deletion","Use a force/cascade delete flow in the service layer if that is the intended policy"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"988cbb03305e055d8ebb7d46d9ac6cc0803cd074","analyzedAt":"2026-09-02T14:41:08.344Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}