Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(#54): migração para Django REST Framework #74

Merged
merged 1 commit into from
Jan 15, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Expand All @@ -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."""
Expand Down
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
Expand Up @@ -39,6 +39,7 @@
'django.contrib.staticfiles',
'apps.gastos_publicos',
'apps.diarios',
'rest_framework',
]

MIDDLEWARE = [
Expand Down