Fix mobile validation, cascade delete for businesses/categories, and DB error handling.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-21 14:20:46 +03:30
co-authored by Cursor
parent 97abb808b8
commit 2d6bae2ba1
14 changed files with 237 additions and 26 deletions
+43
View File
@@ -0,0 +1,43 @@
import { NotFoundException } from '@nestjs/common';
import { EntityManager } from 'typeorm';
import { AttributeDefinitionEntity } from '../../entities/attribute-definition.entity';
import { BookingEntity } from '../../entities/booking.entity';
import { BusinessAttributeValueEntity } from '../../entities/business-attribute-value.entity';
import { BusinessCategoryEntity } from '../../entities/business-category.entity';
import { BusinessServiceEntity } from '../../entities/business-service.entity';
import { BusinessEntity } from '../../entities/business.entity';
import { ServiceTemplateEntity } from '../../entities/service-template.entity';
/** Remove a business and all rows that block FK deletes in production DB. */
export async function deleteBusinessCascade(
manager: EntityManager,
businessId: string,
): Promise<void> {
await manager.delete(BookingEntity, { businessId });
await manager.delete(BusinessServiceEntity, { businessId });
await manager.delete(BusinessAttributeValueEntity, { businessId });
const result = await manager.delete(BusinessEntity, businessId);
if (!result.affected) {
throw new NotFoundException('Business not found');
}
}
/** Remove a category after all its businesses and catalog rows are cleared. */
export async function deleteCategoryCascade(
manager: EntityManager,
categoryId: string,
businessIds: string[],
): Promise<void> {
for (const businessId of businessIds) {
await deleteBusinessCascade(manager, businessId);
}
await manager.delete(ServiceTemplateEntity, { categoryId });
await manager.delete(AttributeDefinitionEntity, { categoryId });
const result = await manager.delete(BusinessCategoryEntity, categoryId);
if (!result.affected) {
throw new NotFoundException('Business category not found');
}
}