When a landlord creates or edits an Appartement, make the core name, address, and purchase-price constraints agree end to end. Invalid requests must return every stable machine-readable field failure, and Angular must show actionable French guidance without discarding the structured response or exposing internal exception text.
Acceptance criteria
Blank or whitespace-only name and address values are rejected beside their controls after touch or submit.
Every strictly positive purchase price is accepted, including values below one euro; zero and negative values are rejected.
Accepted name and address values are trimmed without altering meaningful internal spacing.
An invalid backend request returns HTTP 400 with validation_failed and every core field path/code discovered at the request boundary.
The shared frontend save boundary preserves structured field failures and safely falls back for unknown, conflict, network, and unexpected errors.
Arbitrary internal exception messages are not exposed; conflicts remain 409 and unexpected failures use a safe 500 response.
Focused backend HTTP and Angular behavior tests cover the complete slice and relevant checks pass.
Blocked by
None — can start immediately.
## Parent
#41
## What to build
When a landlord creates or edits an Appartement, make the core name, address, and purchase-price constraints agree end to end. Invalid requests must return every stable machine-readable field failure, and Angular must show actionable French guidance without discarding the structured response or exposing internal exception text.
## Acceptance criteria
- [ ] Blank or whitespace-only name and address values are rejected beside their controls after touch or submit.
- [ ] Every strictly positive purchase price is accepted, including values below one euro; zero and negative values are rejected.
- [ ] Accepted name and address values are trimmed without altering meaningful internal spacing.
- [ ] An invalid backend request returns HTTP 400 with `validation_failed` and every core field path/code discovered at the request boundary.
- [ ] The shared frontend save boundary preserves structured field failures and safely falls back for unknown, conflict, network, and unexpected errors.
- [ ] Arbitrary internal exception messages are not exposed; conflicts remain 409 and unexpected failures use a safe 500 response.
- [ ] Focused backend HTTP and Angular behavior tests cover the complete slice and relevant checks pass.
## Blocked by
- None — can start immediately.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Parent
#41
What to build
When a landlord creates or edits an Appartement, make the core name, address, and purchase-price constraints agree end to end. Invalid requests must return every stable machine-readable field failure, and Angular must show actionable French guidance without discarding the structured response or exposing internal exception text.
Acceptance criteria
validation_failedand every core field path/code discovered at the request boundary.Blocked by
mentioned in issue #44
mentioned in issue #45
mentioned in commit 7c7111139ba57050235c7a184fccd34b51110b5e
Preserved GitLab #43 history: source attribution, exact timestamps, discussion grouping and review positions. Historical diff snapshots: 1; visible source notes: 3.
gitlab-47-issue-43.md (SHA-256
00a1c60b582b0a8f1f24c6f23d2c19527ff820a0a189765bf4c54896a862717e)gitlab-47-issue-43.json (SHA-256
cf3918b1d457fc1dc8aa3252f13411f51d68c74eca939f9de9bd01d62faecf6d)Old CI job execution and reports are omitted. Original source files and rollback backups remain protected.