Centrum architektury · przypięta wersja źródeł
Architektura Open Mercato: atlas systemu oparty na kodzie
Open Mercato jest modułowym, wielodostępnym fundamentem aplikacji biznesowych. Host Next.js składa włączone moduły wokół wspólnych mechanizmów uwierzytelniania, uprawnień, komend, danych, zapytań i zdarzeń, a następnie łączy je z wymienną infrastrukturą i systemami zewnętrznymi. Poniższy atlas śledzi te kontrakty bez uznawania mechanizmu za dowód jakości wdrożenia.
Mapa systemu, a nie certyfikat bezpieczeństwa, wydajności, dostępności ani wdrożenia.
Migawka źródeł:
ae856df1ecfc · sekcje ARCHITECTURE.md: 1, 2
Odpowiedź bezpośrednia
Jak czytać cały system
Czytaj z góry od wywołującego przez aplikację, usługi przekrojowe, włączone moduły, infrastrukturę i magazyny. Czytaj w bok, aby znaleźć granice rozszerzeń i systemów zewnętrznych. Każda wyróżniona ścieżka wskazuje zakres do zachowania i właściciela odpowiedzialnego za operacje.
Interaktywny atlas systemu
Wybierz jeden przepływ przez te same warstwy
Wybór zmienia wyróżnienie i adres URL. Wszystkie warstwy oraz uporządkowane przebiegi pozostają dostępne w dokumencie.
Przeglądarka i klient API
external system
Trasy aplikacji Next.js
application local
Auth, RBAC, CRUD, komendy, dane, zapytania i zdarzenia
oss core
Włączone moduły biznesowe
oss core
Cache, kolejka, wyszukiwanie, scheduler, szyfrowanie
infrastructure package
PostgreSQL, Redis i Meilisearch
external system
Pakiet providera lub system zewnętrzny
provider addon
Żądanie przenosi uwierzytelniony zakres tenantu i organizacji do usług.
Generowane rejestry łączą włączone moduły z trasami aplikacji i usługami runtime.
Zapisy przez komendy i DataEngine mogą emitować zdarzenia oraz utrzymywać indeksy odczytowe.
Trwali subskrybenci i workery przenoszą ponawialną pracę przez granicę kolejki.
Adaptery i webhooki przekraczają granicę odpowiedzialności providera albo systemu zewnętrznego.
Odczyt w zakresie
- Trasa aplikacji rozwiązuje stronę włączonego modułu.
- Uwierzytelnienie ustala kontekst tenantu i organizacji.
- QueryEngine odczytuje zdenormalizowany model w odpowiednim zakresie.
- Serwer renderuje semantyczną treść odpowiedzi.
Komenda i zapis
- Trasa sprawdza dostęp, waliduje dane i nakłada jawny zakres.
- Mutation guards mogą zablokować operację przed wykonaniem.
- CommandBus wykonuje zarejestrowaną mutację i zapisuje jej kontekst audytowy.
- DataEngine utrwala rekord i planuje zadeklarowane zdarzenia lub pracę indeksu.
Zdarzenie i praca w tle
- Moduł deklaruje typowany kontrakt zdarzenia.
- Event bus uruchamia pasujące handlery w pamięci.
- Trwali subskrybenci przekraczają granicę kolejki dla pracy ponawialnej.
- Worker musi być idempotentny i obserwowany w przypadku awarii oraz ponowień.
Rozszerzenie między modułami
- Moduł rozszerzający wybiera stabilną powierzchnię między modułami zamiast importować wnętrze modułu równorzędnego.
- Rozszerzenie przenosi widget, interceptor, enricher, guard, hook komendy, zdarzenie albo link encji.
- Generator zapisuje włączony kontrakt w rejestrze runtime.
- Implementacja nadal musi obsłużyć brak modułu równorzędnego albo opcjonalnej powierzchni.
Integracja zewnętrzna
- Wdrożenie definiuje, który system jest właścicielem każdego identyfikatora i przejścia stanu.
- Adapter providera albo trasa weryfikuje kontrakt zewnętrzny i dane dostępowe.
- Kolejki lub harmonogramy izolują pracę ponawialną i cykliczną.
- Potwierdzenie, deduplikacja, uzgodnienie i recovery po awarii pozostają obowiązkami wdrożenia.
Mechanizm, wniosek, ograniczenie, właściciel
| Mechanizm | Wniosek redakcyjny | Ograniczenie | Właściciel decyzji |
|---|---|---|---|
| Open Mercato jest modułowym, wielodostępnym fundamentem ERP i CRM, który zespół samodzielnie hostuje i rozszerza. | Traktuj jako kontrakt w zakresie „oss-core” i osobno potwierdź dopasowanie do projektu. | Sam mechanizm nie dowodzi wydajności, bezpieczeństwa, dostępności, zgodności ani gotowości produkcyjnej konkretnego wdrożenia. | Architekt aplikacji |
| Udokumentowany system rozdziela trasy aplikacji, usługi przekrojowe, moduły, wymienną infrastrukturę i magazyny danych. | Traktuj jako kontrakt w zakresie „documented-convention” i osobno potwierdź dopasowanie do projektu. | Sam mechanizm nie dowodzi wydajności, bezpieczeństwa, dostępności, zgodności ani gotowości produkcyjnej konkretnego wdrożenia. | Architekt aplikacji |
Źródła i metoda · 34 rekordów dowodowych
Każdy fakt, węzeł, połączenie i krok przebiegu ma stabilny identyfikator, klasę twierdzenia, lokalizator źródła, zakres, ograniczenie oraz przypiętą wersję. Lokalny skrypt sprawdza istnienie każdego pliku i lokalizatora oraz pokrycie sekcji 1–33 dokładnie raz.
Open Mercato jest modułowym, wielodostępnym fundamentem ERP i CRM, który zespół samodzielnie hostuje i rozszerza.
- ID
section-01-product-foundation- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- ARCHITECTURE.md ·
## 1. What is Open Mercato
Udokumentowany system rozdziela trasy aplikacji, usługi przekrojowe, moduły, wymienną infrastrukturę i magazyny danych.
- ID
section-02-system-layers- Klasa
- product-fact
- Zakres
- documented-convention
- Źródło
- ARCHITECTURE.md ·
## 2. High-Level Architecture
Przeglądarka i klient API
- ID
node-browser- Klasa
- editorial-interpretation
- Zakres
- external-system
- Źródło
- ARCHITECTURE.md ·
### System overview
Trasy aplikacji Next.js
- ID
node-application- Klasa
- product-fact
- Zakres
- application-local
- Źródło
- apps/docs/docs/architecture/system-overview.mdx ·
## Runtime stack
Auth, RBAC, CRUD, komendy, dane, zapytania i zdarzenia
- ID
node-cross-cutting- Klasa
- editorial-interpretation
- Zakres
- oss-core
- Źródło
- ARCHITECTURE.md ·
### Layers, top to bottom
Włączone moduły biznesowe
- ID
node-modules- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- apps/docs/docs/architecture/module-dependencies.mdx ·
## Module catalog
Cache, kolejka, wyszukiwanie, scheduler, szyfrowanie
- ID
node-infrastructure- Klasa
- editorial-interpretation
- Zakres
- infrastructure-package
- Źródło
- ARCHITECTURE.md ·
subgraph "Infrastructure (pluggable via DI)"
PostgreSQL, Redis i Meilisearch
- ID
node-data- Klasa
- product-fact
- Zakres
- external-system
- Źródło
- ARCHITECTURE.md ·
subgraph "Data"
Pakiet providera lub system zewnętrzny
- ID
node-provider- Klasa
- editorial-interpretation
- Zakres
- provider-addon
- Źródło
- ARCHITECTURE.md ·
External integration provider
Żądanie przenosi uwierzytelniony zakres tenantu i organizacji do usług.
- ID
edge-request-scope- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- packages/shared/src/lib/api/scoped.ts ·
export function withScopedPayload
Generowane rejestry łączą włączone moduły z trasami aplikacji i usługami runtime.
- ID
edge-module-contract- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- packages/cli/src/lib/generators/module-registry.ts ·
modules.runtime.generated.ts
Zapisy przez komendy i DataEngine mogą emitować zdarzenia oraz utrzymywać indeksy odczytowe.
- ID
edge-write-side-effects- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- packages/shared/src/lib/data/engine.ts ·
async emitOrmEntityEvent
Trwali subskrybenci i workery przenoszą ponawialną pracę przez granicę kolejki.
- ID
edge-background- Klasa
- product-fact
- Zakres
- infrastructure-package
- Źródło
- packages/events/src/bus.ts ·
persistentSubscribers
Adaptery i webhooki przekraczają granicę odpowiedzialności providera albo systemu zewnętrznego.
- ID
edge-external- Klasa
- editorial-interpretation
- Zakres
- provider-addon
- Źródło
- packages/webhooks/src/modules/webhooks/lib/adapter-registry.ts ·
export interface WebhookEndpointAdapter
Trasa aplikacji rozwiązuje stronę włączonego modułu.
- ID
flow-read-route- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- apps/docs/docs/architecture/system-overview.mdx ·
## Request lifecycle
Uwierzytelnienie ustala kontekst tenantu i organizacji.
- ID
flow-read-scope- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- packages/shared/src/lib/api/scoped.ts ·
export type ScopedContext
QueryEngine odczytuje zdenormalizowany model w odpowiednim zakresie.
- ID
flow-read-query- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- packages/core/src/modules/query_index/lib/engine.ts ·
export class HybridQueryEngine
Serwer renderuje semantyczną treść odpowiedzi.
- ID
flow-read-render- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- apps/docs/docs/architecture/system-overview.mdx ·
## Runtime stack
Trasa sprawdza dostęp, waliduje dane i nakłada jawny zakres.
- ID
flow-write-validate- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- packages/shared/src/lib/crud/factory.ts ·
export function makeCrudRoute
Mutation guards mogą zablokować operację przed wykonaniem.
- ID
flow-write-guard- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- packages/shared/src/lib/crud/factory.ts ·
runMutationGuards
CommandBus wykonuje zarejestrowaną mutację i zapisuje jej kontekst audytowy.
- ID
flow-write-command- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- packages/shared/src/lib/commands/command-bus.ts ·
export class CommandBus
DataEngine utrwala rekord i planuje zadeklarowane zdarzenia lub pracę indeksu.
- ID
flow-write-effects- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- packages/shared/src/lib/data/engine.ts ·
async emitOrmEntityEvent
Moduł deklaruje typowany kontrakt zdarzenia.
- ID
flow-event-declare- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- packages/shared/src/modules/events/factory.ts ·
export function createModuleEvents
Event bus uruchamia pasujące handlery w pamięci.
- ID
flow-event-emit- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- packages/events/src/bus.ts ·
export function createEventBus
Trwali subskrybenci przekraczają granicę kolejki dla pracy ponawialnej.
- ID
flow-event-persist- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- packages/events/src/bus.ts ·
persistentSubscribers
Worker musi być idempotentny i obserwowany w przypadku awarii oraz ponowień.
- ID
flow-event-operate- Klasa
- documented-convention
- Zakres
- oss-core
- Źródło
- ARCHITECTURE.md ·
## 19. Queue and Background Jobs
Moduł rozszerzający wybiera stabilną powierzchnię między modułami zamiast importować wnętrze modułu równorzędnego.
- ID
flow-extension-boundary- Klasa
- documented-convention
- Zakres
- oss-core
- Źródło
- ARCHITECTURE.md ·
### Extensibility boundary: inject vs compose
Rozszerzenie przenosi widget, interceptor, enricher, guard, hook komendy, zdarzenie albo link encji.
- ID
flow-extension-surface- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- apps/docs/docs/framework/extensibility/current-surfaces.mdx ·
## API and mutation extension
Generator zapisuje włączony kontrakt w rejestrze runtime.
- ID
flow-extension-registry- Klasa
- product-fact
- Zakres
- oss-core
- Źródło
- packages/cli/src/lib/generators/module-registry.ts ·
bootstrap-registrations.generated.ts
Implementacja nadal musi obsłużyć brak modułu równorzędnego albo opcjonalnej powierzchni.
- ID
flow-extension-absence- Klasa
- documented-convention
- Zakres
- oss-core
- Źródło
- ARCHITECTURE.md ·
A module must work enabled or disabled.
Wdrożenie definiuje, który system jest właścicielem każdego identyfikatora i przejścia stanu.
- ID
flow-integration-authority- Klasa
- documented-convention
- Zakres
- provider-addon
- Źródło
- ARCHITECTURE.md ·
### Webhooks
Adapter providera albo trasa weryfikuje kontrakt zewnętrzny i dane dostępowe.
- ID
flow-integration-adapter- Klasa
- product-fact
- Zakres
- provider-addon
- Źródło
- packages/webhooks/src/modules/webhooks/lib/adapter-registry.ts ·
export interface WebhookEndpointAdapter
Kolejki lub harmonogramy izolują pracę ponawialną i cykliczną.
- ID
flow-integration-async- Klasa
- product-fact
- Zakres
- provider-addon
- Źródło
- packages/scheduler/src/modules/scheduler/services/schedulerService.ts ·
export class SchedulerService
Potwierdzenie, deduplikacja, uzgodnienie i recovery po awarii pozostają obowiązkami wdrożenia.
- ID
flow-integration-reconcile- Klasa
- documented-convention
- Zakres
- provider-addon
- Źródło
- ARCHITECTURE.md ·
Workers and subscribers MUST be idempotent.