feat: Phase 4 — 9 new features (v1.1)
Some checks failed
CI / Build & test backend (push) Failing after 14m56s

REQ-MOB-010: BarcodeScreen.tsx — barcode scanner via react-native-camera
REQ-VIZ-001: WeeklyCalorieChart.tsx — 7-day bar chart on History screen
REQ-VIZ-002: Streak tracker — GET /meals/streak + HomeScreen badge
REQ-UX-001: Quick-add calories — POST /meals/quick-add + QuickAddScreen
REQ-UX-002: Food favourites — UserFoodMemory.favourite + toggle endpoint + FoodRow star
REQ-UX-003: GoalBanner.tsx — in-app slide-in when daily target hit
REQ-EXP-001: ExportController — GET /export/meals CSV download
REQ-WTR-001: Water tracking — WaterEntry entity + POST/GET /water + DailyDetails widget
REQ-UX-004: Daily logging reminder — HomeScreen after-18:00 banner

Also: Flyway V2 (favourite), V3 (water_entries), V4 (source constraints)
Traceability, CHANGELOG, PLAN updated after each feature
This commit is contained in:
2026-05-19 02:11:23 +03:00
parent 904f1c43b3
commit 12820632e7
46 changed files with 8151 additions and 63 deletions

View File

@@ -33,3 +33,12 @@ REQ-SEC-003,Input validation on all request bodies and path variables,1,P0,Secur
REQ-SEC-004,No secrets hardcoded — all via environment variables,1,P0,Security,backend/src/main/resources/application.yml (${DB_PASSWORD} ${JWT_SECRET} ${OPENAI_API_KEY}),,Implemented
REQ-A11Y-001,WCAG 2.2 AA compliance — contrast ratio >= 4.5:1 on all UI,1,P1,Accessibility,mobile/src/theme/colors.ts (contrast-verified tokens) + accessibilityLabel on all interactive elements,,Implemented
REQ-A11Y-002,Minimum 48x48px touch targets on all interactive elements,1,P1,Accessibility,mobile/src/theme/spacing.ts#touchTarget=48 + all buttons/rows enforce minHeight,,Implemented
REQ-MOB-010,Barcode scanner mobile screen (REQ-MOB-002 gap fix),4,P0,Mobile,mobile/src/screens/BarcodeScreen.tsx + navigation/AppNavigator.tsx (Barcode route) + screens/HomeScreen.tsx (Scan Barcode option),,Implemented
REQ-VIZ-001,Weekly calorie bar chart on History screen,4,P1,Visualisation,mobile/src/components/WeeklyCalorieChart.tsx + screens/HistoryScreen.tsx (last-7-days aggregation + target line),,Implemented
REQ-VIZ-002,Streak tracker — consecutive days logged,4,P1,Visualisation,backend/src/main/java/com/caloriecounter/service/MealService.java#getStreak + repository/MealEntryRepository.java#findDistinctDatesByUserId + controller/MealController.java#getStreak + mobile/src/screens/HomeScreen.tsx (streak badge) + services/api.ts#getStreak,,Implemented
REQ-UX-001,Quick-add calories without food search,4,P2,UX,backend/src/main/java/com/caloriecounter/service/MealService.java#quickAddMeal + controller/MealController.java#quickAdd + entity/MealEntry.java (quickadd source) + entity/FoodItem.java (quickadd source) + mobile/src/screens/QuickAddScreen.tsx + services/api.ts#quickAddCalories,,Implemented
REQ-UX-002,Food favourites — star items in search,4,P2,UX,backend: entity/UserFoodMemory.java (favourite field) + db/migration/V2__add_favourite_to_user_food_memory.sql + repository/UserFoodMemoryRepository.java + service/FoodService.java#toggleFavourite + service/FoodService.java#getFavourites + controller/FoodController.java (GET /foods/favourites + POST /foods/{id}/favourite); mobile: components/FoodRow.tsx (star icon) + screens/SearchScreen.tsx (favourites section) + services/api.ts#getFavourites#toggleFavourite,,Implemented
REQ-UX-003,Goal achievement in-app notification,4,P2,UX,mobile/src/components/GoalBanner.tsx + screens/HomeScreen.tsx (goalReached state + banner render),,Implemented
REQ-EXP-001,Data export as CSV,4,P3,Export,backend/src/main/java/com/caloriecounter/controller/ExportController.java (GET /export/meals) + mobile/src/screens/ProfileScreen.tsx (Export button + Share) + services/api.ts#exportMeals,,Implemented
REQ-WTR-001,Water intake tracking,4,P3,Water,backend: entity/WaterEntry.java + repository/WaterEntryRepository.java + controller/WaterController.java + db/migration/V3__water_entries.sql; mobile: screens/DailyDetailsScreen.tsx (water widget) + services/api.ts#getWaterDaily#logWater,,Implemented
REQ-UX-004,Daily logging reminder banner,4,P3,UX,mobile/src/screens/HomeScreen.tsx (showLogReminder state — shown after 18:00 if totalCalories === 0; dismissible),,Implemented
1 REQ_ID Description Phase Priority Category ImplementationRef TestRef Status
33 REQ-SEC-004 No secrets hardcoded — all via environment variables 1 P0 Security backend/src/main/resources/application.yml (${DB_PASSWORD} ${JWT_SECRET} ${OPENAI_API_KEY}) Implemented
34 REQ-A11Y-001 WCAG 2.2 AA compliance — contrast ratio >= 4.5:1 on all UI 1 P1 Accessibility mobile/src/theme/colors.ts (contrast-verified tokens) + accessibilityLabel on all interactive elements Implemented
35 REQ-A11Y-002 Minimum 48x48px touch targets on all interactive elements 1 P1 Accessibility mobile/src/theme/spacing.ts#touchTarget=48 + all buttons/rows enforce minHeight Implemented
36 REQ-MOB-010 Barcode scanner mobile screen (REQ-MOB-002 gap fix) 4 P0 Mobile mobile/src/screens/BarcodeScreen.tsx + navigation/AppNavigator.tsx (Barcode route) + screens/HomeScreen.tsx (Scan Barcode option) Implemented
37 REQ-VIZ-001 Weekly calorie bar chart on History screen 4 P1 Visualisation mobile/src/components/WeeklyCalorieChart.tsx + screens/HistoryScreen.tsx (last-7-days aggregation + target line) Implemented
38 REQ-VIZ-002 Streak tracker — consecutive days logged 4 P1 Visualisation backend/src/main/java/com/caloriecounter/service/MealService.java#getStreak + repository/MealEntryRepository.java#findDistinctDatesByUserId + controller/MealController.java#getStreak + mobile/src/screens/HomeScreen.tsx (streak badge) + services/api.ts#getStreak Implemented
39 REQ-UX-001 Quick-add calories without food search 4 P2 UX backend/src/main/java/com/caloriecounter/service/MealService.java#quickAddMeal + controller/MealController.java#quickAdd + entity/MealEntry.java (quickadd source) + entity/FoodItem.java (quickadd source) + mobile/src/screens/QuickAddScreen.tsx + services/api.ts#quickAddCalories Implemented
40 REQ-UX-002 Food favourites — star items in search 4 P2 UX backend: entity/UserFoodMemory.java (favourite field) + db/migration/V2__add_favourite_to_user_food_memory.sql + repository/UserFoodMemoryRepository.java + service/FoodService.java#toggleFavourite + service/FoodService.java#getFavourites + controller/FoodController.java (GET /foods/favourites + POST /foods/{id}/favourite); mobile: components/FoodRow.tsx (star icon) + screens/SearchScreen.tsx (favourites section) + services/api.ts#getFavourites#toggleFavourite Implemented
41 REQ-UX-003 Goal achievement in-app notification 4 P2 UX mobile/src/components/GoalBanner.tsx + screens/HomeScreen.tsx (goalReached state + banner render) Implemented
42 REQ-EXP-001 Data export as CSV 4 P3 Export backend/src/main/java/com/caloriecounter/controller/ExportController.java (GET /export/meals) + mobile/src/screens/ProfileScreen.tsx (Export button + Share) + services/api.ts#exportMeals Implemented
43 REQ-WTR-001 Water intake tracking 4 P3 Water backend: entity/WaterEntry.java + repository/WaterEntryRepository.java + controller/WaterController.java + db/migration/V3__water_entries.sql; mobile: screens/DailyDetailsScreen.tsx (water widget) + services/api.ts#getWaterDaily#logWater Implemented
44 REQ-UX-004 Daily logging reminder banner 4 P3 UX mobile/src/screens/HomeScreen.tsx (showLogReminder state — shown after 18:00 if totalCalories === 0; dismissible) Implemented