Content: a choice field type with ordered options
- Dominant language
- C#
- Stars
- 6
- Forks
- 7
- Avg merge
- 4h 42m
- Merged PRs (30d)
- 307
Description
Found by simulating a Claude Code build of Color Me Fun 2026 through the barako CLI (epic #801) on 14 September 2026; the event registration app for the Rotary Club of Koronadal is the acceptance test. Simulation page: https://claude.ai/code/artifact/05afda1a-6461-431d-aff0-50b30d3b0778
The field type registry has twenty types and none restricts a value to a list. Entry type (FUN or COMPETE), shirt size, gender, a rejection reason and rckoronadal.org's area of focus are free strings, so a typo is valid data, a sold-out size cannot be marked unavailable, and a colour per option (#793 `OptionColors`) has nothing stable to key on.
## Change
A `choice` field type: an ordered list of options, each a stable value and a display label, with `multiple` for a set. The API refuses a value not in the list. Renaming a label keeps the value; removing an option in use is refused unless forced, naming how many entries hold it. Delivery returns the value; the schema endpoint returns the options so barakoBrew renders a picker and barakoPress can map options to colours.
## Done when
- Creating an entry with an option not in the list is a 400 naming the accepted values.
- `GET /api/content-types` returns the options in order, and a filter on a choice field matches by value.
Contributor guide
Research direction
Start at the field type registry and trace entry creation validation, GET /api/content-types, and filtering for content fields. Use the Color Me Fun 2026 registration scenario as the acceptance context; done means invalid values receive a 400 naming accepted values, options are returned in order, and filtering matches by stable value.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp
- Domain
- backend-api-design, content
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100