soulwise_persons
ალბომის ჩანაწერები. ინდექსები userId-ზე, status-ზე, deletedAt-ზე. ჯერ რბილი წაშლა; PII-ის საბოლოო წაშლა 30 დღეში.
ინჟინრებისთვის, PM-ებისთვის, ჟურნალისტებისთვის და პარტნიორობის სკაუტებისთვის. სრული პაიპლაინი, ოთხი MongoDB კოლექცია, EDA მოვლენები, V-Model-ის სიმკაცრე, წარმადობის სამიზნეები, უსაფრთხოება და ხელმისაწვდომობა — ყველაფერი ერთ გვერდზე.
თითოეულ ნაბიჯს აქვს სერვისი, კონტრაქტი და მოვლენა.
მომხმარებლის მოქმედება — „შექმენი დღევანდელი თავი დისთვის“ — ან დაგეგმილი cron, მაგალითად კვირის 9 a.m. შემაჯამებელი, ან ყოველ 6 საათში ამინდის განახლება.
დავალება ხვდება BullMQ-ის რიგში სახელად soulwise-chapter-generation, მკაცრი 28-წამიანი ვადით. ხანგრძლივი დავალებები წყდება და მომხმარებელს ეცნობება, როგორც „სცადეთ ხელახლა“.
ChapterGenerationService აერთიანებს ოთხფაქტორიან მოთხოვნას — ადამიანის კონტექსტს, ასტროლოგიას, სიგნალსა და რიტმს — ერთ შემავალ მონაცემად. მოთხოვნაში არ ხვდება მომხმარებლის უმუშავო პერსონალური მონაცემები სიტყვასიტყვით; ყველაფერი ჯერ იწმინდება.
AI პროვაიდერი გამოიძახება AI_GENERATION_ADAPTER სიმბოლური ტოკენის მეშვეობით — პროვაიდერი ჩანაცვლებადია. გაგრძელებამდე პასუხი მოწმდება სიგრძეზე, ფორმაზე და უსაფრთხოებაზე.
ხდება ოთხი რამ: კრიზისის კლასიფიკატორი ამოწმებს კრიზისულ ენას; ასპექტ-ჩიპების ექსტრაქტორი გამოყოფს ერთიდან სამამდე ასტროლოგიურ ჩიპს; ანტი-მტკიცების ფილტრი აშორებს აკრძალულ ფორმულირებებს; ტექსტი იშიფრება AES-256-ით პლატფორმის მართულ გასაღებზე.
არტეფაქტი იწერება შესაბამის MongoDB კოლექციაში — თავები, ჟურნალის ჩანაწერები, რეზონანსები — userId და personId ინდექსებით სწრაფი ძიებისთვის. ჯერ რბილი წაშლა; PII-ის სრული წაშლა 30 დღეში.
EventEmitter2 ივენთი — CHAPTER_COMPLETED, JOURNAL_CREATED — ეშვება ბაზაში ჩაწერის შემდეგ. შეტყობინებების მოდული მას იღებს, ქმნის შემოსულის ელემენტს და სურვილისამებრ აგზავნის push-შეტყობინებას (დღეში მაქსიმუმ ერთი, ჩუმი საათების დაცვით).
ფრონტენდი არტეფაქტს იღებს ავთენტიფიცირებული API გამოძახებით. Hub თავიდან აისახება ახალი შინაარსით. თუ მომხმარებელი ოფლაინ იყო, ქეში აჩვენებს გუშინდელ ხედს და ახალი არტეფაქტი გამოჩნდება ხელახლა დაკავშირებისას.
ინდექსირებული თითოეულის მომსახურე მოთხოვნებისთვის.
ალბომის ჩანაწერები. ინდექსები userId-ზე, status-ზე, deletedAt-ზე. ჯერ რბილი წაშლა; PII-ის საბოლოო წაშლა 30 დღეში.
AI-ის დაწერილი თავები, დაშიფრული შიგთავსით. ინდექსები personId-ზე, userId-ზე, generatedAt-ზე. ასპექტების ჩიპები ინახება ცალკე მასივად სწრაფი ფილტრაციისთვის.
მომხმარებლის დაწერილი ანარეკლები, დაშიფრული შიგთავსით. ინდექსები userId-ზე, personId-ზე, createdAt-ზე. ტექსტურად ინდექსირებული შიგთავსი ძიებისთვის. თითო ჩანაწერზე 'პირადი — არ მიეწოდოს Luminara-ს' ნიშანი.
ოთხგანზომილებიანი ქულები თითო კავშირზე. უნიკალური ინდექსი personId-ზე. ხელახლა გამოითვლება სერვისის გამოძახებით თავის ან ჟურნალის ჩაწერის შემდეგ.
მკაცრი წესი: მოვლენები ეშვება მხოლოდ მონაცემთა ბაზაში ჩაწერის დადასტურების შემდეგ. მოდულებს შორის დამოკიდებულებები ხორციელდება 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-ის ბიუჯეტსა და სიჩუმის საათებს.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-ზე ყოველი გამოშვების წინ.
იმიტომ, რომ ზედა დონის სპეციფიკაცია თავიდან აშენებს ფუნქციას, ხოლო არსებულ მოდულში თავიდან აშენება ან v1 გამოცდილებას დაამტვრევდა, ან მოგვიანებით ჯერ განშტოებას, შემდეგ შერწყმას მოითხოვდა. ახალი მოდული v1-ს ხელუხლებელს ტოვებს, v2-ს თავის გამართლების საშუალებას აძლევს და მზადყოფნისას სუფთად მიგრირდება.
My Zodiac AI-ის არსებული backend MongoDB-ზეა; გადასვლა ამ ფუნქციასთან დაუკავშირებელ ინფრასტრუქტურულ გადაწყვეტილებას ნიშნავდა. დოკუმენტური მოდელიც კარგად ერგება თავებსა და ჟურნალის ჩანაწერებს — ჩაშენებული, ცვალებადი სიგრძის, blob-ად დაშიფრული.
BullMQ Redis-ზე მუშაობს, რომელიც უკვე სტეკშია სესიისა და rate-limit-ისთვის. ახალი ინფრასტრუქტურა არ არის საჭირო. ჩაშენებული მცდელობის გამეორება, timeout და დაკვირვებადობა ფარავს თავების გენერაციის საჭიროებებს მორგებული გამართვის გარეშე.
შიდა რეპოზიტორიში. ამ გვერდზე მოცემული რიცხვები და კონტრაქტები ზედა დონის V-Model არტეფაქტებს გადმოსცემს. საჯარო საინჟინრო ბლოგპოსტები My Zodiac AI-ის ბლოგ-კლასტერში (ტეგით 'cosmic-story-v2') უფრო ღრმად აშუქებს აშენების კონკრეტულ ნაწილებს.
სანამ Soulwise თავის ტალღებს ხსნის, ჩვენი მთავარი ასტროლოგიური აპლიკაცია უკვე თქვენს ხელთაა.
ასტროლოგიური შინაარსი განკუთვნილია ჩაფიქრებისა და გართობისთვის. აქ აღწერილი Cosmic Story v2-ის ფუნქციები განვითარების პროცესშია; ხელმისაწვდომობა შესაძლოა შეიცვალოს წინასწარი გაფრთხილების გარეშე.