Browse Source

feat(api): add DELETE endpoints for ad evaluations and crawl run history

master
PouyaKhajavi 1 day ago
parent
commit
00a2b2c0b0
  1. 7
      backend/ads/tests.py
  2. 4
      backend/ads/views.py
  3. 11
      backend/crawler/tests.py
  4. 4
      backend/crawler/urls.py
  5. 9
      backend/crawler/views.py

7
backend/ads/tests.py

@ -95,3 +95,10 @@ class AdEvaluationAPITests(APITestCase):
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['id'], str(self.eval1.id))
self.assertEqual(response.data['ad']['title'], self.ad1.title)
def test_delete_ad_evaluation(self):
detail_url = f"{self.list_url}{self.eval1.id}/"
response = self.client.delete(detail_url)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
self.assertFalse(AdEvaluation.objects.filter(id=self.eval1.id).exists())

4
backend/ads/views.py

@ -2,9 +2,9 @@ from rest_framework import viewsets
from .models import AdEvaluation
from .serializers import AdEvaluationSerializer
class AdEvaluationViewSet(viewsets.ReadOnlyModelViewSet):
class AdEvaluationViewSet(viewsets.ModelViewSet):
"""
ViewSet for listing and viewing Ad Evaluations.
ViewSet for listing, viewing, and deleting Ad Evaluations.
Supports filtering by crawl_task (UUID) and is_flagged (boolean).
"""
serializer_class = AdEvaluationSerializer

11
backend/crawler/tests.py

@ -128,6 +128,17 @@ class CrawlTaskAPITests(APITestCase):
self.assertEqual(response.data[0]['id'], str(run.id))
self.assertEqual(response.data[0]['status'], 'SUCCESS')
def test_delete_crawl_run(self):
run = CrawlRun.objects.create(
crawl_task=self.task,
status='SUCCESS'
)
delete_url = f"/api/crawlers/runs/{run.id}/"
response = self.client.delete(delete_url)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
self.assertFalse(CrawlRun.objects.filter(id=run.id).exists())
class CrawlTaskCeleryTests(APITestCase):
def setUp(self):
self.task = CrawlTask.objects.create(

4
backend/crawler/urls.py

@ -1,11 +1,13 @@
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import CrawlTaskViewSet
from .views import CrawlTaskViewSet, CrawlRunViewSet
router = DefaultRouter()
router.register(r'runs', CrawlRunViewSet, basename='runs')
router.register(r'', CrawlTaskViewSet, basename='crawlers')
urlpatterns = [
path('', include(router.urls)),
]

9
backend/crawler/views.py

@ -47,3 +47,12 @@ class CrawlTaskViewSet(viewsets.ModelViewSet):
serializer = CrawlRunSerializer(runs, many=True)
return Response(serializer.data)
class CrawlRunViewSet(viewsets.ModelViewSet):
"""
ViewSet for CrawlRun models. Supports CRUD (including DELETE).
"""
queryset = CrawlRun.objects.all().order_by('-started_at')
serializer_class = CrawlRunSerializer
Loading…
Cancel
Save