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

Adiciona suporte a exclusão de documentos #161

Closed gustavofonseca closed 5 years ago

gustavofonseca commented 5 years ago

O que esse PR faz?

Adiciona suporte a exclusão de documentos

A exclusão é representada pela inclusão de uma nova versão do documento indicando que o mesmo foi excluído, por meio da chave deleted=True. Também é armazenado o timestamp da exclusão.

Essa estrutura de dados é retornada pelos métodos version e version_at quando tratar-se de uma versão excluída. Os métodos data, new_rendition_version e new_asset_version levantam a exceção exceptions.DeletedVersion.

O endpoint RESTFul passa a retornar o código 410 Gone ao tentar recuperar documentos excluídos. Foi decidido retornar esse código para desambiguar documentos excluídos dos que nunca existiram.

Onde a revisão poderia começar?

Acredito que pelo módulo restfulapi.py.

Como este poderia ser testado manualmente?

Com a instância rodando, 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"}]}'

Observe que seu XML é retornado:

$ curl 'http://0.0.0.0:6543/documents/0034-8910-rsp-48-2-0347'

Exclua o documento:

$ curl -X DELETE 'http://0.0.0.0:6543/documents/0034-8910-rsp-48-2-0347'

Observe que o código HTTP 410 Gone é retornado:

$ curl -v 'http://0.0.0.0:6543/documents/0034-8910-rsp-48-2-0347'

Observe o registro no endpoint de mudanças:

$ curl 'http://0.0.0.0:6543/changes'

Algum cenário de contexto que queira dar?

n/a

Screenshots

n/a

Quais são tickets relevantes?

https://github.com/scieloorg/document-store/issues/156

Referências