Education feature #23

Closed
opened 2026-06-12 20:28:22 +00:00 by james · 0 comments
Owner

Scope

Each Education entry has: Name of institution, Type (School, Training, Certificate, Other), Focus/Degree, Dates (start, end — end may be open), Description.

Backend:

  • Entity + migration. Each row carries a user_id FK. Type stored portably across SQLite and Postgres (string with a CHECK constraint or equivalent — avoid Postgres-only enums).
  • Full CRUD API + DTOs. All queries scoped to the authenticated user.
  • Tests on both DB engines, including cross-user isolation.

Frontend:

  • Education subsection under Experience.
  • List view + create/edit form.

Acceptance criteria

  • Add, edit, delete, list works end-to-end.
  • Type values are constrained on both engines.
  • User A's list does not include any of User B's entries.

Part of epic #4. Depends on #8, #10, #20.

## Scope Each Education entry has: Name of institution, Type (`School`, `Training`, `Certificate`, `Other`), Focus/Degree, Dates (start, end — end may be open), Description. Backend: - Entity + migration. **Each row carries a `user_id` FK.** `Type` stored portably across SQLite and Postgres (string with a CHECK constraint or equivalent — avoid Postgres-only enums). - Full CRUD API + DTOs. **All queries scoped to the authenticated user.** - Tests on both DB engines, **including cross-user isolation**. Frontend: - Education subsection under Experience. - List view + create/edit form. ## Acceptance criteria - [ ] Add, edit, delete, list works end-to-end. - [ ] Type values are constrained on both engines. - [ ] User A's list does not include any of User B's entries. Part of epic #4. Depends on #8, #10, #20.
james closed this issue 2026-06-19 13:20:17 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
james/carol#23
No description provided.