Usanifu wa Cosmic Story v2 — uchambuzi wa kina.

Kwa wahandisi, mameneja wa bidhaa, waandishi wa habari, na wapelelezi wa ushirikiano. Mfumo kamili wa uchakataji, makusanyo 4 ya MongoDB, matukio ya EDA, ukamilifu wa V-Model, malengo ya utendaji, usalama, na ufikiaji — yote katika ukurasa mmoja.

  • Soulwise-story ni moduli mpya ya NestJS pamoja na moduli iliyopo ya cosmic-story. Hakuna uagizaji wa moja kwa moja kati ya moduli za kipengele.
  • Mikusanyiko 4 ya MongoDB: soulwise_persons, soulwise_chapters, soulwise_journal_entries, soulwise_resonances. Maudhui yaliyosimbwa kwa AES-256, yenye faharasa kwa ajili ya hoja ambazo kila moja huhudumia.
  • Uundaji wa Async kwa njia ya foleni ya BullMQ na muda wa kuisha wa sekunde 28. Matukio yanayotolewa kwa EventEmitter2 tu baada ya kuhifadhi kwenye database — hakuna vitu vya kisanduku visivyoonekana.
  • Muundo wa V-Model: mahitaji 119, pengo sifuri. Lengo la ukamilifu wa seva 85% ya kauli kuhusu huduma; sehemu ya mbele 90% kwenye maduka ya Pinia.

Mchakato, tena, na maelezo ya uhandisi

Kila hatua ina huduma, mkataba, na tukio.

  1. Kichocheo

    Kitendo cha mtumiaji — 'tengeneza sura ya leo kwa Sister' — au cron iliyopangwa, kama muhtasari wa Jumapili saa 9 asubuhi, au uboreshaji wa hali ya hewa kila masaa 6.

  2. Foleni

    Kazi inawekwa kwenye foleni ya BullMQ iitwayo soulwise-chapter-generation, ikiwa na muda mkali wa sekunde 28. Kazi zenye muda mrefu huasiliwa na kuripotiwa kwa mtumiaji kama 'jaribu tena'.

  3. Andaa

    Huduma ya ChapterGenerationService inakusanya ombi la vipengele vinne — muktadha wa mtu, unajimu, ishara, midundo — katika ingizo moja. Hakuna data halisi za mtumiaji (PII) zinazowekwa moja kwa moja katika ombi; kila kitu kinatengenezwa safi kwanza.

  4. Tengeneza

    Mtoa huduma wa AI hupigwa simu kupitia ishara ya ⟦AI_GENERATION_ADAPTER⟧ — mtoa huduma anabadilika. Jibu linakaguliwa kwa urefu, umbo, na usalama kabla ya kuendelea.

  5. Usindikaji wa baadaye

    Mambo manne hutokea: kipanga hali ya dharura hukagua lugha ya dharura; kichujio cha vipande vya nyota kinatoa kipande kimoja hadi vitatu vya astrolojia; kichujio cha kuzuia madai husafisha maneno yaliyopigwa marufuku; mwili unafichwa kwa usimbaji wa AES-256 kwa kutumia ufunguo unaosimamiwa na jukwaa.

  6. Hifadhi

    Kipengele hiki kinaandikwa kwenye mkusanyiko sahihi wa MongoDB — sura, maingizo ya jarida, resonance — pamoja na faharasa za userId na personId kwa utafutaji wa haraka. Futa kwa upole kwanza; futa kabisa data ya PII baada ya siku 30.

  7. Arifu

    Tukio la EventEmitter2 — CHAPTER_COMPLETED, JOURNAL_CREATED — linafanyika baada ya kuhifadhi kwenye hifadhidata. Moduli ya taarifa inakichukua, inaunda kipengele cha kisanduku pokezi, na kwa hiari hutuma ujumbe push (imepunguzwa hadi moja kwa siku, masaa ya utulivu yanaheshimiwa).

  8. Onyesha

    Kiolesura huchukua kipande cha data kupitia ombi la API lililothibitishwa. Hub inachora upya na maudhui mapya. Ikiwa mtumiaji alikuwa nje ya mtandao, kashe inatoa muonekano wa jana na kipande kipya cha data kinaonekana tena baada ya kuunganishwa upya.

Hatua saba kutoka kichocheo hadi uso, kila moja ikiitwa kwa jina la kile inachofanya hasa.

Makusanyo manne

Imefahirishwa kwa ajili ya hoja ambazo kila moja hujibu.

soulwise_persons

Maingizo ya albamu. Faharasa kwenye userId, status, deletedAt. Futa kwa njia laini kwanza; futa kabisa PII baada ya siku 30.

soulwise_chapters

Sura zilizoandikwa na AI, maudhui yaliyosimbwa. Faharasa kwenye personId, userId, generatedAt. Chipu za mwelekeo zimehifadhiwa kama safu tofauti kwa uchujaji wa haraka.

soulwise_journal_entries

Tafakari zilizoandikwa na mtumiaji, mwili uliosimbwa kwa fiche. Faharasa kwenye userId, personId, createdAt. Mwili ulioainishwa kwa maandishi kwa ajili ya utafutaji. Alama ya 'ya faragha — usitumie kwenye Luminara' kwa kila ingizo.

soulwise_resonances

Alama za pande nne kwa kila uhusiano. Faharasa ya kipekee kwenye personId. Hukokotolewa upya kupitia mwito wa huduma baada ya kuandika sura au shajara.

Matukio ya EDA

Kanuni ya msingi: matukio hufanya kazi tu baada ya kuthibitisha database. Utegemezi kati ya moduli kwa kutumia tokeni za Symbol injection, wala si kwa njia ya forwardRef. Hakuna uagizaji wa moja kwa moja wa huduma kati ya moduli za kipengele.

  • SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — huamsha baada ya sura kusimbwa kwa fiche na kuhifadhiwa. Notifications-v2 husikiliza; huunda kipengee cha sanduku la posta; huweza kutuma push.
  • SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — huamsha baada ya ingizo la shajara kusimbwa kwa fiche na kuhifadhiwa. Huduma ya Resonance husikiliza; huleta ukokotoaji upya.
  • SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — huamsha baada ya maelezo ya kuzaliwa kwa mtu kubadilika. Akiba ya mwingiliano wa nyota inabatilika.
  • SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — kwa mujibu wa mkataba wa notifications-v2; huzingatia bajeti ya push na saa za utulivu.

Ukamilifu wa vipimo vya V-Model

Mahitaji 119 yanayofuatiliwa, pengo sifuri. Kila hitaji huunganishwa mbele hadi kwenye kesi ya jaribio (UTP, ITP, STP, E2E) na nyuma hadi hadithi ya mtumiaji. Hadithi 20 za watumiaji. Mahitaji 15 ya utendaji. Kategoria 12 zisizo za utendaji. Milango 8 ya kukubali ya kimataifa.

Mkataba wa Utendaji

Uundaji wa sura sekunde 30 au bora zaidi kwa 95% ya maombi, kwa kupimwa dhidi ya usambazaji wa muda wa kazi wa BullMQ. Muda wa kusubiri wa API p99 GET 500 ms au bora zaidi kwa watumiaji 1,000 wa wakati mmoja, kwa kupimwa kupitia jaribio la mzigo la k6. Frontend TTI sekunde 3 au bora zaidi kwenye 4G ya simulizi, kwa kupimwa kupitia Lighthouse CI.

Mkataba wa Usalama

Usimbaji fiche wa AES-256 wakati wa kupumzika kwa kutumia funguo zinazosimamiwa na jukwaa kwa ajili ya miili ya shajara na sura. TLS 1.2+ wakati wa usafirishaji; uelekezaji wa HTTP→HTTPS. Tokeni za ufikiaji za JWT zenye muda wa maisha wa saa 1, tokeni za kuonyesha upya zenye muda wa maisha wa siku 30, mzunguko wakati wa kuonyesha upya. Ufutaji laini wenye dirisha la siku 30 kabla ya ufutaji kamili wa PII.

Mkataba wa Upatikanaji

prefers-reduced-motion inaheshimiwa kimataifa — michoro ya GSAP huwa fades za uwazi pekee. Lebo za VoiceOver na TalkBack kwenye kila kipengele cha kuingiliana. Imethibitishwa kwa mikono kwenye iOS na Android kabla ya kila kuachiliwa.

Kwa nini moduli tofauti ya soulwise-story badala ya kuongeza cosmic-story?

Kwa sababu muundo wa juu unajenga upya kipengele, na kujenga upya ndani ya moduli iliyopo kungeharibu uzoefu wa v1 au kungelazimu kugawanya-kisha-kuunganisha baadaye. Moduli mpya huweka v1 bila kuguswa, inaruhusu v2 ijithibitishe, na kuhama kwa usafi wakati itakapokuwa tayari.

Kwa nini MongoDB na si Postgres?

Sehemu iliyopo ya nyuma ya My Zodiac AI iko kwenye MongoDB; kubadilisha kungemaanisha uamuzi wa miundombinu usiohusiana na kipengele hiki. Muundo wa hati pia unafaa vizuri kwa sura na maingizo ya daftari — yaliyowekwa ndani, yenye urefu tofauti, yaliyofungwa kama blob.

Kwa nini BullMQ ndio chaguo la foleni?

BullMQ inafanya kazi kwenye Redis, ambayo tayari iko kwenye stack kwa ajili ya session na rate-limit. Hakuna miundombinu mipya. Ujumuishaji wa kurudia, muda wa kuisha, na uwezo wa kutazama hushughulikia mahitaji ya uundaji wa sura bila plambi za kipekee.

Ni wapi hasa muundo wa juu umeandikwa?

Repo ya ndani. Nambari na mikataba kwenye ukurasa huu hufafanua kwa ufupi vitu vya awali vya V-Model. Makala za kiufundi za blogu zinazoonekana kwa umma kwenye kundi la blogu la My Zodiac AI (zilizowekewa alama 'cosmic-story-v2') huingia kwa undani zaidi katika sehemu maalum za ujenzi.

Jaribu My Zodiac AI leo

Wakati Soulwise ikifungua mawimbi yake, programu yetu kuu ya unajimu tayari iko mikononi mwako.

Maudhui ya unajimu ni kwa kutafakari na burudani. Vipengele vya Cosmic Story v2 vilivyoelezwa hapa viko katika maendeleo; upatikanaji unaweza kubadilika bila taarifa.