scieloorg / kernel

É o componente central da nova arquitetura de sistemas de informação da Metodologia SciELO, ainda em fase de desenvolvimento.
https://docs.google.com/document/d/14YBl7--4ouaWBQhxzUYWRuhmegwnSYrDgupsED6rhvM/edit?usp=sharing
BSD 2-Clause "Simplified" License
6 stars 11 forks source link

Armazena conteúdo modificado junto do registro de mudança #191

Closed gustavofonseca closed 5 years ago

gustavofonseca commented 5 years ago

O que esse PR faz?

Faz com que o log de mudanças passe a armazenar um snapshot do dado modificado imediatamente após a realização da mudança. O dado que será feito o snapshot varia de acordo com o tipo de entidade:

O conteúdo será compactado antes de ser armazenado no MongoDB, utilizando a função gzip.compress.

Cada mudança retornada pelo endpoint /changes passa a ter o campo change_id que pode ser utilizada para obter o registro detalhado da mudança no endpoint /changes/:change_id. Neste registro detalhado é possível recuperar o snapshot do dado modificado. Exemplo:

import requests, gzip, base64
response = requests.get('http://0.0.0.0:6543/changes/5d9c8cce699ab206c760e2dc').json()
print(gzip.decompress(base64.b64decode(response["content_gz_b64"])))

Além disso, também foi incluído um utilitário de linha de comando para auxiliar em tarefas administrativas de manutenção da instância. A motivação para a criação do utilitário foi de operar a criação de índices no banco de dados, e este é o único comando implementado até o momento.

Onde a revisão poderia começar?

Sugiro seguir os commits na ordem em que foram criados. Eu me esforcei para fazer de forma a ser fácil de seguir.

Foi mal gente, este PR acabou ficando maior do que o esperado.

Como este poderia ser testado manualmente?

  1. Suba uma instância da aplicação com o banco de dados em branco
  2. Crie os índices: kernelctl create-indexes mongodb://localhost:27017
  3. Registre um novo documento:
    curl -X PUT -H 'Accept: application/json' -H 'Content-Type: application/json' http://0.0.0.0:6543/documents/0034-8910-rsp-48-2-0347 -d '{"data": "https://raw.githubusercontent.com/scieloorg/packtools/master/tests/samples/0034-8910-rsp-48-2-0347.xml", "assets": [{"asset_id":"0034-8910-rsp-48-2-0347-gf01", "asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf01.jpg"},{"asset_id":"0034-8910-rsp-48-2-0347-gf01-en", "asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf01-en.jpg"},{"asset_id":"0034-8910-rsp-48-2-0347-gf02", "asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf02.jpg"},{"asset_id":"0034-8910-rsp-48-2-0347-gf02-en","asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf02-en.jpg"},{"asset_id":"0034-8910-rsp-48-2-0347-gf03", "asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf03.jpg"},{"asset_id":"0034-8910-rsp-48-2-0347-gf03-en","asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf03-en.jpg"},{"asset_id":"0034-8910-rsp-48-2-0347-gf04", "asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf04.jpg"},{"asset_id":"0034-8910-rsp-48-2-0347-gf04-en","asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf04-en.jpg"}]}'
  4. Acesse a API de mudanças: /changes
  5. Copie o identificador de uma mudança e veja seus detalhes: /changes/:id

Algum cenário de contexto que queira dar?

Esta mudança torna mais poderoso o controle de versão e possibilita funcionalidades de auditoria para todos os tipos de entidade mantidos pela aplicação.

Screenshots

n/a

Quais são tickets relevantes?

n/a

Referências

n/a

jamilatta commented 5 years ago

@gustavofonseca

Validando esse PR.

gustavofonseca commented 5 years ago

@gustavofonseca

Validando esse PR.

Ok. Vou atribuir o PR a vc então. Assim que terminar retire a atribuição por gentileza.

jamilatta commented 5 years ago

Lindo!

🚀