Cosmic Story v2-ის არქიტექტურა — სიღრმისეული მიმოხილვა.

ინჟინრებისთვის, PM-ებისთვის, ჟურნალისტებისთვის და პარტნიორობის სკაუტებისთვის. სრული პაიპლაინი, ოთხი MongoDB კოლექცია, EDA მოვლენები, V-Model-ის სიმკაცრე, წარმადობის სამიზნეები, უსაფრთხოება და ხელმისაწვდომობა — ყველაფერი ერთ გვერდზე.

  • Soulwise-story არის ახალი NestJS მოდული არსებული cosmic-story მოდულის გვერდით. ფიჩა-მოდულებს შორის პირდაპირი იმპორტები ნულის ტოლია.
  • ოთხი MongoDB კოლექცია: soulwise_persons, soulwise_chapters, soulwise_journal_entries, soulwise_resonances. AES-256-ით დაშიფრული შიგთავსი, ინდექსირებული თითოეულის მომსახურე მოთხოვნებისთვის.
  • ასინქრონული გენერაცია BullMQ რიგით 28 წმ ტაიმაუტით. მოვლენები გადაიცემა EventEmitter2-ის მეშვეობით მხოლოდ მონაცემთა ბაზაში ჩაწერის შემდეგ — არანაირი ფანტომური ელემენტი შემოსულებში.
  • V-Model სპეციფიკაცია: 119 მოთხოვნა, ნულოვანი ხარვეზი. ბექენდის დაფარვის სამიზნე 85% სერვისების ბრძანებებზე; ფრონტენდი 90% Pinia store-ებზე.

პაიპლაინი, კიდევ ერთხელ, საინჟინრო დეტალებით

თითოეულ ნაბიჯს აქვს სერვისი, კონტრაქტი და მოვლენა.

  1. ტრიგერი

    მომხმარებლის მოქმედება — „შექმენი დღევანდელი თავი დისთვის“ — ან დაგეგმილი cron, მაგალითად კვირის 9 a.m. შემაჯამებელი, ან ყოველ 6 საათში ამინდის განახლება.

  2. რიგი

    დავალება ხვდება BullMQ-ის რიგში სახელად soulwise-chapter-generation, მკაცრი 28-წამიანი ვადით. ხანგრძლივი დავალებები წყდება და მომხმარებელს ეცნობება, როგორც „სცადეთ ხელახლა“.

  3. შედგენა

    ChapterGenerationService აერთიანებს ოთხფაქტორიან მოთხოვნას — ადამიანის კონტექსტს, ასტროლოგიას, სიგნალსა და რიტმს — ერთ შემავალ მონაცემად. მოთხოვნაში არ ხვდება მომხმარებლის უმუშავო პერსონალური მონაცემები სიტყვასიტყვით; ყველაფერი ჯერ იწმინდება.

  4. გენერაცია

    AI პროვაიდერი გამოიძახება AI_GENERATION_ADAPTER სიმბოლური ტოკენის მეშვეობით — პროვაიდერი ჩანაცვლებადია. გაგრძელებამდე პასუხი მოწმდება სიგრძეზე, ფორმაზე და უსაფრთხოებაზე.

  5. შემდგომი დამუშავება

    ხდება ოთხი რამ: კრიზისის კლასიფიკატორი ამოწმებს კრიზისულ ენას; ასპექტ-ჩიპების ექსტრაქტორი გამოყოფს ერთიდან სამამდე ასტროლოგიურ ჩიპს; ანტი-მტკიცების ფილტრი აშორებს აკრძალულ ფორმულირებებს; ტექსტი იშიფრება AES-256-ით პლატფორმის მართულ გასაღებზე.

  6. შენახვა

    არტეფაქტი იწერება შესაბამის MongoDB კოლექციაში — თავები, ჟურნალის ჩანაწერები, რეზონანსები — userId და personId ინდექსებით სწრაფი ძიებისთვის. ჯერ რბილი წაშლა; PII-ის სრული წაშლა 30 დღეში.

  7. შეტყობინება

    EventEmitter2 ივენთი — CHAPTER_COMPLETED, JOURNAL_CREATED — ეშვება ბაზაში ჩაწერის შემდეგ. შეტყობინებების მოდული მას იღებს, ქმნის შემოსულის ელემენტს და სურვილისამებრ აგზავნის push-შეტყობინებას (დღეში მაქსიმუმ ერთი, ჩუმი საათების დაცვით).

  8. ჩვენება

    ფრონტენდი არტეფაქტს იღებს ავთენტიფიცირებული API გამოძახებით. Hub თავიდან აისახება ახალი შინაარსით. თუ მომხმარებელი ოფლაინ იყო, ქეში აჩვენებს გუშინდელ ხედს და ახალი არტეფაქტი გამოჩნდება ხელახლა დაკავშირებისას.

შვიდი ნაბიჯი ტრიგერიდან გამოჩენამდე, თითოეული დასახელებულია იმის მიხედვით, რასაც სინამდვილეში აკეთებს.

ოთხი კოლექცია

ინდექსირებული თითოეულის მომსახურე მოთხოვნებისთვის.

soulwise_persons

ალბომის ჩანაწერები. ინდექსები userId-ზე, status-ზე, deletedAt-ზე. ჯერ რბილი წაშლა; PII-ის საბოლოო წაშლა 30 დღეში.

soulwise_chapters

AI-ის დაწერილი თავები, დაშიფრული შიგთავსით. ინდექსები personId-ზე, userId-ზე, generatedAt-ზე. ასპექტების ჩიპები ინახება ცალკე მასივად სწრაფი ფილტრაციისთვის.

soulwise_journal_entries

მომხმარებლის დაწერილი ანარეკლები, დაშიფრული შიგთავსით. ინდექსები userId-ზე, personId-ზე, createdAt-ზე. ტექსტურად ინდექსირებული შიგთავსი ძიებისთვის. თითო ჩანაწერზე 'პირადი — არ მიეწოდოს Luminara-ს' ნიშანი.

soulwise_resonances

ოთხგანზომილებიანი ქულები თითო კავშირზე. უნიკალური ინდექსი personId-ზე. ხელახლა გამოითვლება სერვისის გამოძახებით თავის ან ჟურნალის ჩაწერის შემდეგ.

EDA მოვლენები

მკაცრი წესი: მოვლენები ეშვება მხოლოდ მონაცემთა ბაზაში ჩაწერის დადასტურების შემდეგ. მოდულებს შორის დამოკიდებულებები ხორციელდება Symbol-ის ინექციის ტოკენებით, არასოდეს forwardRef-ის გავლით. ფუნქციურ მოდულებს შორის სერვისიდან სერვისზე პირდაპირი იმპორტი დაუშვებელია.

  • SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — ეშვება მას შემდეგ, რაც თავი დაიშიფრება და შეინახება. Notifications-v2 უსმენს; ქმნის შემოსულების ელემენტს; სურვილისამებრ აგზავნის push-ს.
  • SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — ეშვება მას შემდეგ, რაც დღიურის ჩანაწერი დაიშიფრება და შეინახება. Resonance სერვისი უსმენს; იწვევს ხელახლა გამოთვლას.
  • SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — ეშვება მას შემდეგ, რაც პიროვნების დაბადების მონაცემები შეიცვლება. სინასტრიის ქეში ნულდება.
  • SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — notifications-v2 კონტრაქტის შესაბამისად; ითვალისწინებს push-ის ბიუჯეტსა და სიჩუმის საათებს.

V-Model-ის სპეციფიკაციის სიმკაცრე

119 მიკვლევადი მოთხოვნა, ნულოვანი ხარვეზებით. თითოეული მოთხოვნა წინ უკავშირდება სატესტო შემთხვევას (UTP, ITP, STP, E2E) და უკან — მომხმარებლის ისტორიას. 20 მომხმარებლის ისტორია. 15 ფუნქციური მოთხოვნა. 12 არაფუნქციური კატეგორია. 8 გლობალური მიღების კარიბჭე.

წარმადობის კონტრაქტი

თავის გენერაცია 30 წამში ან უკეთ მოთხოვნების 95%-ისთვის, გაზომილი BullMQ-ის სამუშაოს ხანგრძლივობის განაწილების მიხედვით. API p99 GET შეყოვნება 500 მწმ ან უკეთ 1,000 ერთდროულ მომხმარებელზე, გაზომილი k6 დატვირთვის ტესტით. Frontend TTI 3 წამში ან უკეთ სიმულირებულ 4G-ზე, გაზომილი Lighthouse CI-ით.

უსაფრთხოების კონტრაქტი

AES-256 დაშიფვრა მონაცემთა შენახვისას, პლატფორმის მართულ გასაღებებით დღიურისა და თავების შინაარსისთვის. TLS 1.2+ გადაცემისას; HTTP→HTTPS გადამისამართება. JWT წვდომის ტოკენები 1-საათიანი ვადით, განახლების ტოკენები 30-დღიანი ვადით, განახლებისას როტაციით. რბილი წაშლა 30-დღიანი ფანჯრით PII-ის საბოლოო წაშლამდე.

ხელმისაწვდომობის კონტრაქტი

prefers-reduced-motion გლობალურად გათვალისწინებულია — GSAP-ანიმაციები მხოლოდ გამჭვირვალობის გადასვლებად იქცევა. VoiceOver-ისა და TalkBack-ის ლეიბლები ყველა ინტერაქტიულ ელემენტზე. ხელით შემოწმებული iOS-სა და Android-ზე ყოველი გამოშვების წინ.

რატომ ცალკე soulwise-story მოდული და არა cosmic-story-ის გაფართოება?

იმიტომ, რომ ზედა დონის სპეციფიკაცია თავიდან აშენებს ფუნქციას, ხოლო არსებულ მოდულში თავიდან აშენება ან v1 გამოცდილებას დაამტვრევდა, ან მოგვიანებით ჯერ განშტოებას, შემდეგ შერწყმას მოითხოვდა. ახალი მოდული v1-ს ხელუხლებელს ტოვებს, v2-ს თავის გამართლების საშუალებას აძლევს და მზადყოფნისას სუფთად მიგრირდება.

რატომ MongoDB და არა Postgres?

My Zodiac AI-ის არსებული backend MongoDB-ზეა; გადასვლა ამ ფუნქციასთან დაუკავშირებელ ინფრასტრუქტურულ გადაწყვეტილებას ნიშნავდა. დოკუმენტური მოდელიც კარგად ერგება თავებსა და ჟურნალის ჩანაწერებს — ჩაშენებული, ცვალებადი სიგრძის, blob-ად დაშიფრული.

რატომ არის რიგის არჩევანი BullMQ?

BullMQ Redis-ზე მუშაობს, რომელიც უკვე სტეკშია სესიისა და rate-limit-ისთვის. ახალი ინფრასტრუქტურა არ არის საჭირო. ჩაშენებული მცდელობის გამეორება, timeout და დაკვირვებადობა ფარავს თავების გენერაციის საჭიროებებს მორგებული გამართვის გარეშე.

სად არის რეალურად ჩაწერილი ზედა დონის სპეციფიკაცია?

შიდა რეპოზიტორიში. ამ გვერდზე მოცემული რიცხვები და კონტრაქტები ზედა დონის V-Model არტეფაქტებს გადმოსცემს. საჯარო საინჟინრო ბლოგპოსტები My Zodiac AI-ის ბლოგ-კლასტერში (ტეგით 'cosmic-story-v2') უფრო ღრმად აშუქებს აშენების კონკრეტულ ნაწილებს.

სცადეთ My Zodiac AI დღესვე

სანამ Soulwise თავის ტალღებს ხსნის, ჩვენი მთავარი ასტროლოგიური აპლიკაცია უკვე თქვენს ხელთაა.

ასტროლოგიური შინაარსი განკუთვნილია ჩაფიქრებისა და გართობისთვის. აქ აღწერილი Cosmic Story v2-ის ფუნქციები განვითარების პროცესშია; ხელმისაწვდომობა შესაძლოა შეიცვალოს წინასწარი გაფრთხილების გარეშე.