# Reward - Chore & Reward Management System A family-friendly application for managing chores, tasks, and rewards for children. ## ๐Ÿ—๏ธ Architecture - **Backend**: Flask (Python) with TinyDB for data persistence - **Frontend**: Vue 3 (TypeScript) with real-time SSE updates - **Deployment**: Docker with nginx reverse proxy ## ๐Ÿš€ Getting Started ### Backend ```bash cd backend python -m venv .venv .venv\Scripts\activate # Windows source .venv/bin/activate # Linux/Mac pip install -r requirements.txt python -m flask run --host=0.0.0.0 --port=5000 ``` ### Frontend ```bash cd frontend/vue-app npm install npm run dev ``` ## ๐Ÿ”ง Configuration ### Environment Variables | Variable | Description | Default | | ---------------------------------- | --------------------------------------------- | ------------- | | `ACCOUNT_DELETION_THRESHOLD_HOURS` | Hours to wait before deleting marked accounts | 720 (30 days) | | `DB_ENV` | Database environment (`prod` or `test`) | `prod` | | `DATA_ENV` | Data directory environment (`prod` or `test`) | `prod` | ### Account Deletion Scheduler The application includes an automated account deletion scheduler that removes user accounts marked for deletion after a configurable threshold period. **Key Features:** - Runs every hour checking for accounts due for deletion - Configurable threshold between 24 hours (minimum) and 720 hours (maximum) - Automatic retry on failure (max 3 attempts) - Restart-safe: recovers from interruptions during deletion **Deletion Process:** When an account is marked for deletion, the scheduler will automatically: 1. Remove all pending rewards for the user's children 2. Remove all children belonging to the user 3. Remove all user-created tasks 4. Remove all user-created rewards 5. Remove uploaded images from database 6. Delete user's image directory from filesystem 7. Remove the user account **Configuration:** Set the deletion threshold via environment variable: ```bash export ACCOUNT_DELETION_THRESHOLD_HOURS=168 # 7 days ``` **Monitoring:** - Logs are written to `logs/account_deletion.log` with rotation (10MB max, 5 backups) - Check logs for deletion summaries and any errors ## ๐Ÿ”Œ API Endpoints ### Admin Endpoints All admin endpoints require JWT authentication and **admin role**. **Note:** Admin users must be created manually or via the provided script (`backend/scripts/create_admin.py`). The admin role cannot be assigned through the signup API for security reasons. **Creating an Admin User:** ```bash cd backend python scripts/create_admin.py ``` #### Account Deletion Management - `GET /api/admin/deletion-queue` - View users pending deletion - `GET /api/admin/deletion-threshold` - Get current deletion threshold - `PUT /api/admin/deletion-threshold` - Update deletion threshold (24-720 hours) - `POST /api/admin/deletion-queue/trigger` - Manually trigger deletion scheduler ### User Endpoints - `POST /api/user/mark-for-deletion` - Mark current user's account for deletion - `GET /api/me` - Get current user info - `POST /api/login` - User login - `POST /api/logout` - User logout ## ๐Ÿงช Testing ### Backend Tests ```bash cd backend pytest tests/ ``` ### Frontend Tests ```bash cd frontend/vue-app npm run test ``` ## ๐Ÿ“ Features - โœ… User authentication with JWT tokens - โœ… Child profile management - โœ… Task assignment and tracking - โœ… Reward system - โœ… Real-time updates via SSE - โœ… Image upload and management - โœ… Account deletion with grace period - โœ… Automated cleanup scheduler ## ๐Ÿ”’ Security - JWT tokens stored in HttpOnly, Secure, SameSite=Strict cookies - **Role-Based Access Control (RBAC)**: Admin endpoints protected by admin role validation - Admin users can only be created via direct database manipulation or provided script - Regular users cannot escalate privileges to admin - Account deletion requires email confirmation - Marked accounts blocked from login immediately ## ๐Ÿ“ Project Structure ``` . โ”œโ”€โ”€ backend/ โ”‚ โ”œโ”€โ”€ api/ # REST API endpoints โ”‚ โ”œโ”€โ”€ config/ # Configuration files โ”‚ โ”œโ”€โ”€ db/ # TinyDB setup โ”‚ โ”œโ”€โ”€ events/ # SSE event system โ”‚ โ”œโ”€โ”€ models/ # Data models โ”‚ โ”œโ”€โ”€ tests/ # Backend tests โ”‚ โ””โ”€โ”€ utils/ # Utilities (scheduler, etc) โ”œโ”€โ”€ frontend/ โ”‚ โ””โ”€โ”€ vue-app/ โ”‚ โ””โ”€โ”€ src/ โ”‚ โ”œโ”€โ”€ common/ # Shared utilities โ”‚ โ”œโ”€โ”€ components/ # Vue components โ”‚ โ””โ”€โ”€ layout/ # Layout components โ””โ”€โ”€ .github/ โ””โ”€โ”€ specs/ # Feature specifications ``` ## ๐Ÿ› ๏ธ Development For detailed development patterns and conventions, see [`.github/copilot-instructions.md`](.github/copilot-instructions.md). ## ๐Ÿ“š References - Reset flow (token validation, JWT invalidation, cross-tab logout sync): [`docs/reset-password-reference.md`](docs/reset-password-reference.md) ## ๐Ÿ“„ License Private project - All rights reserved.