feat: Convert condition_grade to dropdown with human-readable labels and descriptions
Resolved 💬 3 comments Opened Jan 7, 2026 by markthebest12 Closed Feb 13, 2026
Summary
The condition_grade field is currently a free-form text input that expects specific enum values (FINE, VERY_GOOD, GOOD, FAIR, POOR). This causes validation errors when legacy data or user input doesn't match exactly.
Current Behavior
- Text input allows any value
- Backend expects uppercase enum values
- Legacy data may have "Good" instead of "GOOD"
- Cryptic validation errors shown to users
Proposed Solution
Convert to a dropdown with:
- Human-readable labels (e.g., "Very Good" displays, "VERY_GOOD" stored)
- Brief descriptions explaining each grade level, e.g.:
- Fine: Near perfect, minimal wear
- Very Good: Minor wear, tight binding, clean pages
- Good: Average used condition, some wear visible
- Fair: Heavy wear but complete and readable
- Poor: Significant damage or defects
Files to Modify
frontend/src/components/books/BookForm.vue- Replace text input with selectfrontend/src/constants/index.ts- Add CONDITION_GRADE_OPTIONS with labels/descriptions- Consider: Backend migration to normalize existing data
Related
- Also applies to
provenance_tierwhich uses "Tier 1" instead of "TIER_1"
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗