Odczyt i zapis danych w Open Mercato

Trasy API przyjmują żądania, komendy zmieniają dane biznesowe, a usługi zapytań je odczytują. Znajomość tej ścieżki pomaga dodać walidację, uprawnienia i działania wykonywane po zapisie.

Na tej stronie

Zacznij od trasy API

makeCrudRoute łączy typowe operacje: walidację, zapytania w określonym zakresie, kontrolę dostępu i zapis przez komendy. To konfiguracja oraz zarejestrowane procedury określają, które elementy się wykonają. Sprawdź konkretną trasę przed dodaniem własnego endpointu.

Architektura w praktyceNajpierw sprawdzenie, potem zapis i dalsze działania
ŻądanieFormularz lub API
dane
Reguły zapisuWalidacja + guardy
OK
KomendaOperacja biznesowa
zapis
Baza danych
↳ Warunek niespełnionyZwróć błąd przed zapisem
↳ Zadeklarowane zdarzenie po zmianieProcedura obsługi → powiadomienie lub zadanie w tle

Trasa i komenda określają użyte rozszerzenia. Bezpośredni zapis do bazy nie przechodzi automatycznie przez całą tę ścieżkę.

Kod i dokumentacja

crud/factory.ts

Prześledź jedną zmianę

  1. Sprawdź dane żądania i prawo użytkownika do zmiany wskazanego rekordu.
  2. Wykonaj zarejestrowaną komendę oraz skonfigurowane procedury towarzyszące.
  3. Zapisz zmianę. Przy zapisie przez DataEngine może on obsłużyć zadeklarowane zdarzenia i indeksowanie.
  4. Odczytaj wynik odpowiednią ścieżką zapytań. Sprawdź, kiedy zmiana pojawia się w indeksach.
Kod i dokumentacja

commands/command-bus.ts · data/engine.ts

Odczyt i zapis mają różne zadania

ŚcieżkaZa co odpowiada
Odczyt przez QueryEngine / ORMWyszukuje i zwraca rekordy. Zapytanie uwzględnia dozwolony zakres oraz pola dostępne dla użytkownika.
CommandBus + zarejestrowana komendaWykonuje nazwaną operację biznesową. Komenda określa sprawdzenia, zapis oraz opcjonalną historię i cofanie.
DataEngineKoordynuje zapis i skonfigurowane działania dla operacji, które z niego korzystają. Bezpośrednie wywołania ORM mają własną logikę.
Kod i dokumentacja

data/engine.ts · commands/command-bus.ts

Komenda opisuje operację biznesową

Przykładowa operacja closeServiceCase może sprawdzić wymagane pola, zapisać status i zwrócić identyfikator sprawy. Trasa API, import i narzędzie AI mogą wywołać tę samą operację, korzystając ze wspólnych reguł. Każde wywołanie musi nadal przekazać właściwy kontekst uprawnień.

Funkcje komendy pozwalają przygotować stan sprzed zmiany, zbudować wpis historii i zaimplementować cofnięcie. Autor komendy wybiera potrzebne funkcje i pisze ich obsługę. Cofnięcie rekordu w bazie nie wycofa dostarczonego maila ani automatycznie nie anuluje płatności w drugim systemie.

Kod i dokumentacja

commands/command-bus.ts

Identyfikator tenantu nie sprawdza uprawnień

withScopedPayload uzupełnia tenantId i organizationId, dając pierwszeństwo wartościom z żądania. Sprawdza obecność tych wartości. Trasa lub komenda musi sprawdzić dostęp użytkownika do tenantu, organizacji i rekordu. parseScopedCommandInput odrzuca także obcy tenant u użytkownika bez uprawnień superadministratora; nadal trzeba sprawdzić dostęp do organizacji.

Kod i dokumentacja

api/scoped.ts

Sprawdź dwa przypadki błędów

  1. Użyj poprawnego identyfikatora rekordu z innej organizacji. Trasa powinna odmówić dostępu.
  2. Sprawdź wyszukiwanie po zaszyfrowanych polach. Niedeterministycznego szyfrogramu nie wyszukasz po wartości jawnej; użyj obsługiwanego skrótu lub innego identyfikatora.
Kod i dokumentacja

encryption/tenantDataEncryptionService.ts · data/engine.ts

Źródła

Kod Open Mercato użyty w opisach