Arhitektura Cosmic Story v2 – poglobljen pregled.

Za inženirje, produktne vodje, novinarje in iskalce partnerstev. Celoten pipeline, 4 zbirke MongoDB, dogodki EDA, strogost modela V, zmogljivostni cilji, varnost in dostopnost — vse na eni strani.

  • Soulwise-story je nov modul NestJS poleg obstoječega modula cosmic-story. Nič neposrednih uvozov med funkcijskimi moduli.
  • Štiri (4) zbirke MongoDB: soulwise_persons, soulwise_chapters, soulwise_journal_entries, soulwise_resonances. Telesa, šifrirana z AES-256 in indeksirana za poizvedbe, ki jih posamezna obravnava.
  • Asinhrono generiranje prek čakalne vrste BullMQ s časovno omejitvijo 28 s. Dogodki se oddajo prek EventEmitter2 šele po potrditvi v podatkovni bazi — brez navideznih elementov v mapi prejetega.
  • Specifikacija V-Model: 119 zahtev, nič vrzeli. Ciljna pokritost zaledja 85% na ravni stavkov v storitvah; čelni del 90% na trgovinah Pinia.

Cevovod, znova, z inženirskimi podrobnostmi

Vsak korak ima storitev, pogodbo in dogodek.

  1. Sprožilec

    Uporabnikovo dejanje — »ustvari današnje poglavje za Sister« — ali načrtovani cron, na primer nedeljski povzetek ob 9 zjutraj ali osvežitev vremena vsakih 6 ur.

  2. Čakalna vrsta

    Opravilo se uvrsti v čakalno vrsto BullMQ z imenom soulwise-chapter-generation, s trdo časovno omejitvijo 28 sekund. Dolgotrajna opravila se prekinejo in uporabniku sporočijo kot »poskusi znova«.

  3. Sestavi

    Storitev ChapterGenerationService sestavi poziv s 4 dejavniki — kontekst osebe, astrologija, signal, ritem — v 1 sam vhod. V poziv ne gre noben neobdelan osebni podatek uporabnika v dobesedni obliki; vse je najprej očiščeno.

  4. Ustvari

    Ponudnik UI je poklican prek simbolnega žetona AI_GENERATION_ADAPTER – ponudnika je mogoče zamenjati. Pred nadaljevanjem se odziv preveri glede dolžine, oblike in varnosti.

  5. Naknadna obdelava

    Zgodijo se 4 stvari: klasifikator kriz preveri, ali je v besedilu jezik krize; izvlekar aspektnih oznak izloči eno do tri astrološke oznake; filter proti trditvam odstrani prepovedane ubeseditve; vsebina je šifrirana z AES-256 in ključem, ki ga upravlja platforma.

  6. Ohrani

    Artefakt se zapiše v ustrezno zbirko MongoDB — poglavja, dnevniški vnosi, resonance — z indeksoma userId in personId za hitro iskanje. Najprej mehki izbris; trdi izbris osebnih podatkov ob 30 dneh.

  7. Obvesti

    Dogodek EventEmitter2 — CHAPTER_COMPLETED, JOURNAL_CREATED — se sproži po zapisu v bazo. Modul za obvestila ga prevzame, ustvari element v nabiralniku in po želji pošlje potisno obvestilo (omejeno na eno na dan, ob upoštevanju tihih ur).

  8. Površina

    Sprednji del prek overjenega klica API pridobi gradivo. Vozlišče se ponovno izriše z novo vsebino. Če je bil uporabnik brez povezave, predpomnilnik postreže včerajšnji pogled, novo gradivo pa se prikaže ob ponovni vzpostavitvi povezave.

Sedem korakov od sprožilca do površja, vsak poimenovan po tem, kar zares počne.

Štiri zbirke (4)

Indeksirano glede na vprašanja, na katera odgovarja vsak posebej.

soulwise_persons

Vnosi v albumu. Indeksi na userId, status, deletedAt. Najprej mehko brisanje; trajno brisanje osebnih podatkov po 30 dneh.

soulwise_chapters

Poglavja, ki jih napiše UI, s šifrirano vsebino. Indeksi na personId, userId, generatedAt. Aspektni žetoni so shranjeni v ločenem polju za hitro filtriranje.

soulwise_journal_entries

Uporabniško napisana razmišljanja, šifrirano telo. Indeksi po userId, personId, createdAt. Telo z besedilnim indeksom za iskanje. Oznaka »zasebno – ne posreduj Luminari« za vsak vnos.

soulwise_resonances

4-dimenzijske ocene za vsako vez. Edinstveni indeks na personId. Ponovno izračunano prek klica storitve po zapisu poglavja ali dnevnika.

Dogodki EDA

Strogo pravilo: dogodki se sprožijo šele po potrditvi (commit) v podatkovni bazi. Odvisnosti med moduli potekajo prek vbrizgavanja žetonov Symbol, nikoli prek forwardRef. Med funkcijskimi moduli ni neposrednega uvažanja iz storitve v storitev.

  • SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — sproži se, ko je poglavje šifrirano in shranjeno. Notifications-v2 posluša; ustvari element v nabiralniku; po izbiri pošlje potisno obvestilo.
  • SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — sproži se, ko je vnos v dnevnik šifriran in shranjen. Storitev Resonance posluša; sproži ponovni izračun.
  • SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — sproži se, ko se spremenijo podatki o rojstvu osebe. Predpomnilnik za medsebojne aspekte se razveljavi.
  • SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — po pogodbi notifications-v2; upošteva proračun za potisna sporočila in tihe ure.

Strogost specifikacij V-modela

119 sledljivih zahtev, nič vrzeli. Vsaka zahteva se naprej preslika na testni primer (UTP, ITP, STP, E2E) in nazaj na uporabniško zgodbo. 20 uporabniških zgodb. 15 funkcionalnih zahtev. 12 nefunkcionalnih kategorij. 8 globalnih prevzemnih vrat.

Pogodba o zmogljivosti

Generiranje poglavja 30 sekund ali bolje za 95% zahtevkov, merjeno glede na porazdelitev trajanja opravil BullMQ. Zakasnitev API p99 GET 500 ms ali bolje pri 1,000 sočasnih uporabnikih, merjeno z obremenitvenim testom k6. TTI sprednjega dela 3 sekund ali bolje pri simuliranem omrežju 4G, merjeno z Lighthouse CI.

Varnostna pogodba

Šifriranje AES-256 v mirovanju s ključi, ki jih upravlja platforma, za vsebine dnevnika in poglavij. TLS 1.2+ med prenosom; preusmeritev HTTP→HTTPS. Dostopni žetoni JWT z življenjsko dobo 1 ur, osvežitveni žetoni z življenjsko dobo 30 dni, rotacija ob osvežitvi. Mehko brisanje z 30-dnevnim oknom pred trajnim izbrisom osebnih podatkov.

Pogodba o dostopnosti

prefers-reduced-motion je upoštevan povsod — animacije GSAP postanejo zgolj prehodi prosojnosti. Oznake za VoiceOver in TalkBack na vsakem interaktivnem elementu. Pred vsako izdajo ročno preverjeno na iOS in Androidu.

Zakaj ločen modul soulwise-story namesto razširitve cosmic-story?

Ker zgornja specifikacija funkcijo zgradi na novo, bi njena predelava znotraj obstoječega modula bodisi pokvarila izkušnjo v1 bodisi pozneje terjala ločevanje in ponovno združevanje. Nov modul pusti v1 nedotaknjen, omogoči, da se v2 izkaže, in ob pravem trenutku poskrbi za čisto migracijo.

Zakaj MongoDB in ne Postgres?

Obstoječi zaledni sistem My Zodiac AI temelji na MongoDB; preklop bi pomenil infrastrukturno odločitev, ki s to funkcijo nima zveze. Dokumentni model se poleg tega dobro prilega poglavjem in dnevniškim vnosom — gnezdenim, različno dolgim, šifriranim kot blob.

Zakaj je BullMQ izbira za čakalno vrsto?

BullMQ teče na Redisu, ki je že del sklada za seje in omejevanje zahtevkov. Nobene nove infrastrukture. Vgrajeni ponovni poskusi, časovne omejitve in opazljivost pokrijejo potrebe pri generiranju poglavij brez napeljave po meri.

Kje je dejansko zapisana izhodiščna specifikacija?

Interni repozitorij. Številke in pogodbe na tej strani povzemajo zgornje artefakte modela V. Javne inženirske objave na blogovskem sklopu My Zodiac AI (označene z 'cosmic-story-v2') podrobneje obravnavajo posamezne dele gradnje.

Preizkusi My Zodiac AI še danes

Medtem ko Soulwise odpira svoje valove, je naša vodilna astrološka aplikacija že v tvojih rokah.

Astrološke vsebine so namenjene razmisleku in zabavi. Funkcije Cosmic Story v2, opisane tukaj, so še v razvoju; njihova razpoložljivost se lahko spremeni brez predhodnega obvestila.