food-market/src/food-market.application/Common
nns 57168299ac fix(validation): обязательные FK-Guid проверяются на 400 + DbUpdateException → 400
Было: SupplyInput.SupplierId/StoreId/CurrencyId — non-nullable Guid. Если
JSON приходит без поля или с null, оно десериализуется в Guid.Empty, и
ошибка проявляется только на SaveChanges как PostgresException 23503
(FK violation) с HTTP 500. UI получает generic 500 и не понимает какое
поле виновато.

Что изменено:
- Добавлен helper RequiredGuid.FirstMissing(...) — возвращает имя первого
  Guid.Empty поля или null.
- SuppliesController.Create/Update, RetailSalesController.Create/Update,
  ProductsController.Create/Update — теперь начинают с проверки FK-Guid'ов
  и возвращают 400 {error, field} если какое-то пусто.
- В тех же контроллерах SaveChanges обёрнут в SaveOrFkErrorAsync, который
  ловит PostgresException SqlState=23503 (foreign_key_violation), парсит
  ConstraintName и возвращает 400 вместо 500. Защита для случая когда
  Guid не пуст, но указывает на удалённую/чужую запись.

TaskUpdate: closes step08-bug «Supply без supplierId → 500».
2026-05-08 12:05:01 +05:00
..
Email feat(platform): IEmailSender + MailKit + PlatformSettingsController 2026-05-06 12:39:18 +05:00
Tenancy fix(tenancy): SuperAdmin override должен применять tenant filter выбранной орги 2026-04-26 15:55:04 +05:00
PagedRequest.cs feat(tables): server-side sort by column header click 2026-04-24 12:24:05 +05:00
PhoneNormalization.cs fix(phone): серверная KZ-ФЛК на всех endpoint'ах принимающих phone 2026-05-08 01:05:48 +05:00
RequiredGuid.cs fix(validation): обязательные FK-Guid проверяются на 400 + DbUpdateException → 400 2026-05-08 12:05:01 +05:00