060b2953fa89e87905d5253df95766b2c2f9ead9
All checks were successful
Gitea Actions Demo / build-and-push (push) Successful in 49s
- Implemented account deletion scheduler in `account_deletion_scheduler.py` to manage user deletions based on a defined threshold. - Added logging for deletion processes, including success and error messages. - Created tests for deletion logic, including edge cases, retry logic, and integration tests to ensure complete deletion workflows. - Ensured that deletion attempts are tracked and that users are marked for manual intervention after exceeding maximum attempts. - Implemented functionality to check for interrupted deletions on application startup and retry them.
Refactor build workflow to separate backend and frontend image builds; enhance clarity and structure
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
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
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:
- Remove all pending rewards for the user's children
- Remove all children belonging to the user
- Remove all user-created tasks
- Remove all user-created rewards
- Remove uploaded images from database
- Delete user's image directory from filesystem
- Remove the user account
Configuration: Set the deletion threshold via environment variable:
export ACCOUNT_DELETION_THRESHOLD_HOURS=168 # 7 days
Monitoring:
- Logs are written to
logs/account_deletion.logwith 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.
Account Deletion Management
GET /api/admin/deletion-queue- View users pending deletionGET /api/admin/deletion-threshold- Get current deletion thresholdPUT /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 deletionGET /api/me- Get current user infoPOST /api/login- User loginPOST /api/logout- User logout
🧪 Testing
Backend Tests
cd backend
pytest tests/
Frontend Tests
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
- Admin-only endpoints protected by role validation
- 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.
📄 License
Private project - All rights reserved.
Description
Languages
Python
47.9%
Vue
32.1%
TypeScript
18.6%
CSS
1.2%
Dockerfile
0.2%