Auth v2: Register/Login/Profile, Households, per-user Favorites/Notes/Shopping, Frontend Auth Pages

This commit is contained in:
clawd
2026-02-18 15:47:13 +00:00
parent b0bd3e533f
commit 30e44370a1
32 changed files with 3561 additions and 113 deletions

View File

@@ -0,0 +1,116 @@
# Auth v2 Phase 2: Households Backend - Implementation Summary
## ✅ What was implemented
### 1. Database Migration (004_households.sql)
- ✅ Created `households` table with id, name, invite_code, created_at
- ✅ Created `household_members` table for many-to-many user-household relationships
- ✅ Added `household_id` column to `shopping_items` table
- ✅ Added proper indexes for performance
### 2. Household Service (`src/services/household.service.ts`)
-`createHousehold(userId, name)` - Creates household and makes user owner
-`joinHousehold(userId, inviteCode)` - User joins household with invite code
-`getMyHousehold(userId)` - Get user's household with member list
-`leaveHousehold(userId, householdId)` - Leave or delete household
-`regenerateInviteCode(userId, householdId)` - Owner-only invite code regeneration
- ✅ Automatic 8-character unique invite code generation
- ✅ Proper role management (owner/member)
### 3. Household Routes (`src/routes/households.ts`)
-`POST /api/households` - Create household (authenticated)
-`GET /api/households/mine` - Get my household (authenticated)
-`POST /api/households/join` - Join with invite code (authenticated)
-`POST /api/households/:id/invite` - Regenerate invite (owner only)
-`DELETE /api/households/:id/leave` - Leave household (authenticated)
### 4. Shopping Items Extended
- ✅ Updated `shopping.service.ts` to support user_id and household_id
- ✅ Added `scope` parameter support: `?scope=personal` vs `?scope=household`
- ✅ Personal shopping: user-specific items
- ✅ Household shopping: shared items for household members
- ✅ Proper access control - users can only modify their own or household items
### 5. Favorites Per User
- ✅ Updated `recipe.service.ts` to use `user_favorites` table instead of `is_favorite` column
-`toggleFavorite(id, userId)` - Per-user favorites
-`listRecipes()` - Shows user-specific favorite status
-`GET /api/recipes?favorite=true` - Only user's favorites
### 6. Notes Per User
- ✅ Updated `note.service.ts` to filter by user_id
- ✅ Users only see and can modify their own notes
- ✅ Maintains backward compatibility for unauthenticated access
### 7. Routes Registration
- ✅ Added household routes to `src/app.ts`
## ✅ Test Results
All tests performed successfully with two test users:
### User Management
- ✅ User registration and login working
- ✅ JWT tokens generated and accepted
### Household Functionality
-**Household Creation**: User 1 created "Test Family" household with invite code EF27Y501
-**Household Joining**: User 2 successfully joined using invite code
-**Member Roles**: User 1 = owner, User 2 = member
-**Invite Code Regeneration**: Owner (User 1) can regenerate → new code: 9IBNZMRM
-**Permission Control**: Member (User 2) cannot regenerate invite codes (403 Forbidden)
### Shopping Lists
-**Personal Scope**: Each user sees only their own personal items
- User 1 personal: "User1 Personal Item" (2 pieces)
- User 2 personal: "User2 Personal Coffee" (1 bag)
-**Household Scope**: Both users see same household items
- "Household Milk" (1 liter) - added by User 1
- "Household Bread" (2 loaves) - added by User 2
-**Scope Isolation**: Personal and household lists completely separate
### Favorites System
-**Per-User Favorites**: Each user has independent favorite recipes
-**Toggle Functionality**: User 1 favorites recipe → User 2 unfavorites same recipe
-**Isolated Lists**: User 1 has 1 favorite, User 2 has 0 favorites
### Notes System
-**Per-User Notes**: Each user sees only their own notes on recipes
-**Content Isolation**:
- User 1 note: "User1 note: This is my favorite recipe!"
- User 2 note: "User2 note: Need to try this recipe soon."
-**Privacy**: Users cannot see other users' notes
### API Endpoints Tested
```
✅ POST /api/auth/register
✅ POST /api/households
✅ GET /api/households/mine
✅ POST /api/households/join
✅ POST /api/households/:id/invite
✅ GET /api/shopping?scope=personal
✅ GET /api/shopping?scope=household
✅ POST /api/shopping
✅ POST /api/shopping?scope=household
✅ PATCH /api/recipes/:id/favorite
✅ GET /api/recipes?favorite=true
✅ POST /api/recipes/:id/notes
✅ GET /api/recipes/:id/notes
```
## 🚀 System Status
- ✅ Database migrations applied successfully
- ✅ Backend server running on http://localhost:6001
- ✅ All core household features working as specified
- ✅ Proper authentication and authorization
- ✅ Data isolation between users and households
- ✅ Backward compatibility maintained for non-authenticated access
## 🔒 Security Features
- ✅ JWT-based authentication for all household operations
- ✅ Owner-only actions properly restricted
- ✅ User data isolation (personal shopping, favorites, notes)
- ✅ Household data sharing only between members
- ✅ Proper error handling and validation
Phase 2 implementation **COMPLETE** and fully tested! 🎉