--- title: Historico de campos personalizados tags: análise BTB --- # Serviço de histórico A idéa é criar um serviço para persistr o histórico de todos os campos, unindo os campos standards e os personalizados. Uma request quando chega no heimdal é gerado um id pra ela para podermos identifica-la em qualquer ponto, esse id é passada para as requests internas que fazemos tbm. Sendo assim podemos utilizar esse id para unir os dados de históricos dos serviços standards e do btb. Basicamente cada serviço fica responsavel por fazer a diff de seus dados e enviar ao serviço de histórico passando o request id que gerou essas diffs, o serviço de histórico por sua vez une todas as diffs que chegarem para a mesma request id. ## Base de dados ``` sql CREATE TABLE revision ( id uuid NOT NULL, request_id uuid NOT NULL, "date" timestamptz NOT NULL, user_id uuid NOT NULL, user_name varchar(255) NOT NULL, system_version varchar(64) NOT NULL, history_type varchar(20) NOT NULL, origin varchar(20) NOT NULL, "version" int4 NULL, updated_at timestamptz NOT NULL, created_at timestamptz NOT NULL, external_id varchar(255) NULL, PRIMARY KEY (id) ); CREATE TABLE entity_state ( id uuid NOT NULL, "version" int4 NULL, external_id varchar NULL, revision_id uuid NOT NULL, previous_entity_state_id uuid NULL, sequence_record_changing int4 NOT NULL, service varchar(20) NOT NULL, event_type varchar(20) NOT NULL, entity varchar(100) NOT NULL, record_id uuid NOT NULL, record_text_identifier varchar(255) NOT NULL, state jsonb NOT NULL, parent_id uuid NULL, parent_name varchar(100) NULL, updated_at timestamptz NOT NULL, created_at timestamptz NOT NULL, PRIMARY KEY (id), FOREIGN KEY (previous_entity_state_id) REFERENCES entity_state(id) ON UPDATE RESTRICT ON DELETE RESTRICT, FOREIGN KEY (revision_id) REFERENCES revision(id) ON UPDATE RESTRICT ON DELETE RESTRICT ); ``` ## API ```mermaid sequenceDiagram participant Heimdall participant Router participant Customer participant BTB participant Historic Heimdall->>Router: Adiciona request id Router->>Customer: Chama serviço standard Customer->>Customer: Recebe dados standards, gera o diff deles Customer->>Historic: Envia mensagem para criar histórico com os campos standards Historic->>Historic: Recebe e persiste os dados do histórico Router->>BTB: Chama o btb BTB->>BTB: Recebe dados personalizados, gera o diff deles BTB->>Historic: Envia mensagem para atualizar histórico com os campos standards Historic->>Historic: Recebe e atualiza os dados do histórico ``` ### Post */histories* ```jsonql= { "revision": { "requestId": "", "date": "", "userId": "", "userName": "", "systemVersion": "", "historyType": "", "origin": "" }, "entityState": { "externalId": "", "revisionId": "", "previousEntityStateId": "", "sequenceRecordChanging": "", "service": "", "eventType": "", "entity": "", "recordId": "", "recordTextIdentifier": "", "state": "", "parentId": "", "parentName": "", } } ``` ## Get */histories/{service}/{entity}/{recordId}*