Arkitektura e Cosmic Story v2 — një zhytje e thellë.

Për inxhinierë, PM, gazetarë dhe eksplorues partneritetesh. Pipeline-i i plotë, ⟦CA:KIND:N⟧ koleksione MongoDB, ngjarje EDA, rregullorja e Modelit V, objektivat e performancës, siguria dhe aksesueshmëria — të gjitha në një faqe.

  • Soulwise-story është një modul i ri i NestJS përbri modulit ekzistues cosmic-story. Zero importe direkte midis moduleve të karakteristikave.
  • Katër koleksione MongoDB: soulwise_persons, soulwise_chapters, soulwise_journal_entries, soulwise_resonances. Trupat e enkriptuara me AES-256, indeksuara për pyetjet që secila u shërben.
  • Gjenerim asinkron përmes radhës BullMQ me 28 s kohëzgjatje. Ngjarjet emitohen përmes EventEmitter2 vetëm pas commit-it të bazës së të dhënave — asnjë artikull fantazmë në kutinë hyrëse.
  • V-Model spec: 119 kërkesa, zero hapësira. Objektivi i mbulimit në backend 85% statement mbi shërbimet; frontend 90% mbi Pinia stores.

Pipeline, sërish, me detaje inxhinierike

Çdo hap ka një shërbim, një kontratë dhe një ngjarje.

  1. Aktivizo

    Një veprim i përdoruesit — 'gjenero kapitullin e sotëm për Motrën' — ose një cron i planifikuar, si përmbledhja e të dielës në orën 9 paradite, ose rifreskimi i motit çdo 6 orë.

  2. Radha

    Puna vendoset në një radhë BullMQ me emrin soulwise-chapter-generation, me një afat të fortë prej 28 sekondash. Punët me kohë të gjatë ndërpriten dhe i raportohen përdoruesit si “provo përsëri”.

  3. Krijo

    ChapterGenerationService bashkon kërkesën me katër faktorë — kontekstin e personit, astrologjinë, sinjalin dhe ritmin — në një hyrje të vetme. Asnjë e dhënë personale e papërpunuar e përdoruesit nuk futet fjalë për fjalë në kërkesë; çdo gjë pastrohet më parë.

  4. Gjenero

    Një ofrues AI thirret përmes tokenit simbolik AI_GENERATION_ADAPTER — ofruesi është i zëvendësueshëm. Përgjigja kontrollohet për gjatësi, formë dhe siguri përpara se të vazhdohet.

  5. Pas-përpunim

    Katër gjëra ndodhin: një klasifikues i krizës kontrollon për gjuhë krize; një nxjerrës i çipeve të aspektit nxjerr një deri në tre çipa astrologjie; një filtër anti-pretendime heq formulimet e ndaluara; trupi enkriptohet me AES-256 me një çelës të menaxhuar nga platforma.

  6. Ruaj

    Artefakti shkruhet në koleksionin përkatës të MongoDB — kapituj, shënime ditari, rezonanca — me indekse userId dhe personId për kërkim të shpejtë. Fillimisht fshirje e butë; fshirja e plotë e të dhënave personale (PII) në 30 ditë.

  7. Njofto

    Një ngjarje EventEmitter2 — CHAPTER_COMPLETED, JOURNAL_CREATED — aktivizohet pas përfundimit të transaksionit në bazën e të dhënave. Moduli i njoftimeve e kap, krijon një artikull në kutinë postare dhe, në mënyrë opsionale, dërgon një push (i kufizuar në një në ditë, orët e qeta respektohen).

  8. Shfaq

    Ndërfaqja e përdoruesit tërheq artefaktin përmes një thirrjeje të autentikuar API. Hub-i ri-renditet me përmbajtjen e re. Nëse përdoruesi ishte jashtë linje, cache-i shërben pamjen e djeshme dhe artefakti i ri shfaqet kur rilidhet.

⟦CA:NUM:7⟧ hapa nga aktivizimi deri te sipërfaqja, secili i emëruar sipas asaj që vërtet bën.

Katër koleksionet

Indeksuar për pyetjet që secila prej tyre u përgjigjet.

soulwise_persons

Hyrjet e albumit. Indekset në userId, status, deletedAt. Fshirja e butë e para; fshirja e plotë e PII pas 30 ditësh.

soulwise_chapters

Kapituj të shkruar nga AI, trup i enkriptuar. Indeksa mbi personId, userId, generatedAt. Chipet e aspekteve ruhen si një array i veçantë për filtrim të shpejtë.

soulwise_journal_entries

Refleksione të shkruara nga përdoruesit, trup i enkriptuar. Indekse mbi userId, personId, createdAt. Trup me indeks teksti për kërkim. Flamur 'private — mos e ushqej në Luminara' për çdo hyrje.

soulwise_resonances

Pikët me katër dimensione për lidhje. Indeks i vetëm mbi personId. Rikomputohen përmes thirrjes së shërbimit pas shkruarjes së kapitullit ose ditarit.

Ngjarje EDA

Rregull i rreptë: ngjarjet aktivizohen vetëm pas commit-it të bazës së të dhënave. Varësitë ndërmjet moduleve përmes tokenave të injektimit të simboleve, kurrë përmes forwardRef. S'ka importe direkte shërbim-shërbim midis moduleve të veçorive.

  • SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — aktivizohet pasi një kapitull është i enkriptuar dhe i ruajtur. Notifications-v2 dëgjon; krijon artikull në kutinë hyrëse; dërgon mundësisht push.
  • SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — aktivizohet pasi një hyrje në ditar është e enkriptuar dhe e ruajtur. Shërbimi i rezonancës dëgjon; shkakton rikomputimin.
  • SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — aktivizohet pasi ndryshojnë të dhënat e lindjes së një personi. Cache-i i sinastrisë invalidohet.
  • SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — sipas kontratës së notifications-v2; respekton buxhetin e push dhe oraret e heshta.

Specifikimi i rreptësisë së modelit V

119 kërkesa të gjurmueshme, zero hapësira. Çdo kërkesë lidhet përpara me një rast testi (UTP, ITP, STP, E2E) dhe prapa me një tregim përdoruesi. 20 tregime përdoruesi. 15 kërkesa funksionale. 12 kategori jofunksionale. 8 porta pranueshmërie globale.

Kontratë e performancës

Gjenerimi i kapitullit 30 sekonda ose më mirë për 95% të kërkesave, i matur kundrejt shpërndarjes së kohëzgjatjes së punëve BullMQ. Latenca p99 e API-t për GET 500 ms ose më mirë me 1,000 përdorues të njëkohshëm, e matur përmes testit të ngarkesës k6. TTI i frontend-it 3 sekonda ose më mirë në 4G të simuluar, e matur përmes Lighthouse CI.

Kontratë e Sigurisë

Enkriptim AES-256 në qetësi me çelësa të menaxhuar nga platforma për trupat e ditarit dhe kapitujve. TLS 1.2+ në transit; ridrejtim HTTP→HTTPS. Tokena aksesi JWT me jetëgjatje 1-orëshe, tokena rifreskimi me jetëgjatje 30-ditore, rotacion në rifreskim. Fshirje e butë me dritare 30-ditore para fshirjes së fortë të PII.

Kontratë për Aksesueshmëri

prefers-reduced-motion respektohet globalisht — animacionet GSAP kthehen në zbehje vetëm me opacitet. Etiketa VoiceOver dhe TalkBack në çdo element interaktiv. Verifikuar manualisht në iOS dhe Android para çdo lëshimi.

Pse një modul i veçantë soulwise-story në vend që të zgjerohet cosmic-story?

Sepse specifikimi i rrjedhës së sipërme e rindërton funksionin, dhe rindërtimi brenda një moduli ekzistues ose do të prishte përvojën e v1, ose do të kërkonte fork-pastaj-merge më vonë. Një modul i ri e mban v1 të paprekur, e lejon v2 të dëshmojë veten dhe migron pastër kur të jetë gati.

Pse MongoDB dhe jo Postgres?

Backend-i ekzistues i My Zodiac AI është në MongoDB; ndërrimi do të ishte një vendim infrastrukturor i palidhur me këtë funksion. Modeli i dokumentit u përshtatet gjithashtu mirë kapitujve dhe hyrjeve në ditar — të ndërthurura, me gjatësi të ndryshme, të enkriptuara si blob.

Pse është BullMQ zgjedhja për radhën?

BullMQ ekzekutohet mbi Redis, i cili është tashmë në stack për sesionin dhe kufizimin e shpejtësisë. Asnjë infrastrukturë e re. Riprovimi, koha e pritjes dhe vëzhgueshmëria e integruar mbulojnë nevojat e gjenerimit të kapitujve pa instalime të personalizuara.

Ku është shkruar realisht specifikimi i rrjedhës së sipërme?

Repo e brendshme. Numrat dhe kontratat në këtë faqe parafrazojnë artefaktet e modelit V të rrjedhës së sipërme. Postimet e blogut të inxhinierisë me pamje publike në grupin e blogut të My Zodiac AI (me etiketën 'cosmic-story-v2') shkojnë më thellë në pjesë specifike të ndërtimit.

Provoje My Zodiac AI sot

Ndërsa Soulwise hap valët e tij, aplikacioni ynë kryesor i astrologjisë është tashmë në duart e tua.

Përmbajtja astrologjike është për reflektim dhe argëtim. Veçoritë e Cosmic Story v2 të përshkruara këtu janë në zhvillim; disponueshmëria mund të ndryshojë pa paralajmërim.