Cosmic Story v2 arxitekturası — dərin təhlil.

Mühəndislər, PM-lər, jurnalistlər və tərəfdaşlıq axtaranlar üçün. Tam pipeline, dörd MongoDB kolleksiyası, EDA hadisələri, V-Model ciddiliyi, performans hədəfləri, təhlükəsizlik və əlçatanlıq — hamısı bir səhifədə.

  • Soulwise-story mövcud cosmic-story modulunun yanında yeni bir NestJS moduludur. Funksiya modulları arasında sıfır birbaşa import.
  • Dörd MongoDB kolleksiyası: soulwise_persons, soulwise_chapters, soulwise_journal_entries, soulwise_resonances. AES-256 ilə şifrələnmiş gövdələr, hər biri xidmət etdiyi sorğular üçün indekslənib.
  • BullMQ növbəsi vasitəsilə 28 s taymautla asinxron generasiya. Hadisələr EventEmitter2 vasitəsilə yalnız verilənlər bazasına commit-dən sonra yayımlanır — yəni gözə görünən, amma əslində olmayan inbox elementləri yoxdur.
  • V-Model spesifikasiyası: 119 tələb, sıfır boşluq. Backend əhatə hədəfi xidmətlərdə 85% ifadə; frontend Pinia store-larında 90%.

Pipeline, bir daha — mühəndislik təfərrüatları ilə

Hər addımın bir xidməti, bir kontraktı və bir hadisəsi var.

  1. Tətik

    İstifadəçi hərəkəti — “Bacı üçün bugünkü fəsli yarat” — ya da planlaşdırılmış cron, məsələn, bazar günü 9 səhər xülasəsi və ya hər 6 saatdan bir hava yeniləməsi.

  2. Növbə

    Tapşırıq soulwise-chapter-generation adlı BullMQ növbəsinə düşür və 28 saniyəlik ciddi vaxt limiti olur. Uzun çəkən tapşırıqlar dayandırılır və istifadəçiyə “yenidən cəhd edin” kimi bildirilir.

  3. Tərtib

    ChapterGenerationService dörd amilli sorğunu — şəxs konteksti, astrologiya, siqnal, ritm — vahid girişə yığır. Heç bir xam istifadəçi şəxsi məlumatı sorğuya hərfi şəkildə daxil olmur; hər şey əvvəlcədən təmizlənir.

  4. Generasiya

    AI provayderi AI_GENERATION_ADAPTER simvol tokeni vasitəsilə çağırılır — provayderi dəyişmək mümkündür. Davam etməzdən əvvəl cavab uzunluq, forma və təhlükəsizlik baxımından yoxlanılır.

  5. Sonradan emal

    Dörd şey baş verir: böhran klassifikatoru böhran ifadələrini yoxlayır; aspekt-çip ekstraktoru bir-üç astrologiya çipi çıxarır; anti-iddia filtri qadağan olunmuş ifadələri təmizləyir; mətn platforma tərəfindən idarə olunan açarla AES-256 şifrələnir.

  6. Saxla

    Artefakt müvafiq MongoDB kolleksiyasına yazılır — fəsillər, gündəlik qeydləri, rezonanslar — sürətli axtarış üçün userId və personId indeksləri ilə. Əvvəlcə yumşaq silinmə; PII-nin tam silinməsi 30 gündən sonra.

  7. Bildir

    EventEmitter2 hadisəsi — CHAPTER_COMPLETED, JOURNAL_CREATED — verilənlər bazasına yazıldıqdan sonra işə düşür. Bildirişlər modulu onu götürür, gələnlər qutusuna element yaradır və istəyə bağlı push göndərir (gündə bir dəfə ilə məhdudlaşır, sakit saatlara hörmət edilir).

  8. Göstər

    Frontend artefaktı autentifikasiya olunmuş API çağırışı vasitəsilə çəkir. Hub yeni məzmunla yenidən render olunur. İstifadəçi oflayn olubsa, keş dünənki görünüşü göstərir və yenidən qoşulduqda yeni artefakt görünür.

Tətikdən təqdimata qədər yeddi addım, hər biri əslində gördüyü işə görə adlandırılıb.

Dörd kolleksiya

Hər biri cavab verdiyi sorğular üçün indekslənib.

soulwise_persons

Albom qeydləri. userId, status, deletedAt üzrə indekslər. Əvvəlcə soft-delete; PII-nin hard-delete-i 30 gündən sonra.

soulwise_chapters

AI tərəfindən yazılmış fəsillər, şifrələnmiş gövdə. personId, userId, generatedAt üzrə indekslər. Aspekt çipləri sürətli filtrasiya üçün ayrıca massiv kimi saxlanılır.

soulwise_journal_entries

İstifadəçinin yazdığı düşüncələr, şifrələnmiş gövdə. userId, personId, createdAt üzrə indekslər. Axtarış üçün mətn-indeksli gövdə. Hər qeyd üçün 'şəxsi — Luminara-ya ötürmə' bayrağı.

soulwise_resonances

Hər bağ üçün dörd ölçülü ballar. personId üzrə unikal indeks. Fəsil və ya jurnal yazısından sonra xidmət çağırışı ilə yenidən hesablanır.

EDA hadisələri

Ciddi qayda: hadisələr yalnız verilənlər bazasına commit edildikdən sonra işə düşür. Modullararası asılılıqlar Symbol injection token-ləri vasitəsilə qurulur, heç vaxt forwardRef vasitəsilə yox. Funksional modullar arasında birbaşa servisdən-servisə import yoxdur.

  • SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — fəsil şifrələnib yadda saxlanıldıqdan sonra işə düşür. Notifications-v2 bunu dinləyir; inbox elementi yaradır; istəyə bağlı push göndərir.
  • SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — gündəlik qeydi şifrələnib yadda saxlanıldıqdan sonra işə düşür. Resonance servisi bunu dinləyir; yenidən hesablanmanı tətikləyir.
  • SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — şəxsin doğum məlumatları dəyişdikdən sonra işə düşür. Sinastri keşi etibarsız sayılır.
  • SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — notifications-v2 müqaviləsinə uyğun; push büdcəsinə və sakitlik saatlarına hörmət edir.

V-Model spesifikasiya dəqiqliyi

119 izlənə bilən tələb, sıfır boşluq. Hər tələb irəliyə doğru bir test ssenarisinə (UTP, ITP, STP, E2E) və geriyə doğru bir istifadəçi hekayəsinə uyğunlaşdırılır. 20 istifadəçi hekayəsi. 15 funksional tələb. 12 qeyri-funksional kateqoriya. 8 qlobal qəbul qapısı.

Performans müqaviləsi

Fəsil generasiyası sorğuların 95% üçün 30 saniyə və ya daha yaxşı, BullMQ tapşırıq müddəti paylanmasına görə ölçülür. API p99 GET gecikməsi 1,000 eyni vaxtlı istifadəçidə 500 ms və ya daha yaxşı, k6 yük testi ilə ölçülür. Frontend TTI simulyasiya edilmiş 4G şəbəkəsində 3 saniyə və ya daha yaxşı, Lighthouse CI ilə ölçülür.

Təhlükəsizlik müqaviləsi

Gündəlik və fəsil mətnləri üçün platforma tərəfindən idarə olunan açarlarla istirahət vəziyyətində AES-256 şifrələnməsi. Ötürülmə zamanı TLS 1.2+; HTTP→HTTPS yönləndirməsi. 1 saatlıq ömrü olan JWT access token-ləri, 30 günlük ömrü olan refresh token-ləri, yeniləmə zamanı rotasiya. PII-nin tam silinməsindən əvvəl 30 günlük pəncərə ilə yumşaq silmə.

Əlçatanlıq müqaviləsi

prefers-reduced-motion qlobal şəkildə nəzərə alınır — GSAP animasiyaları yalnız şəffaflıqla solma effektlərinə çevrilir. Hər interaktiv elementdə VoiceOver və TalkBack etiketləri var. Hər buraxılışdan əvvəl iOS və Android-də əl ilə yoxlanılır.

Niyə cosmic-story-nu genişləndirmək əvəzinə ayrıca soulwise-story modulu?

Çünki yuxarı axın spesifikasiyası funksiyanı yenidən qurur, mövcud modulun içində yenidən qurmaq isə ya v1 təcrübəsini pozardı, ya da sonradan əvvəl ayırıb sonra birləşdirməyi tələb edərdi. Yeni modul v1-i toxunulmaz saxlayır, v2-nin özünü sübut etməsinə imkan verir və hazır olduqda təmiz şəkildə miqrasiya edir.

Niyə MongoDB, Postgres deyil?

Mövcud My Zodiac AI backend-i MongoDB üzərindədir; keçid bu funksiya ilə əlaqəsi olmayan infrastruktur qərarı demək olardı. Sənəd modeli həm də fəsillərə və gündəlik qeydlərinə yaxşı uyğun gəlir — iç-içə, dəyişən uzunluqda, blob kimi şifrələnmiş.

Niyə növbə üçün BullMQ seçilib?

BullMQ Redis üzərində işləyir, o da artıq sessiya və sürət limiti üçün stekdə var. Yeni infrastruktur yoxdur. Daxili təkrar cəhd, vaxt aşımı və müşahidə imkanları fəsil yaradılması ehtiyaclarını xüsusi qurğu olmadan qarşılayır.

Yuxarı axın spesifikasiyası əslində harada yazılıb?

Daxili repo-da. Bu səhifədəki rəqəmlər və müqavilələr yuxarı axın V-Model artefaktlarını qısaca təsvir edir. My Zodiac AI bloq klasterindəki ictimaiyyətə açıq mühəndislik bloq yazıları ('cosmic-story-v2' etiketli) qurmanın konkret hissələrinə daha dərindən baxır.

My Zodiac AI-ı bu gün sınayın

Soulwise öz dalğalarını açarkən, flaqman astrologiya tətbiqimiz artıq sizin əlinizdədir.

Astrologiya məzmunu düşünmək və əyləncə üçündür. Burada təsvir olunan Cosmic Story v2 funksiyaları hazırlanır; əlçatanlıq xəbərdarlıq edilmədən dəyişə bilər.