Skip to content

feature: attribute and form log service #85

@loudsheep

Description

@loudsheep

Zmiany w schema:

  • w schema.prisma jest model ParticipantAttributeLog ale jego pola before i after to String? w przeciwięstwie do Json? które jest w zwykłym ParticipantAttribute, dlatego trzeba te dwa pola zmienić
  • stworzyć nowy enum w bazce (np LogTrigger zawierający np. ADMIN, PARTICIPANT, SYSTEM), żeby zamienić pole: triggeredBy String w modelu ParticipantAttributeLog
  • dodać unikalny constraint @@unique([participantUuid, formUuid]) do modelu ParticipantFormLog (dla wydajnego upsert podczas aktualizowania logów)

Moduł logowania zmian:

  • stworzyć prosty moduł logging albo audit-log - w tym module nie trzeba kontrolera, tylko serwis, no i testy wsm też można odpóścić w tym przypadku
  • w tym pliku .module.ts trzeba tylko ten service dodać do exports: [] żeby inne moduły mogły z tego korzystać
  • metoda logAttributeChanges przyjmująca stare atrybuty, nowe atrybuty. robi szybkie porównanie czy coś się zmieniło (np przez JSON.stringyfy) no i na koniec zapisuje tylko te atrybuty do ParticipantAttributeLog które zmieniły wartość lub dopiero została ta wartość im ustawiona (np podczas tejestracji uczestnika) - wtedy before to poprostu null i tyle. a no i jeszcze trzeba przekazać info dlaczego jest ta zmiana i przez kogo opcjonalnie (przykład triggerInfo: { by: LogTrigger; uuid?: string })
  • metoda logFormInteraction używając prisma.participantFormLog.upsert, aby zaktualizować pole lastSubmittedAt (lub lastOpenedAt). z argumentów to chyba wystarczy tylko participantUuid, formUuid oraz jakiś pseudo interactionType: 'OPENED' | 'SUBMITTED' żeby rozróżnic co tu się stało

WAZNE - żeby logi zmian nie zostawały w momencie jak jakaś tranzakcja failuje to do obu tych nowych metod bym dał jako argument aktualną tranzakcję z prismy, i wtedy jak inny serwis korzysta z tych metod to przekazuje swoją tranzakcję i w razie czego jest rollback na to wszystko tx: Prisma.TransactionClient,

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

Status

Todo

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions