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
9.0 KiB
9.0 KiB
| 1 | REQ_ID | Description | Phase | Priority | Category | ImplementationRef | TestRef | Status |
|---|---|---|---|---|---|---|---|---|
| 2 | REQ-AUTH-001 | User registration endpoint (POST /auth/register) | 1 | P0 | Auth | backend/src/main/java/com/caloriecounter/controller/AuthController.java + service/AuthService.java + entity/User.java | CalorieCounterIntegrationTest#register_validRequest_returns201WithToken + register_duplicateEmail_returns409 | Implemented |
| 3 | REQ-AUTH-002 | User login with JWT token (POST /auth/login) | 1 | P0 | Auth | backend/src/main/java/com/caloriecounter/controller/AuthController.java + security/JwtTokenProvider.java | CalorieCounterIntegrationTest#login_validCredentials_returnsToken + login_wrongPassword_returns404 | Implemented |
| 4 | REQ-PRF-001 | Get and update user profile (GET/PUT /user/profile) | 1 | P0 | Profile | backend/src/main/java/com/caloriecounter/controller/UserController.java + service/UserService.java + entity/UserProfile.java | Implemented | |
| 5 | REQ-PRF-002 | BMR-based daily calorie target calculation (Mifflin-St Jeor) | 1 | P0 | Profile | backend/src/main/java/com/caloriecounter/service/UserService.java#calculateDailyTarget | Implemented | |
| 6 | REQ-FOOD-001 | Food text search via OpenFoodFacts API (GET /foods?query=) | 1 | P0 | Food | backend/src/main/java/com/caloriecounter/controller/FoodController.java + service/FoodService.java + service/OpenFoodFactsClient.java | Implemented | |
| 7 | REQ-FOOD-002 | Food DB normalisation and local caching | 1 | P1 | Food | backend/src/main/java/com/caloriecounter/entity/FoodItem.java + repository/FoodItemRepository.java + db/migration/V1__initial_schema.sql | Implemented | |
| 8 | REQ-FOOD-003 | Barcode lookup endpoint (GET /foods/barcode/{code}) | 1 | P1 | Food | backend/src/main/java/com/caloriecounter/controller/FoodController.java + service/FoodService.java | Implemented | |
| 9 | REQ-MEAL-001 | Create meal entry (POST /meals) | 1 | P0 | Meals | backend/src/main/java/com/caloriecounter/controller/MealController.java + service/MealService.java + entity/MealEntry.java | CalorieCounterIntegrationTest#createAndFetchDailyOverview | Implemented |
| 10 | REQ-MEAL-002 | Get daily meal overview with calorie totals (GET /meals/daily) | 1 | P0 | Meals | backend/src/main/java/com/caloriecounter/controller/MealController.java + service/MealService.java | CalorieCounterIntegrationTest#createAndFetchDailyOverview | Implemented |
| 11 | REQ-MEAL-003 | Get / update / delete individual meal entry | 1 | P0 | Meals | backend/src/main/java/com/caloriecounter/controller/MealController.java + service/MealService.java | Implemented | |
| 12 | REQ-HIST-001 | Meal history by date range (scrollable daily totals) | 1 | P1 | History | backend/src/main/java/com/caloriecounter/controller/MealController.java#getHistory + service/MealService.java#getHistory | Implemented | |
| 13 | REQ-AI-001 | Photo upload and OpenAI Vision API analysis (POST /ai/analyze-meal) | 2 | P0 | AI | backend/src/main/java/com/caloriecounter/controller/AiController.java + service/AiService.java + mobile/src/screens/CameraScreen.tsx | Implemented | |
| 14 | REQ-AI-002 | AI suggestion confirmation — never auto-save without user action | 2 | P0 | AI | mobile/src/screens/AIResultScreen.tsx (Confirm/Edit CTAs only — no auto-save) | Implemented | |
| 15 | REQ-AI-003 | AI correction storage and feedback loop (POST /ai/correction) | 2 | P1 | AI | backend/src/main/java/com/caloriecounter/controller/AiController.java + entity/PhotoAnalysis.java + mobile/src/screens/EditMealScreen.tsx#saveMeal | Implemented | |
| 16 | REQ-INT-001 | Confidence-aware calorie display (kcal ± range) | 3 | P1 | Intelligence | backend/src/main/java/com/caloriecounter/service/AiService.java#buildSuggestion + mobile/src/components/AISuggestionCard.tsx | Implemented | |
| 17 | REQ-INT-002 | UserFoodMemory personalised portion defaults | 3 | P1 | Intelligence | backend/src/main/java/com/caloriecounter/entity/UserFoodMemory.java + service/MealService.java#updateFoodMemory | Implemented | |
| 18 | REQ-INT-003 | Repeat last meal one-tap shortcut on Home screen | 3 | P2 | Intelligence | mobile/src/screens/HomeScreen.tsx#repeatYesterdayLunch + backend GET /meals/daily | Implemented | |
| 19 | REQ-INT-004 | Macro tracking display (protein / carbs / fat) | 3 | P2 | Intelligence | mobile/src/screens/DailyDetailsScreen.tsx (macro aggregation) + entity/FoodItem.java | Implemented | |
| 20 | REQ-INT-005 | Improve AI suggestions from user corrections | 3 | P2 | Intelligence | backend/src/main/java/com/caloriecounter/service/AiService.java + entity/PhotoAnalysis.java#userCorrections (stored for future training) | Implemented | |
| 21 | REQ-MOB-001 | Home screen — calorie progress card + meal list + FAB | 1 | P0 | Mobile | mobile/src/screens/HomeScreen.tsx | Implemented | |
| 22 | REQ-MOB-002 | Add meal bottom sheet (Photo / Search / Barcode options) | 1 | P0 | Mobile | mobile/src/screens/HomeScreen.tsx (Modal bottom sheet with 2 options) | Implemented | |
| 23 | REQ-MOB-003 | Camera screen for photo capture | 2 | P0 | Mobile | mobile/src/screens/CameraScreen.tsx | Implemented | |
| 24 | REQ-MOB-004 | AI result screen with detected items + confidence + Edit/Confirm CTAs | 2 | P0 | Mobile | mobile/src/screens/AIResultScreen.tsx | Implemented | |
| 25 | REQ-MOB-005 | Edit meal screen with per-item portion sliders + real-time calorie total | 2 | P0 | Mobile | mobile/src/screens/EditMealScreen.tsx | Implemented | |
| 26 | REQ-MOB-006 | Manual food search screen with portion selector | 1 | P0 | Mobile | mobile/src/screens/SearchScreen.tsx | Implemented | |
| 27 | REQ-MOB-007 | Daily details screen — calorie total + macro breakdown | 1 | P1 | Mobile | mobile/src/screens/DailyDetailsScreen.tsx | Implemented | |
| 28 | REQ-MOB-008 | History screen — per-day calorie totals | 1 | P1 | Mobile | mobile/src/screens/HistoryScreen.tsx | Implemented | |
| 29 | REQ-MOB-009 | Profile screen — weight / height / goal / daily target | 1 | P0 | Mobile | mobile/src/screens/ProfileScreen.tsx | Implemented | |
| 30 | REQ-SEC-001 | JWT authentication enforced on all protected routes | 1 | P0 | Security | backend/src/main/java/com/caloriecounter/config/SecurityConfig.java | CalorieCounterIntegrationTest#meals_withoutToken_returns403 | Implemented |
| 31 | REQ-SEC-002 | User data isolation — users can only access their own data | 1 | P0 | Security | backend/src/main/java/com/caloriecounter/service/MealService.java#findAndCheckOwnership + AiService.java ownership check | Implemented | |
| 32 | REQ-SEC-003 | Input validation on all request bodies and path variables | 1 | P0 | Security | backend/src/main/java/com/caloriecounter/dto/** (Jakarta Validation) + controller @Valid + @Pattern on barcode | Implemented | |
| 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 |