package tenant import ( "context" "github.com/gocql/gocql" "go.uber.org/zap" ) // Delete deletes a tenant from all tables // Uses batched writes to maintain consistency across denormalized tables // Note: Consider implementing soft delete (status = 'deleted') instead func (r *repository) Delete(ctx context.Context, id string) error { // First, get the tenant to retrieve the slug and status // (needed to delete from tenants_by_slug and tenants_by_status tables) tenant, err := r.GetByID(ctx, id) if err != nil { return err } // Create batch for atomic delete batch := r.session.NewBatch(gocql.LoggedBatch) // Delete from tenants_by_id table batch.Query(`DELETE FROM tenants_by_id WHERE id = ?`, id) // Delete from tenants_by_slug table batch.Query(`DELETE FROM tenants_by_slug WHERE slug = ?`, tenant.Slug) // Delete from tenants_by_status table batch.Query(`DELETE FROM tenants_by_status WHERE status = ? AND id = ?`, string(tenant.Status), id) // Execute batch if err := r.session.ExecuteBatch(batch); err != nil { r.logger.Error("failed to delete tenant", zap.String("tenant_id", id), zap.Error(err)) return err } return nil }