v0.2.1 — Code Review Fixes

Fixes:
- CRITICAL: compareVersions used string comparison, fails for 1.10 vs 1.9 (now numeric)
- CRITICAL: Double CloseDatabase() in main.go (defer + OnShutdown)
- CRITICAL: Tailwind v4 in package.json but v3 config/syntax (downgraded to v3)
- CRITICAL: react-router-dom v7 with v5 types (switched to v6, removed deprecated types)
- IMPORTANT: UpdatePlanEntry hook signature mismatch (7 args vs Go's 4)
- IMPORTANT: AllergenPicker hidden checkbox inaccessible to screenreaders (sr-only)
- IMPORTANT: weekHelper getWeekFromDate returned wrong ISO year for edge cases
- IMPORTANT: getWeeksInYear bug for years where Dec 31 is in week 1 of next year
- IMPORTANT: getDateFromWeek off-by-one for some years (use Jan 4 anchor)
- IMPORTANT: ProductSearch click-outside missed dropdown (use container ref)
- IMPORTANT: seed.go LastInsertId=0 on INSERT OR IGNORE skip
- IMPORTANT: SQLite missing PRAGMA foreign_keys=ON and WAL mode
- IMPORTANT: AdditivePicker ADDITIVE_NAMES used numeric IDs but data uses letters
- IMPORTANT: Missing role=dialog/aria-modal on all modal dialogs
- IMPORTANT: Missing Escape key handler on ProductForm modal
- IMPORTANT: Sidebar NavLink aria-current used function instead of string
- IMPORTANT: useProducts searchProducts null safety for allergens/additives
- NICE-TO-HAVE: Added aria-live=polite to WeekPlanner for dynamic updates
- NICE-TO-HAVE: Added postcss.config.js for Tailwind v3
- NICE-TO-HAVE: Updated model comments to match actual day/meal conventions
- NICE-TO-HAVE: Modernized vite/typescript/plugin versions
This commit is contained in:
clawd
2026-02-20 10:11:54 +00:00
parent e146442513
commit df9e7c5541
17 changed files with 98 additions and 84 deletions

View File

@@ -40,8 +40,8 @@ type WeekPlan struct {
type PlanEntry struct {
ID int `json:"id" db:"id"`
WeekPlanID int `json:"week_plan_id" db:"week_plan_id"`
Day int `json:"day" db:"day"` // 0=Mo, 1=Di, 2=Mi, 3=Do, 4=Fr
Meal string `json:"meal" db:"meal"` // 'breakfast' oder 'snack'
Day int `json:"day" db:"day"` // 1=Mo, 2=Di, 3=Mi, 4=Do, 5=Fr
Meal string `json:"meal" db:"meal"` // 'fruehstueck' oder 'vesper'
Slot int `json:"slot" db:"slot"` // Reihenfolge innerhalb des Tages
ProductID *int `json:"product_id" db:"product_id"`
Product *Product `json:"product,omitempty"`
@@ -53,8 +53,8 @@ type PlanEntry struct {
type SpecialDay struct {
ID int `json:"id" db:"id"`
WeekPlanID int `json:"week_plan_id" db:"week_plan_id"`
Day int `json:"day" db:"day"` // 0=Mo, 1=Di, ...
Type string `json:"type" db:"type"` // 'holiday' oder 'closed'
Day int `json:"day" db:"day"` // 1=Mo, 2=Di, ...
Type string `json:"type" db:"type"` // 'feiertag' oder 'schliesstag'
Label *string `json:"label" db:"label"` // z.B. "Neujahr", "Teamtag"
}