shoc-backend/SeaHaven.DataServices
Alexandre Brandizzi 9ef2512e14 fix(vendor-roster): conflict on colliding rename, reject no-op company update (SH-250)
Two review findings on the additive PATCH path:

- AddTechniciansAsync can rename via CompanyFields.Name and write NormalizedName
  against the unique index, but the save had no guard. A colliding rename
  surfaced as an unhandled 500 from the PATCH action instead of a stable client
  conflict. Pre-check the normalized name against other live companies and throw
  VendorRosterDuplicateNameException, with a scoped catch around the save for the
  race where a competing rename commits in between. The controller maps it to a
  409 alongside the existing concurrency conflict.
- Empty-payload validation only rejected a null CompanyFields, so an all-blank
  CompanyFields object was forwarded as a company update, bumping RowVersion and
  rewriting every technician's LastModificationTime without changing any company
  data. Blank fields now collapse to no company change, and a request with
  neither technicians nor a real company value fails validation.
2026-08-18 17:33:16 -03:00
..
DependencyInjection backend changes 2026-05-14 11:00:12 -05:00
Dto refactor: enforce backend boundaries and optimize dispatch (#30) 2026-07-24 17:35:34 -03:00
Helpers fix(work-orders): restore SH-185 Schedule On Past Due and assert IsAddOn audit 2026-08-17 10:36:03 -03:00
Implementation fix(vendor-roster): conflict on colliding rename, reject no-op company update (SH-250) 2026-08-18 17:33:16 -03:00
Interfaces feat(vendor-roster): additive PATCH endpoint for technician adds (SH-250, SH-246) 2026-08-18 12:14:12 -03:00
Models fix(vendor-roster): conflict on colliding rename, reject no-op company update (SH-250) 2026-08-18 17:33:16 -03:00
Properties feat(vendors): add directory filters and details API (#25) 2026-07-23 15:55:47 +00:00
SeaHaven.DataServices.csproj refactor 2026-04-28 18:55:14 -05:00