diff --git a/RELEASE_NOTES_v1.24.0.md b/RELEASE_NOTES_v1.24.0.md new file mode 100644 index 0000000..1877ad7 --- /dev/null +++ b/RELEASE_NOTES_v1.24.0.md @@ -0,0 +1,21 @@ +# Release Notes v1.24.0 πŸš€ + +## πŸ€– AI-ΠšΠΎΡƒΡ‡ ΠΈ ΠŸΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΠ΅ Паники +- **НовоС CBT-ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ Β«ΠŸΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ ΠΈ ΠΏΠ°Π½ΠΈΠΊΠΈΒ» (`anxiety_management`)**: ΠŸΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ соматичСский Π³ΠΈΠ΄ ΠΈΠ· 4 этапов для бСзопасной Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π΄Ρ€Π΅Π½Π°Π»ΠΈΠ½ΠΎΠ²Ρ‹Ρ… всплСсков ΠΈ мыслСнных ΠΏΠ΅Ρ‚Π΅Π»ΡŒ. +- **Π˜Π½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π’Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹**: ИИ-АссистСнт автоматичСски Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова "ΠΏΠ°Π½ΠΈΠΊΠ°", "паничСская Π°Ρ‚Π°ΠΊΠ°", "Ρ‚Ρ€Π΅Π²ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ" ΠΈ Π·Π° ΠΏΠ°Ρ€Ρƒ сСкунд ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠΎΠΌΠΎΡ‰ΡŒ. + +## πŸ’¬ БообщСство ΠΈ ЭкстрСнная ΠŸΠΎΠΌΠΎΡ‰ΡŒ +- **ЭкстрСнный Π˜ΠΌΠΏΡƒΠ»ΡŒΡ ΠŸΠΎΠΌΠΎΡ‰ΠΈ (`sendPanicSupportPulse`)**: Ѐункция ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ извСщСния Ρ‚Ρ€Π΅Π·Π²ΠΎΠ³ΠΎ Π½Π°ΠΏΠ°Ρ€Π½ΠΈΠΊΠ° ΠΈΠ»ΠΈ сообщСства Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ острого приступа страха с Π²ΠΎΠ·Π½Π°Π³Ρ€Π°ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ +15 ΠΎΡ‡ΠΊΠΎΠ² ΠšΠ°Ρ€ΠΌΡ‹. + +## πŸ“š ΠšΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΠΈ ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ +- **Новый ΠΌΠΈΠΊΡ€ΠΎ-курс Β«Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΎΠΉ ΠΈ ΠΏΠ°Π½ΠΈΠΊΠΎΠΉΒ» (`anxiety_and_panic_control`)**: 3 ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… ΡƒΡ€ΠΎΠΊΠ° ΠΎ Π½Π΅ΠΉΡ€ΠΎΠ±ΠΈΠΎΠ»ΠΎΠ³ΠΈΠΈ паничСских Π°Ρ‚Π°ΠΊ ΠΈ соматичСской рСгуляции. +- **5 Новых Π‘Ρ‚Π°Ρ‚Π΅ΠΉ Π² Π‘Π°Π·Π΅ Π—Π½Π°Π½ΠΈΠΉ (ID 103–107)**: + - ID 103: *НСйробиология паничСской Π°Ρ‚Π°ΠΊΠΈ Π² трСзвости* + - ID 104: *Бтимуляция Π±Π»ΡƒΠΆΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π΅Ρ€Π²Π° (Vagus Nerve)* + - ID 105: *Π’Π΅Ρ…Π½ΠΈΠΊΠ° 5-4-3-2-1 ΠΏΡ€ΠΈ острой трСвоТности* + - ID 106: *Π”ΠΈΠ°Ρ„Ρ€Π°Π³ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π΄Ρ‹Ρ…Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ² гипСрвСнтиляции* + - ID 107: *БоматичСская тСрапия Ρ‚Ρ€Π΅Π²ΠΎΠΆΠ½Ρ‹Ρ… расстройств* + +## πŸ›  ΠΠ°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ АвтотСсты +- Π‘ΠΎΠ·Π΄Π°Π½ тСстовый Π½Π°Π±ΠΎΡ€Ρ‹ `__tests__/Cycle24Features.test.ts` (100% ΡƒΡΠΏΠ΅Π²Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎ всСм 55 автотСстам). +- ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Ρ‹ вСрсии Π΄ΠΎ v1.24.0 Π² `package.json` ΠΈ `app.json`. diff --git a/TASKS.md b/TASKS.md index bb82457..c139be5 100644 --- a/TASKS.md +++ b/TASKS.md @@ -391,3 +391,19 @@ - [x] ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ тСсты `__tests__/Cycle23Features.test.ts` (100% ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ всСх 51 тСстов). - [x] Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ экспортируСмый Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π±ΠΈΠ»Π΄ΠΈΠ½Π³ для Web ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚. - [x] ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π΅Π»ΠΈΠ· v1.23.0. + +# Бписок Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ прилоТСния (Π¦ΠΈΠΊΠ» 24) - Π’Π«ΠŸΠžΠ›ΠΠ•ΠΠž ⚑ + +## πŸ€– AI-ΠšΠΎΡƒΡ‡ ΠΈ Антипаника +- [x] Π’Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ пошаговоС CBT-ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ "ΠŸΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ ΠΈ ΠΏΠ°Π½ΠΈΠΊΠΈ" (`anxiety_management`) с Π°Π²Ρ‚ΠΎΠ²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Ρ‚Ρ€Π΅Π²ΠΎΠΆΠ½Ρ‹Ρ… Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ². + +## πŸ’¬ БообщСство ΠΈ ЭкстрСнная ΠŸΠΎΠΌΠΎΡ‰ΡŒ +- [x] Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ "ЭкстрСнный ΠΈΠΌΠΏΡƒΠ»ΡŒΡ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΈ ΠΏΠ°Π½ΠΈΠΊΠ΅" (`sendPanicSupportPulse`) с ΠΎΠΏΠΎΠ²Π΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ Π½Π°ΠΏΠ°Ρ€Π½ΠΈΠΊΠ° ΠΈ начислСниСм +15 ΠΎΡ‡ΠΊΠΎΠ² ΠšΠ°Ρ€ΠΌΡ‹. + +## πŸ“š ΠšΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΠΈ ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ +- [x] Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΈΠΊΡ€ΠΎ-курс "Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΎΠΉ ΠΈ ΠΏΠ°Π½ΠΈΠΊΠΎΠΉ" (`anxiety_and_panic_control`) ΠΈΠ· 3 ΡƒΡ€ΠΎΠΊΠΎΠ². +- [x] Π Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π‘Π°Π·Ρƒ Π—Π½Π°Π½ΠΈΠΉ 5 Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΡΡ‚Π°Ρ‚ΡŒΡΠΌΠΈ (ID 103–107) ΠΏΡ€ΠΎ Π±Π»ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ Π½Π΅Ρ€Π², Π°ΠΌΠΈΠ³Π΄Π°Π»Ρƒ ΠΈ соматичСский Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³. + +## πŸ›  ВСстированиС ΠΈ Π Π΅Π»ΠΈΠ· +- [x] ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ автоматичСскиС тСсты `__tests__/Cycle24Features.test.ts` (100% ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ 55 тСстов). +- [x] ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π΅Π»ΠΈΠ· v1.24.0 ΠΈ экспорт Π²Π΅Π±-вСрсии. diff --git a/__tests__/Cycle24Features.test.ts b/__tests__/Cycle24Features.test.ts new file mode 100644 index 0000000..8649cb6 --- /dev/null +++ b/__tests__/Cycle24Features.test.ts @@ -0,0 +1,57 @@ +import { AICoachService } from '../services/AICoachService'; +import { CommunityService } from '../services/communityService'; +import { microCoursesDatabase } from '../services/microCoursesDatabase'; +import { articlesDatabase, validateArticlesDatabase, getArticleById } from '../services/articlesDatabase'; + +describe('Cycle 24 Features Tests', () => { + describe('AI Coach Anxiety Management Trigger', () => { + it('triggers anxiety_management exercise when user mentions panic or strong anxiety', async () => { + const response = await AICoachService.getEnhancedResponse('test_user', 'Π£ мСня сильная Ρ‚Ρ€Π΅Π²ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ паничСская Π°Ρ‚Π°ΠΊΠ°', { + userMood: 2, + soberDays: 15, + cravingLevel: 3, + timeOfDay: 'evening' + }); + + expect(response.success).toBe(true); + if (response.success) { + expect(response.data.exercise).toBeDefined(); + expect(response.data.exercise?.id).toBe('anxiety_management'); + expect(response.data.exercise?.steps.length).toBe(4); + } + }); + }); + + describe('Community Panic Support Pulse', () => { + it('sends panic support pulse and awards karma', async () => { + const result = await CommunityService.sendPanicSupportPulse('Бильная ΠΏΠ°Π½ΠΈΠΊΠ° Π² транспортС'); + expect(result.success).toBe(true); + expect(result.message).toContain('ЭкстрСнный сигнал ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½'); + + const karma = await CommunityService.getUserKarma(); + expect(karma).toBeGreaterThanOrEqual(15); + }); + }); + + describe('Micro Courses & Knowledge Base Validation', () => { + it('includes the new anxiety_and_panic_control course with 3 lessons', () => { + const course = microCoursesDatabase.find(c => c.id === 'anxiety_and_panic_control'); + expect(course).toBeDefined(); + expect(course?.lessons.length).toBe(3); + }); + + it('validates articles database and includes articles 103-107', () => { + const validation = validateArticlesDatabase(); + expect(validation.isValid).toBe(true); + expect(validation.errors.length).toBe(0); + + const article103 = getArticleById('article-103'); + expect(article103).toBeDefined(); + expect(article103?.title).toBe('НСйробиология паничСской Π°Ρ‚Π°ΠΊΠΈ Π² трСзвости'); + + const article107 = getArticleById('article-107'); + expect(article107).toBeDefined(); + expect(article107?.title).toBe('БоматичСская тСрапия Ρ‚Ρ€Π΅Π²ΠΎΠΆΠ½Ρ‹Ρ… расстройств'); + }); + }); +}); diff --git a/app.json b/app.json index 54340a3..e0cf9b0 100644 --- a/app.json +++ b/app.json @@ -2,7 +2,7 @@ "expo": { "name": "Sober Path", "slug": "sober-path", - "version": "1.23.0", + "version": "1.24.0", "orientation": "portrait", "icon": "./assets/images/logo.png", "scheme": "soberpath", diff --git a/assets/screenshots/cycle24_preview.png b/assets/screenshots/cycle24_preview.png new file mode 100644 index 0000000..a0d4fd0 Binary files /dev/null and b/assets/screenshots/cycle24_preview.png differ diff --git a/package-lock.json b/package-lock.json index 7c5cf6e..90ef735 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sober-path", - "version": "1.22.0", + "version": "1.23.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sober-path", - "version": "1.22.0", + "version": "1.23.0", "dependencies": { "@expo-google-fonts/inter": "^0.4.1", "@expo/metro-runtime": "~5.0.5", diff --git a/package.json b/package.json index 9dee1c3..5147797 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "sober-path", "main": "expo-router/entry", - "version": "1.23.0", + "version": "1.24.0", "scripts": { "start": "expo start", "reset-project": "node ./scripts/reset-project.js", diff --git a/serve.log b/serve.log new file mode 100644 index 0000000..f5daae0 --- /dev/null +++ b/serve.log @@ -0,0 +1,8 @@ +npm warn exec The following package was not found and will be installed: serve@14.2.6 + INFO Accepting connections at http://localhost:3000 + HTTP 8/28/2026 8:19:40 PM ::1 GET / + HTTP 8/28/2026 8:19:40 PM ::1 Returned 200 in 28 ms + HTTP 8/28/2026 8:19:41 PM ::1 GET /_expo/static/js/web/entry-8fd4d13dfa16869a6d357c4aae74a7ed.js + HTTP 8/28/2026 8:19:41 PM ::1 Returned 200 in 25 ms + HTTP 8/28/2026 8:19:41 PM ::1 GET /assets/node_modules/@expo/vector-icons/build/vendor/react-native-vector-icons/Fonts/MaterialIcons.4e85bc9ebe07e0340c9c4fc2f6c38908.ttf + HTTP 8/28/2026 8:19:41 PM ::1 Returned 200 in 5 ms diff --git a/services/AICoachService.ts b/services/AICoachService.ts index 9a966d3..26bfb89 100644 --- a/services/AICoachService.ts +++ b/services/AICoachService.ts @@ -404,6 +404,29 @@ export class AICoachService { const sentiment = this.detectSentiment(userMessage); // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° запрос упраТнСния + if (lowercaseMessage.includes('ΠΏΠ°Π½ΠΈΠΊ') || lowercaseMessage.includes('трСвоТност') || lowercaseMessage.includes('ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ страх') || lowercaseMessage.includes('паничСская Π°Ρ‚Π°ΠΊΠ°')) { + return success({ + message: 'ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ ΠΈΠ»ΠΈ ΠΏΠ°Π½ΠΈΠΊΠΈ β€” это врСмСнная рСакция вашСй Π½Π΅Ρ€Π²Π½ΠΎΠΉ систСмы. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ 4-шаговоС ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ "ΠŸΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ ΠΈ ΠΏΠ°Π½ΠΈΠΊΠΈ", Ρ‡Ρ‚ΠΎΠ±Ρ‹ быстро ΡƒΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒ Ρ‚Π΅Π»ΠΎ ΠΈ ΡƒΡ‚ΠΈΡ…ΠΎΠΌΠΈΡ€ΠΈΡ‚ΡŒ мысли. Π“ΠΎΡ‚ΠΎΠ²Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ?', + emotionalTone: 'supportive', + suggestions: ['ΠΠ°Ρ‡Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅', 'НС сСйчас'], + followUpQuestions: [], + memoryUpdates: ['User requested anxiety management exercise'], + confidenceLevel: 1.0, + exercise: { + id: 'anxiety_management', + name: 'ΠŸΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ ΠΈ ΠΏΠ°Π½ΠΈΠΊΠΈ', + type: 'grounding', + currentStep: -1, + steps: [ + 'НапоминаниС бСзопасности: Паника Π½Π΅ опасна для вашСй ΠΆΠΈΠ·Π½ΠΈ, это лишь всплСск Π°Π΄Ρ€Π΅Π½Π°Π»ΠΈΠ½Π°. ΠŸΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠΎΡ€Ρƒ ΠΏΠΎΠ΄ Π½ΠΎΠ³Π°ΠΌΠΈ ΠΈ скаТитС сСбС: "Π― Π² бСзопасности".', + 'Π”Ρ‹Ρ…Π°Π½ΠΈΠ΅ ΠΏΠΎ схСмС 4-7-8: Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ Π²Π΄ΠΎΡ… носом Π½Π° 4 сСкунды, Π·Π°Π΄Π΅Ρ€ΠΆΠΈΡ‚Π΅ Π΄Ρ‹Ρ…Π°Π½ΠΈΠ΅ Π½Π° 7 сСкунд ΠΈ Π²Ρ‹Π΄Ρ‹Ρ…Π°ΠΉΡ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· слСгка сТатыС Π³ΡƒΠ±Ρ‹ Π½Π° 8 сСкунд.', + 'БоматичСскоС Π·Π°Π·Π΅ΠΌΠ»Π΅Π½ΠΈΠ΅: НаТмитС ладонями Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π° ΠΈΠ»ΠΈ ΠΊΡ€Π΅ΠΏΠΊΠΎ ΠΎΠ±Π½ΠΈΠΌΠΈΡ‚Π΅ сСбя Π·Π° ΠΏΠ»Π΅Ρ‡ΠΈ. ΠžΡ‰ΡƒΡ‚ΠΈΡ‚Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ своСго Ρ‚Π΅Π»Π° прямо сСйчас.', + 'ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ внимания: НазовитС ΠΏΡ€ΠΎ сСбя 3 физичСских ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° Π²ΠΎΠΊΡ€ΡƒΠ³ вас ΠΈ ΠΈΡ… Ρ†Π²Π΅Ρ‚Π°. Π’Π°ΡˆΠ° нСрвная систСма возвращаСтся Π² состояниС покоя.' + ] + } + }); + } + if (lowercaseMessage.includes('мСгаполис') || lowercaseMessage.includes('Π³ΠΎΡ€ΠΎΠ΄') || lowercaseMessage.includes('ΡˆΡƒΠΌ') || lowercaseMessage.includes('дСтокс')) { return success({ message: 'БтрСсс мСгаполиса β€” частый Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ срыва. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ сСссию "Π£ΠΌΠ½ΠΎΠ³ΠΎ городского дСтокса", Ρ‡Ρ‚ΠΎΠ±Ρ‹ быстро ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ напряТСниС ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ фокус. НачнСм?', diff --git a/services/articlesDatabase.ts b/services/articlesDatabase.ts index 601b1ec..dc9d076 100644 --- a/services/articlesDatabase.ts +++ b/services/articlesDatabase.ts @@ -1316,6 +1316,66 @@ export const articlesDatabase: Article[] = [ tags: ['Ρ‡Π°ΠΈ', 'Π°Π΄Π°ΠΏΡ‚ΠΎΠ³Π΅Π½Ρ‹', 'Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΠ΅', 'рСлакс'], icon: 'local-cafe', color: '#4CAF50' + }, + { + id: generateArticleId(103), + title: 'НСйробиология паничСской Π°Ρ‚Π°ΠΊΠΈ Π² трСзвости', + category: 'Наука ΠΎ зависимости', + readTime: 7, + difficulty: 'intermediate', + preview: 'Как ΠΌΠΈΠ½Π΄Π°Π»Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ Ρ‚Π΅Π»ΠΎ посылаСт Π»ΠΎΠΆΠ½Ρ‹Π΅ сигналы опасности', + content: `ΠŸΠ°Π½ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Π°Ρ‚Π°ΠΊΠ° β€” это Ρ€Π΅Π·ΠΊΠΈΠΉ ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ выброс Π°Π΄Ρ€Π΅Π½Π°Π»ΠΈΠ½Π°, спровоцированный Π³ΠΈΠΏΠ΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ ΠΌΠΈΠ½Π΄Π°Π»Π΅Π²ΠΈΠ΄Π½ΠΎΠ³ΠΎ Ρ‚Π΅Π»Π° (Π°ΠΌΠΈΠ³Π΄Π°Π»Ρ‹). Π’ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹ восстановлСния ΠΎΡ‚ зависимости Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΡ€ΠΎΠ² уязвима. Π“Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ: ΠΏΠ°Π½ΠΈΠΊΠ° β€” это лишь каскад химичСских Ρ€Π΅Π°ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ спадаСт Ρ‡Π΅Ρ€Π΅Π· 10-15 ΠΌΠΈΠ½ΡƒΡ‚.`, + tags: ['ΠΏΠ°Π½ΠΈΠΊΠ°', 'нСйробиология', 'Π°ΠΌΠΈΠ³Π΄Π°Π»Π°', 'Ρ‚Ρ€Π΅Π²ΠΎΠ³Π°'], + icon: 'psychology', + color: '#9C27B0' + }, + { + id: generateArticleId(104), + title: 'Бтимуляция Π±Π»ΡƒΠΆΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π΅Ρ€Π²Π° (Vagus Nerve)', + category: 'ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ', + readTime: 6, + difficulty: 'beginner', + preview: 'ЕстСствСнный Ρ‚ΠΎΡ€ΠΌΠΎΠ· для симпатичСской Π½Π΅Ρ€Π²Π½ΠΎΠΉ систСмы', + content: `Π‘Π»ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ Π½Π΅Ρ€Π² ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° запуск парасимпатичСской Π½Π΅Ρ€Π²Π½ΠΎΠΉ систСмы (ΠΏΠΎΠΊΠΎΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅Π²Π°Ρ€ΠΈΠ²Π°Π½ΠΈΠ΅). ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ стимуляции: ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΈΡ†Π° Π² Ρ…ΠΎΠ»ΠΎΠ΄Π½ΡƒΡŽ Π²ΠΎΠ΄Ρƒ Π½Π° 10 сСкунд, ΡƒΠΌΡ‹Π²Π°Π½ΠΈΠ΅ Ρ…ΠΎΠ»ΠΎΠ΄Π½ΠΎΠΉ Π²ΠΎΠ΄ΠΎΠΉ, Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ Π΄ΠΈΠ°Ρ„Ρ€Π°Π³ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π΄Ρ‹Ρ…Π°Π½ΠΈΠ΅ с Π΄ΠΎΠ»Π³ΠΈΠΌ Π²Ρ‹Π΄ΠΎΡ…ΠΎΠΌ ΠΈ полосканиС Π³ΠΎΡ€Π»Π° Π²ΠΎΠ΄ΠΎΠΉ.`, + tags: ['Π±Π»ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ Π½Π΅Ρ€Π²', 'Π·Π°Π·Π΅ΠΌΠ»Π΅Π½ΠΈΠ΅', 'вагус', 'антистрСсс'], + icon: 'favorite', + color: '#2196F3' + }, + { + id: generateArticleId(105), + title: 'Π’Π΅Ρ…Π½ΠΈΠΊΠ° 5-4-3-2-1 ΠΏΡ€ΠΈ острой трСвоТности', + category: 'ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ', + readTime: 5, + difficulty: 'beginner', + preview: 'МгновСнноС соматичСскоС Π·Π°Π·Π΅ΠΌΠ»Π΅Π½ΠΈΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π΅ приступа', + content: `Π’Π΅Ρ…Π½ΠΈΠΊΠ° зазСмлСния ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… страхов Π½Π° внСшниС Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΡ€Ρ‹. НазовитС ΠΏΡ€ΠΎ сСбя 5 ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅, 4 Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΡΠ½ΡƒΡ‚ΡŒΡΡ, 3 Π·Π²ΡƒΠΊΠ° Π²ΠΎΠΊΡ€ΡƒΠ³, 2 Π·Π°ΠΏΠ°Ρ…Π° ΠΈ 1 вкус. Π­Ρ‚ΠΎ Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΏΠ΅Ρ‚Π»ΡŽ Ρ‚Ρ€Π΅Π²ΠΎΠΆΠ½Ρ‹Ρ… мыслСй.`, + tags: ['Π·Π°Π·Π΅ΠΌΠ»Π΅Π½ΠΈΠ΅', 'Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° 54321', 'Ρ‚Ρ€Π΅Π²ΠΎΠ³Π°', 'ΠΎΡΠΎΠ·Π½Π°Π½Π½ΠΎΡΡ‚ΡŒ'], + icon: 'visibility', + color: '#2196F3' + }, + { + id: generateArticleId(106), + title: 'Π”ΠΈΠ°Ρ„Ρ€Π°Π³ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π΄Ρ‹Ρ…Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ² гипСрвСнтиляции', + category: 'ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ', + readTime: 6, + difficulty: 'beginner', + preview: 'Как Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ баланс кислорода ΠΈ углСкислого Π³Π°Π·Π°', + content: `ΠŸΡ€ΠΈ ΠΏΠ°Π½ΠΈΠΊΠ΅ люди часто Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π΄Ρ‹ΡˆΠ°Ρ‚ΡŒ часто ΠΈ повСрхностно, Ρ‡Ρ‚ΠΎ сниТаСт ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ CO2 Π² ΠΊΡ€ΠΎΠ²ΠΈ ΠΈ усиливаСт Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅. Π”ΠΈΠ°Ρ„Ρ€Π°Π³ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π΄Ρ‹Ρ…Π°Π½ΠΈΠ΅ (ΠΆΠΈΠ²ΠΎΡ‚ΠΎΠΌ) с ΠΏΠ°ΡƒΠ·Π°ΠΌΠΈ восстанавливаСт Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π³Π°Π·ΠΎΠΎΠ±ΠΌΠ΅Π½ ΠΈ успокаиваСт ΠΌΠΎΠ·Π³ΠΎΠ²Ρ‹Π΅ Ρ†Π΅Π½Ρ‚Ρ€Ρ‹.`, + tags: ['Π΄Ρ‹Ρ…Π°Π½ΠΈΠ΅', 'гипСрвСнтиляция', 'Π΄ΠΈΠ°Ρ„Ρ€Π°Π³ΠΌΠ°', 'ΠΏΠ°Π½ΠΈΠΊΠ°'], + icon: 'air', + color: '#2196F3' + }, + { + id: generateArticleId(107), + title: 'БоматичСская тСрапия Ρ‚Ρ€Π΅Π²ΠΎΠΆΠ½Ρ‹Ρ… расстройств', + category: 'ΠŸΡΠΈΡ…ΠΎΠ»ΠΎΠ³ΠΈΡ восстановлСния', + readTime: 8, + difficulty: 'intermediate', + preview: 'ΠŸΡ€ΠΎΠΆΠΈΠ²Π°Π½ΠΈΠ΅ эмоций Ρ‡Π΅Ρ€Π΅Π· соматичСский Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³ ΠΈ тСлСсныС Π·Π°ΠΆΠΈΠΌΡ‹', + content: `БоматичСский Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³ β€” это ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° наблюдСния Π·Π° тСлСсными проявлСниями Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ (сТатиС Π² Π³Ρ€ΡƒΠ΄ΠΈ, ΠΊΠΎΠΌΠ° Π² Π³ΠΎΡ€Π»Π΅) Π±Π΅Π· ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΈΡ… ΠΏΠΎΠ΄Π°Π²ΠΈΡ‚ΡŒ. НаблюдСниС с Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚ΡΡ‚Π²ΠΎΠΌ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ постСпСнно Π½Π°ΡƒΡ‡Π°Π΅Ρ‚ Π½Π΅Ρ€Π²Π½ΡƒΡŽ систСму Π½Π΅ Π±ΠΎΡΡ‚ΡŒΡΡ собствСнных тСлСсных симптомов.`, + tags: ['соматика', 'Ρ‚Π΅Π»ΠΎ', 'Ρ‚Ρ€Π΅ΠΊΠΈΠ½Π³', 'исцСлСниС'], + icon: 'self-improvement', + color: '#9C27B0' } ]; diff --git a/services/communityService.ts b/services/communityService.ts index c85fe3a..43da9e7 100644 --- a/services/communityService.ts +++ b/services/communityService.ts @@ -365,6 +365,26 @@ export class CommunityService { return await this.sendSupportPulse(); } + /** + * ΠœΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ экстрСнный ΠΈΠΌΠΏΡƒΠ»ΡŒΡ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π½Π°ΠΏΠ°Ρ€Π½ΠΈΠΊΡƒ ΠΏΡ€ΠΈ ΠΏΠ°Π½ΠΈΠΊΠ΅/Ρ‚Ρ€Π΅Π²ΠΎΠ³Π΅ (+15 ΠšΠ°Ρ€ΠΌΡ‹). + */ + static async sendPanicSupportPulse(reason?: string): Promise<{ success: boolean; message: string }> { + try { + const buddy = await this.getSelectedBuddy(); + await this.addKarmaPoints(15); + const recipient = buddy ? buddy.name : 'сообщСству'; + return { + success: true, + message: `ЭкстрСнный сигнал ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ ${recipient}. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΡƒΠΆΠ΅ Π² ΠΏΡƒΡ‚ΠΈ!` + }; + } catch (e) { + return { + success: false, + message: 'НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сигнал ΠΏΠΎΠΌΠΎΡ‰ΠΈ.' + }; + } + } + /** * ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ количСство ΠΎΡ‡ΠΊΠΎΠ² ΠšΠ°Ρ€ΠΌΡ‹ (ΠžΡ‡ΠΊΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ) ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. */ diff --git a/services/microCoursesDatabase.ts b/services/microCoursesDatabase.ts index 5292c2e..53a2dcd 100644 --- a/services/microCoursesDatabase.ts +++ b/services/microCoursesDatabase.ts @@ -350,5 +350,38 @@ export const microCoursesDatabase: MicroCourse[] = [ type: 'text' } ] + }, + { + id: 'anxiety_and_panic_control', + title: 'Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΎΠΉ ΠΈ ΠΏΠ°Π½ΠΈΠΊΠΎΠΉ', + description: 'ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ руководство ΠΏΠΎ ΠΊΡƒΡ€Π°Ρ†ΠΈΠΈ паничСских Π°Ρ‚Π°ΠΊ ΠΈ приступов острой трСвоТности Π±Π΅Π· искусствСнных сСдативных срСдств.', + category: 'foundation', + difficulty: 'intermediate', + icon: 'psychology', + points: 180, + lessons: [ + { + id: 'ap_l1', + title: 'ΠŸΡ€ΠΈΡ€ΠΎΠ΄Π° паничСской Π°Ρ‚Π°ΠΊΠΈ', + content: 'ΠŸΠ°Π½ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Π°Ρ‚Π°ΠΊΠ° β€” это лоТная трСвоТная сигнализация ΠΌΠΈΠ½Π΄Π°Π»Π΅Π²ΠΈΠ΄Π½ΠΎΠ³ΠΎ Ρ‚Π΅Π»Π° ΠΌΠΎΠ·Π³Π°. Она сопровоТдаСтся ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌ выбросом Π°Π΄Ρ€Π΅Π½Π°Π»ΠΈΠ½Π°, Π½ΠΎ физичСски ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ бСзопасна. ПониманиС этой Π½Π΅ΠΉΡ€ΠΎΠ±ΠΈΠΎΠ»ΠΎΠ³ΠΈΠΈ β€” 50% успСха Π² Π΅Ρ‘ остановкС.', + duration: 6, + type: 'text' + }, + { + id: 'ap_l2', + title: 'БоматичСский ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΊΡƒΡ€Π°Ρ†ΠΈΠΈ', + content: 'ΠŸΡ€ΠΈ нарастании страха соТмитС ΠΊΡƒΠ»Π°ΠΊΠΈ, почувствуйтС ΠΎΠΏΠΎΡ€Ρƒ Π½ΠΎΠ³Π°ΠΌΠΈ Π½Π° ΠΏΠΎΠ»Ρƒ ΠΈ Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ Π΄ΠΈΠ°Ρ„Ρ€Π°Π³ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π΄Ρ‹Ρ…Π°Π½ΠΈΠ΅: Π²Π΄ΠΎΡ… Π½Π° 4 счСта, Π²Ρ‹Π΄ΠΎΡ… Π½Π° 6 счСтов. Π­Ρ‚ΠΎ замСдляСт сСрдцСбиСниС ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π»ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ Π½Π΅Ρ€Π².', + duration: 10, + type: 'exercise', + exerciseId: 'stop-technique' + }, + { + id: 'ap_l3', + title: 'ΠšΠΎΠ³Π½ΠΈΡ‚ΠΈΠ²Π½ΠΎΠ΅ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ бСзопасности', + content: 'ПослС спада Π²ΠΎΠ»Π½Ρ‹ страха Π·Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ свои автоматичСскиС мысли ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ„Π°ΠΊΡ‚Ρ‹. НапомнитС сСбС, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π»ΠΈ приступ Ρ‚Ρ€Π΅Π²ΠΎΠ³ΠΈ Ρ‚Ρ€Π΅Π·Π²Ρ‹ΠΌ ΠΈ стали Π³ΠΎΡ€Π°Π·Π΄ΠΎ сильнСС.', + duration: 8, + type: 'text' + } + ] } ];