feat(F-085): completed feature
This commit is contained in:
26
work/artifacts/F-085/architect.md
Normal file
26
work/artifacts/F-085/architect.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# F-085 — Architect: /tax-rates TIPO column is not editable
|
||||
|
||||
## Root cause
|
||||
|
||||
`/admin/tax-rates` PATCH route (`project/src/modules/pricing/api/pricing.routes.ts`) only accepts `{ name, ratePercent, active }`; `appliesTo` is not in the body schema and not written to the DB. The admin page renders the column as plain `<td>{r.appliesTo}</td>`.
|
||||
|
||||
## Design
|
||||
|
||||
1. Extend the PATCH body Zod schema with `appliesTo: z.enum(['general','reduced','super-reduced']).optional()`. Server validates the value against the enum (no DB constraint, but rejection is fast and the error message is clear).
|
||||
2. Add a new UPDATE branch for `applies_to` mirroring the existing ones.
|
||||
3. In the admin page, the TIPO cell is now click-to-edit:
|
||||
- Click `<button>` → switches to a `<select autoFocus>` with the three valid values.
|
||||
- On `change`, if the new value differs, fire PATCH immediately and close edit mode.
|
||||
- On `blur`, if value still equals the original, just close; if different and `change` already fired, no-op.
|
||||
4. Success path updates the row in-place (`rates.map(...)`).
|
||||
|
||||
## Risk
|
||||
|
||||
Low. Server-side enum validation; no SQL injection; no new deps.
|
||||
|
||||
## Acceptance mapping
|
||||
- "TIPO cell enters edit mode on click and shows a select with allowed types" → button → select.
|
||||
- "Selecting a new type and confirming triggers PATCH /tax-rates/:id" → onChange path.
|
||||
- "Invalid types are rejected client and server side" → Zod enum on server; select restricts client.
|
||||
- "Successful change is reflected without a full page reload" → in-place state update.
|
||||
- "verify.sh is green" → typecheck + lint clean.
|
||||
Reference in New Issue
Block a user