Skip to content

Commit

Permalink
Merge pull request #74 from unb-mds/feat(#54)/arquitetura-reducao-escopo
Browse files Browse the repository at this point in the history
feat(#54): migração para Django REST Framework
Ana-Luiza-SC authored Jan 15, 2025
2 parents a36bba9 + 19f53fb commit 6a3b9b2
Showing 5 changed files with 54 additions and 34 deletions.
14 changes: 14 additions & 0 deletions server/apps/diarios/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from rest_framework import serializers
from .models import Diario, Fornecedor

class FornecedorSerializer(serializers.ModelSerializer):
class Meta:
model = Fornecedor
fields = ['nome', 'cnpj']

class DiarioSerializer(serializers.ModelSerializer):
fornecedores = FornecedorSerializer(many=True, read_only=True)

class Meta:
model = Diario
fields = ['date', 'url', 'excerpts', 'edition', 'is_extra_edition', 'txt_url', 'valor_final', 'fornecedores']
7 changes: 5 additions & 2 deletions server/apps/diarios/tests.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import unittest
from unittest.mock import patch, Mock
from .services import processar_diarios, extrair_fornecedores, extrair_valores
from apps.diarios.services import processar_diarios, extrair_fornecedores, extrair_valores

class TestDiarioServices(unittest.TestCase):
@patch("apps.diarios.services.requests.get")

@patch("apps.diarios.services.requests.get") # Patching requests.get
def test_processar_diarios(self, mock_get):
"""Testa o processamento de diários sem fazer requisições reais."""
# Mock da resposta do requests.get
@@ -21,10 +22,12 @@ def test_processar_diarios(self, mock_get):
"excerpts": "",
}]

# Chama a função que deve processar os diários
resultados = processar_diarios(diarios_mock)

# Testa se ao menos um diário foi processado
self.assertGreater(len(resultados), 0)
# Você pode adicionar mais asserts dependendo do comportamento esperado em 'resultados'

def test_extrair_fornecedores(self):
"""Testa a extração básica de fornecedores."""
6 changes: 3 additions & 3 deletions server/apps/diarios/urls.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.urls import path
from .views import buscar_diarios,getGazettes
from .views import BuscarDiariosAPIView, GetGazettesAPIView

urlpatterns = [
path("buscar/", buscar_diarios, name="buscar_diarios"),
path("getGazettes/", getGazettes, name="getGazettes"),
path("buscar/", BuscarDiariosAPIView.as_view(), name="buscar_diarios"),
path("getGazettes/", GetGazettesAPIView.as_view(), name="getGazettes"),
]
60 changes: 31 additions & 29 deletions server/apps/diarios/views.py
Original file line number Diff line number Diff line change
@@ -1,33 +1,35 @@
from django.http import JsonResponse
from rest_framework.views import APIView
from rest_framework.generics import ListAPIView
from rest_framework.response import Response
from rest_framework import status
from datetime import datetime, timedelta
from .services import buscar_diarios_maceio, processar_diarios, get_dados_salvos
from .services import buscar_diarios_maceio, processar_diarios
from .serializers import DiarioSerializer
from .models import Diario


def buscar_diarios(request):
query = request.GET.get("query", "licitação,contratação")
data_inicial = datetime.strptime(request.GET.get("data_inicial", "2024-01-01"), "%Y-%m-%d")
data_final = datetime.strptime(request.GET.get("data_final", datetime.today().strftime("%Y-%m-%d")), "%Y-%m-%d")

try:
resultados = []
class BuscarDiariosAPIView(APIView):
def get(self, request):
query = request.GET.get("query", "licitação,contratação")
data_inicial = datetime.strptime(request.GET.get("data_inicial", "2024-01-01"), "%Y-%m-%d")
data_final = datetime.strptime(request.GET.get("data_final", datetime.today().strftime("%Y-%m-%d")), "%Y-%m-%d")

while data_inicial <= data_final:
published_since = data_inicial.strftime("%Y-%m-%d")
published_until = (data_inicial + timedelta(days=15)).strftime("%Y-%m-%d")

diarios = buscar_diarios_maceio(query, published_since, published_until)
resultados_parciais = processar_diarios(diarios)
resultados.extend(resultados_parciais)
try:
resultados = []

data_inicial += timedelta(days=10)

return JsonResponse({"diarios": resultados})
except Exception as e:
return JsonResponse({"erro": str(e)}, status=500)

def getGazettes(request):
try:
dados = get_dados_salvos()
return JsonResponse({"dados": dados})
except Exception as e:
return JsonResponse({"erro": str(e)}, status=500)
while data_inicial <= data_final:
published_since = data_inicial.strftime("%Y-%m-%d")
published_until = (data_inicial + timedelta(days=15)).strftime("%Y-%m-%d")

diarios = buscar_diarios_maceio(query, published_since, published_until)
resultados_parciais = processar_diarios(diarios)
resultados.extend(resultados_parciais)

data_inicial += timedelta(days=10)

return Response({"diarios": resultados}, status=status.HTTP_200_OK)
except Exception as e:
return Response({"erro": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

class GetGazettesAPIView(ListAPIView):
queryset = Diario.objects.all()
serializer_class = DiarioSerializer
1 change: 1 addition & 0 deletions server/server/settings.py
Original file line number Diff line number Diff line change
@@ -39,6 +39,7 @@
'django.contrib.staticfiles',
'apps.gastos_publicos',
'apps.diarios',
'rest_framework',
]

MIDDLEWARE = [

0 comments on commit 6a3b9b2

Please sign in to comment.