Repository: interlegis/sapl

Issue:
Endpoint "/api/materia/materialegislativa/" da API com problema de itens duplicados
## Comportamento Esperado
Ao acessar o endpoint "/api/materia/materialegislativa/" da API do estado do Piauí (https://sapl.al.pi.leg.br/ - Release: 3.1.153), a mesma matéria não deveria ser encontrada em mais de uma página (item duplicado).

## Comportamento Atual
Quando acessamos o endpoint citado, usando parâmetros de filtros, mas não usando parâmetros de ordenação, a mesma matéria pode aparecer em mais de uma página, gerando itens duplicados e fazendo com que matérias que deveriam estar na lista estejam ausentes.

## Passos para Reproduzir (para bugs)
1. Acessar o endpoint "/api/materia/materialegislativa/" filtrando por proposições do tipo 8 e do ano de 2011: `https://sapl.al.pi.leg.br/api/materia/materialegislativa/?tipo=8&ano=2011`
2. Acessar a segunda página (`https://sapl.al.pi.leg.br/api/materia/materialegislativa/?tipo=8&ano=2011&page=2`) e checar pela presença o item de "id" 2595.
3. Acessar a sétima página (`https://sapl.al.pi.leg.br/api/materia/materialegislativa/?tipo=8&ano=2011&page=7`) e checar que o item de "id" 2595 também está presente.

Porém, ao ordenar a lista por algum dos campos esse mesmo erro não acontece. Usando o mesmo exemplo, desta vez ordenando pelo número da matéria:
1. Acessar o endpoint `api/materia/materialegislativa` filtrando por proposições do tipo 8 e do ano de 2011 e ordenando por número:`https://sapl.al.pi.leg.br/api/materia/materialegislativa/tipo=8&ano=2011&o=numero`
2. Acessar todas as páginas e verificar que o item com "id" 2595 só está presente na página 2.

## Contexto
Estamos extraindo os dados das proposições da ALEPI usando a API, filtrando a lista por ano e tipo da matéria legislativa. Nesse caso, a ordenação não é importante, apenas queremos todas as matérias daquele tipo e ano.

## Seu Ambiente
* Versão usada (_Release_): 3.1.153
* Nome e versão do navegador: Google Chrome 73.0.3683.103
* Nome e versão do Sistema Operacional (desktop ou mobile): Manjaro XFCE 18.0.4


Discussion:
@edwardoliveira e @fvendrameto é uma questão do SQL... uma lista paginada (que nos acaba por virar offset e limit) sem ordenação dificilmente será paginada corretamente... de imediato:
a) ou você usa o parametro "o", obrigatoriamente;
b) ou o @edwardoliveira delega a alguém da equipe dele para adicionar MateriaLegislativa.Meta.ordering, e analisar os impactos disso;
c) ou já implementa a issue #2491 

sendo que a execução de:
a) efeito imediato
b) curto/médio prazo
c) longo prazo
Com sorte vamos começar esse trabalho de b) ou c) semana que vem, mas estamos muito atarefados desde o ínicio do ano então não dá pra garantir. Sugiro que enquanto isso vc use adote a estratégia a)
Bom dia @edwardoliveira estava tentando reproduzir essa issue hj, e aparentemente ela não está mais acontecendo.

Só para ter certeza, o problema foi realmente corrigido? Ou ainda é melhor sempre ordenar por alguma coisa, conforme sugerido na época?
A verificar.
> A verificar.

Obrigado, no aguardo.

Resolving patch:
diff --git a/sapl/api/views.py b/sapl/api/views.py
--- a/sapl/api/views.py
+++ b/sapl/api/views.py
@@ -457,6 +457,8 @@ def get_queryset(self):
 
 @customize(MateriaLegislativa)
 class _MateriaLegislativaViewSet:
+    class Meta:
+        ordering = ['-ano', 'tipo', 'numero']
 
     @action(detail=True, methods=['GET'])
     def ultima_tramitacao(self, request, *args, **kwargs):
diff --git a/sapl/materia/models.py b/sapl/materia/models.py
--- a/sapl/materia/models.py
+++ b/sapl/materia/models.py
@@ -312,7 +312,7 @@ class Meta:
         verbose_name = _('Matéria Legislativa')
         verbose_name_plural = _('Matérias Legislativas')
         unique_together = (("tipo", "numero", "ano"),)
-        ordering = ['-id']
+        ordering = ['-ano', 'tipo', 'numero']
         permissions = (("can_access_impressos", "Can access impressos"),)
 
     def __str__(self):


Test patch: