added info to meal

This commit is contained in:
2025-10-25 16:17:50 +02:00
parent 38db9c242b
commit b8046c87b9
4 changed files with 465 additions and 57 deletions

View File

@@ -1,76 +1,123 @@
MEAL ENHANCEMENTS - WORKING!
EDIT MEAL FEATURE - IMPLEMENTED
=== ✅ IMPLEMENTATION COMPLETE ===
=== ✅ NEW FEATURE ===
Meals now have:
1. Instructions (multi-line)
2. Prep time (minutes)
3. Image (URL)
You can now EDIT existing meals!
=== IF MEALS/WEEK PLAN TABS DON'T LOAD ===
Click "Edit" button → Modal opens → Make changes → Save
Your database needs the new columns!
=== HOW IT WORKS ===
SOLUTION - Option 1 (Fresh start):
rm mealprep.db
./start.sh
SOLUTION - Option 2 (Keep data):
Just restart the server - migration runs automatically!
./start.sh
The migration will:
- Check if new columns exist
- Add them if missing (instructions, prep_time, image_url)
- Keep all your existing data
- No data loss
=== HOW TO VERIFY ===
After restart:
1. Go to Meals tab
2. Form should have:
1. Click "Edit" button on any meal
2. Modal dialog opens with form
3. All fields pre-filled with current values:
- Name
- Description
- Type dropdown
- Prep time (NEW)
- Image URL (NEW)
- Instructions textarea (NEW)
- Description
- Type (breakfast/lunch/snack)
- Prep time
- Image URL
- Instructions
4. Change what you want
5. Click "Save" → Modal closes, meal updates
6. Click "Cancel" → Modal closes, no changes
If you see the new fields, it's working!
=== SECURITY ===
=== FEATURES ===
✅ User isolation enforced:
- GetMealByID(userID, mealID) verifies ownership
- Users CANNOT edit others' meals
- Users CANNOT access others' meal data
- UPDATE query filters by user_id
- All queries parameterized (SQL injection safe)
Instructions:
- Multi-line textarea
- Click to expand/collapse on meal card
- Optional
✅ Modal security:
- Closes on click outside
- Close button works
- No data exposed
- XSS protected (template escaping)
Prep Time:
- Number input (minutes)
- Shows as "⏱️ XX min" badge
- Optional
=== UI FEATURES ===
Image:
- URL input
- Shows as 120x120px thumbnail
- Optional
Modal Dialog:
- Semi-transparent overlay
- Centered white box
- All fields editable
- Save button (blue)
- Cancel button (gray)
- Click outside to close
- Clean, professional design
=== ALL FIELDS OPTIONAL ===
Buttons:
- Edit (orange) - opens modal
- Save (blue) - updates meal
- Cancel (gray) - closes modal
You can:
- Leave them blank
- Fill only some
- Fill all of them
=== WHAT CAN BE EDITED ===
Old meals without these fields work fine!
Everything:
- ✅ Name
- ✅ Description
- ✅ Meal type (breakfast/lunch/snack)
- ✅ Prep time
- ✅ Image URL
- ✅ Instructions
=== AFTER SAVE ===
- Modal closes automatically
- Meal card updates instantly
- No page reload (HTMX)
- All changes visible immediately
- Edit button still works
=== CODE CHANGES ===
handlers/meals.go:
- GetEditMealHandler() - shows modal with form
- UpdateMealHandler() - saves changes with security
- Added Edit button to meal cards
main.go:
- /meals/:id/edit route (GET)
- /meals/:id/update route (POST)
static/styles.css:
- Modal overlay styles
- Modal content styles
- Form styles
- Button styles
=== SECURITY CHECKS ===
Edit Modal:
1. Check session (middleware)
2. Get userID from context
3. Verify meal ownership
4. Show form if authorized
5. 404 if not found/unauthorized
Update:
1. Check session (middleware)
2. Get userID from context
3. Verify meal ownership BEFORE update
4. Validate all inputs
5. Validate meal type
6. UPDATE with user_id filter
7. Return 403 if unauthorized
SQL Queries:
- All parameterized
- No string concatenation
- User isolation enforced
- No SQL injection possible
=== READY TO USE ===
Migration included
Auto-updates old databases
No data loss
All features work
Build successful
Security implemented
User isolation working
Modal working
✅ All features preserved
Just restart the server and you're good!
Just restart if needed!