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 select
  • frontend/src/constants/index.ts - Add CONDITION_GRADE_OPTIONS with labels/descriptions
  • Consider: Backend migration to normalize existing data

Related

  • Also applies to provenance_tier which uses "Tier 1" instead of "TIER_1"

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗