|
feat: геймификация — XP, уровни, сад и ачивки (ТЗ 0.8, п. 3.13)
Награда за закрытие задачи, принцип «только позитив» (без стриков и сгорания):
- XP = 10 база + бонус за приоритет (0–15) + бонус за оценку времени (0–15),
один раз на задачу (xp_events, UniqueConstraint); удаление задачи не отнимает
- PATCH /api/tasks/{id} при первом закрытии ставит заголовок X-Earned-XP,
фронт ловит его и празднует: конфетти + тост «+N XP» с похвалой
- GET /api/xp — сводка (total_xp, уровень, прогресс)
- Сад (/garden): растение за каждую закрытую задачу + уровень + ачивки-вехи
(1/10/50 задач, уровни 5/10, регулярная, закрытый проект) с прогрессом
- celebrateEarned() в TaskView/ListView/ProjectView/OptionsView; локали ru/en/uk
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
|---|
|
|
| backend/alembic/versions/a1f2c3d4e5f6_xp_events_table.py 0 → 100644 |
|---|
| backend/app/api/tasks.py |
|---|
| backend/app/api/xp.py 0 → 100644 |
|---|
| backend/app/main.py |
|---|
| backend/app/models.py |
|---|
| backend/app/services/xp.py 0 → 100644 |
|---|
| backend/tests/test_xp.py 0 → 100644 |
|---|
| docs/TZ.md |
|---|
| frontend/src/App.vue |
|---|
| frontend/src/api.ts |
|---|
| frontend/src/components/GamifyBridge.vue 0 → 100644 |
|---|
| frontend/src/gamification.ts 0 → 100644 |
|---|
| frontend/src/locales/en.ts |
|---|
| frontend/src/locales/ru.ts |
|---|
| frontend/src/locales/uk.ts |
|---|
| frontend/src/main.ts |
|---|
| frontend/src/views/GardenView.vue 0 → 100644 |
|---|
| frontend/src/views/ListView.vue |
|---|
| frontend/src/views/OptionsView.vue |
|---|
| frontend/src/views/ProjectView.vue |
|---|
| frontend/src/views/TaskView.vue |
|---|