Cosmic Story v2 архитектура — задълбочен поглед.

За инженери, продуктови мениджъри, журналисти и партньорски скаути. Целият процес, 4 MongoDB колекции, EDA събития, строгостта на V-Model, целеви показатели за производителност, сигурност и достъпност — всичко на една страница.

  • Soulwise-story е нов NestJS модул, разположен редом със съществуващия cosmic-story модул. 0 директни импорти между функционалните модули.
  • 4 колекции в MongoDB: soulwise_persons, soulwise_chapters, soulwise_journal_entries, soulwise_resonances. Тела, криптирани с AES-256, индексирани за заявките, които обслужват.
  • Асинхронно генериране чрез опашка BullMQ с таймаут от 28 s. Събитията се излъчват чрез EventEmitter2 едва след записа в базата данни — без фантомни елементи във входящата кутия.
  • V-Model спецификация: 119 изисквания, 0 пропуски. Целево покритие на бекенда 85% на ниво заявки в услугите; фронтенд 90% върху Pinia stores.

Конвейерът, отново, с инженерни детайли

Всяка стъпка има услуга, договор и събитие.

  1. Отключващ фактор

    Действие на потребителя — „генерирай днешната глава за Сестрата“ — или планиран крон, като неделния обзор в 9 ч. сутринта или обновяването на времето на всеки 6 часа.

  2. Опашка

    Задачата попада в опашка на BullMQ с име soulwise-chapter-generation, с твърд таймаут от 28 секунди. Дълго изпълняващите се задачи се прекратяват и се докладват на потребителя като „опитай отново“.

  3. Състави

    ChapterGenerationService сглобява промпта от 4 фактора — личен контекст, астрология, сигнал, ритъм — в 1 вход. Никакви необработени лични данни не попадат в промпта дословно; всичко първо се изчиства.

  4. Генерирай

    Доставчик на изкуствен интелект се извиква чрез символния токен AI_GENERATION_ADAPTER — доставчикът е сменяем. Отговорът се проверява за дължина, форма и безопасност, преди да се продължи.

  5. Допълнителна обработка

    Случват се четири неща: класификатор за кризи проверява за тревожен език; екстрактор изважда от един до три астрологични чипа; анти-клейм филтър премахва забранените формулировки; съдържанието се криптира с AES-256 с ключ, управляван от платформата.

  6. Запази

    Артефактът се записва в подходящата MongoDB колекция — глави, дневникови записи, резонанси — с индекси по userId и personId за бързо търсене. Първо меко изтриване; окончателно изтриване на личните данни след 30 дни.

  7. Известия

    Събитие на EventEmitter2 — CHAPTER_COMPLETED, JOURNAL_CREATED — се задейства след записа в базата данни. Модулът за известия го прихваща, създава елемент във входящата кутия и по желание изпраща push (ограничено до едно на ден, с уважение към тихите часове).

  8. Изведи на повърхността

    Фронтендът изтегля артефакта чрез автентикирано API повикване. Хъбът се пресъздава с новото съдържание. Ако потребителят е бил офлайн, кешът показва вчерашния изглед, а новият артефакт се появява при повторно свързване.

7 стъпки от спусъка до повърхността, всяка кръстена на това, което всъщност прави.

Четирите колекции

Индексирани според въпросите, на които всеки отговаря.

soulwise_persons

Записи в албума. Индекси по userId, status, deletedAt. Първо меко изтриване; окончателно изтриване на личните данни след 30 дни.

soulwise_chapters

Глави, написани от изкуствен интелект, с криптирано съдържание. Индекси по personId, userId, generatedAt. Чиповете на аспектите се съхраняват в отделен масив за бързо филтриране.

soulwise_journal_entries

Потребителски размисли, шифровано тяло. Индекси по userId, personId, createdAt. Текстово индексирано тяло за търсене. Флаг за всеки запис „поверително — да не се подава на Luminara“.

soulwise_resonances

Оценки по четири измерения за всяка връзка. Уникален индекс по personId. Преизчисляват се чрез сервизно повикване след запис на глава или дневник.

EDA събития

Строго правило: събитията се задействат само след commit в базата данни. Зависимостите между модулите се решават чрез токени за инжектиране от тип Symbol, никога чрез forwardRef. Без директни import-и от услуга към услуга между отделните функционални модули.

  • 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; спазва бюджета за известия и тихите часове.

Прецизност на V-Model спецификацията

119 проследими изисквания, 0 пропуски. Всяко изискване се свързва напред с тестов случай (UTP, ITP, STP, E2E) и назад с потребителска история. 20 потребителски истории. 15 функционални изисквания. 12 нефункционални категории. 8 глобални приемни прагове.

Договор за производителност

Генериране на глава 30 секунди или по-добре за 95% от заявките, измерено спрямо разпределението на продължителността на задачите в BullMQ. API p99 GET латентност 500 ms или по-добре при 1,000 едновременни потребители, измерено чрез k6 тест на натоварване. Frontend TTI 3 секунди или по-добре при симулирана 4G мрежа, измерено чрез Lighthouse CI.

Договор за сигурност

AES-256 криптиране на съхраняваните данни с ключове, управлявани от платформата, за съдържанието на дневника и главите. TLS 1.2+ при пренос; пренасочване от HTTP към HTTPS. JWT токени за достъп с валидност 1 часа, токени за обновяване с валидност 30 дни, ротация при обновяване. Меко изтриване с прозорец от 30 дни преди окончателното изтриване на личните данни.

Договор за достъпност

prefers-reduced-motion се спазва навсякъде — GSAP анимациите се превръщат в плавни преходи само на прозрачността. VoiceOver и TalkBack етикети на всеки интерактивен елемент. Ръчно проверено на iOS и Android преди всяко издание.

Защо отделен модул soulwise-story, вместо да разширим cosmic-story?

Защото upstream спецификацията преизгражда функцията, а преизграждането вътре в съществуващ модул би счупило либо v1 изживяването, либо би наложило по-късно разклоняване и сливане. Нов модул запазва v1 непокътната, позволява на v2 да се докаже и мигрира чисто, щом е готова.

Защо MongoDB, а не Postgres?

Съществуващият бекенд на My Zodiac AI работи с MongoDB; смяната би означавала инфраструктурно решение, несвързано с тази функция. Документният модел освен това пасва добре на главите и записите в дневника — вложени, с променлива дължина, криптирани като blob.

Защо изборът е BullMQ за опашката?

BullMQ работи върху Redis, който вече е част от стека за сесии и rate-limit. Без нова инфраструктура. Вградените повторни опити, таймаут и наблюдаемост покриват нуждите за генериране на глави без допълнителна обвръзка.

Къде всъщност е записана първоначалната спецификация?

Вътрешно хранилище. Числата и договорите на тази страница преразказват изходните артефакти от V-модела. Публичните инженерни публикации в блог клъстера на My Zodiac AI (с етикет „cosmic-story-v2“) навлизат по-задълбочено в конкретни части от изграждането.

Опитай My Zodiac AI днес

Докато Soulwise разгръща своите вълни, нашето водещо астрологично приложение вече е в ръцете ти.

Астрологичното съдържание е за размисъл и забавление. Описаните тук функции на Cosmic Story v2 са в процес на разработка; наличността им подлежи на промяна без предупреждение.