From 5448fd9d3ccbed15e764d893202a9e1b472d017d Mon Sep 17 00:00:00 2001 From: Dominic DiTaranto Date: Sat, 20 Jun 2026 18:00:06 -0400 Subject: [PATCH] adding tag and category --- api/serializers/category.py | 12 ++++++ api/serializers/tag.py | 12 ++++++ api/views/base.py | 10 +++++ api/views/category.py | 42 +++++++++++++++++++ api/views/tag.py | 40 ++++++++++++++++++ localist/urls.py | 8 +++- test_requests/category_post.py | 11 +++++ test_requests/category_put.py | 10 +++++ .../{create_event.py => event_post.py} | 3 +- .../{update_event.py => event_put.py} | 3 +- test_requests/tag_post.py | 0 test_requests/tag_put.py | 0 12 files changed, 148 insertions(+), 3 deletions(-) create mode 100644 api/serializers/category.py create mode 100644 api/serializers/tag.py create mode 100644 api/views/category.py create mode 100644 api/views/tag.py create mode 100644 test_requests/category_post.py create mode 100644 test_requests/category_put.py rename test_requests/{create_event.py => event_post.py} (88%) rename test_requests/{update_event.py => event_put.py} (62%) create mode 100644 test_requests/tag_post.py create mode 100644 test_requests/tag_put.py diff --git a/api/serializers/category.py b/api/serializers/category.py new file mode 100644 index 0000000..10e10c5 --- /dev/null +++ b/api/serializers/category.py @@ -0,0 +1,12 @@ +from rest_framework import serializers +from web.models.category import Category + + +class CategorySerializer(serializers.ModelSerializer): + # to_representation(self, instance) if needed + # fk = Serializer() + + class Meta: + model = Category + fields = '__all__' + diff --git a/api/serializers/tag.py b/api/serializers/tag.py new file mode 100644 index 0000000..df11d10 --- /dev/null +++ b/api/serializers/tag.py @@ -0,0 +1,12 @@ +from rest_framework import serializers +from web.models.tag import Tag + + +class TagSerializer(serializers.ModelSerializer): + # to_representation(self, instance) if needed + # fk = Serializer() + + class Meta: + model = Tag + fields = '__all__' + diff --git a/api/views/base.py b/api/views/base.py index 903a77b..ceeeba3 100644 --- a/api/views/base.py +++ b/api/views/base.py @@ -11,3 +11,13 @@ class BaseView(APIView): response = Response() response.data = model_serializer.data return response + + def _build_multi_response(self, data): + serialized_data = [] + for d in data: + serializer = self.SERIALIZER(data) + serialized_data.append(serializer.data) + + response = Response() + response.data = serialized_data + return response diff --git a/api/views/category.py b/api/views/category.py new file mode 100644 index 0000000..5a3927b --- /dev/null +++ b/api/views/category.py @@ -0,0 +1,42 @@ +from django.shortcuts import get_object_or_404 + +from api.serializers.category import CategorySerializer +from api.views.base import BaseView +from web.models.category import Category + + +class CategoryView(BaseView): + SERIALIZER = CategorySerializer + + def get(self, request, category_id=None): + if category_id: + category = get_object_or_404(Category, pk=category_id) + return self._build_response(category) + else: + categories = Category.objects.filter(active=True).all() + return self._build_multi_response(categories) + + def post(self, request): + data = request.POST + category = Category( + name=data.get('name'), + description=data.get('description') + ) + + category.save() + return self._build_response(category) + + def put(self, request, category_id): + data = request.POST + + category = get_object_or_404(Category, pk=category_id) + + category.name = data.get('name', category.name) + category.description = data.get('description', category.description) + return self._build_response(category) + + def delete(self, request, category_id): + category = get_object_or_404(Category, pk=category_id) + category.active = False + category.save() + return self._build_response(category) diff --git a/api/views/tag.py b/api/views/tag.py new file mode 100644 index 0000000..9075a3e --- /dev/null +++ b/api/views/tag.py @@ -0,0 +1,40 @@ +from django.shortcuts import get_object_or_404 + +from api.serializers.tag import TagSerializer +from api.views.base import BaseView +from web.models.tag import Tag + + +class TagView(BaseView): + SERIALIZER = TagSerializer + + def get(self, request, tag_id=None): + if tag_id: + tag = get_object_or_404(Tag, pk=tag_id) + return self._build_response(tag) + else: + tags = Tag.objects.filter(active=True).all() + return self._build_multi_response(tags) + + def post(self, request): + data = request.POST + tag = Tag( + name=data.get('name'), + ) + + tag.save() + return self._build_response(tag) + + def put(self, request, tag_id): + data = request.POST + + tag = get_object_or_404(Tag, pk=tag_id) + tag.name = data.get('name', tag.name) + tag.save() + self._build_response(tag) + + def delete(self, request, tag_id): + tag = get_object_or_404(Tag, pk=tag_id) + tag.active = False + tag.save() + return self._build_response(tag) diff --git a/localist/urls.py b/localist/urls.py index 54f18e1..fd4aa12 100644 --- a/localist/urls.py +++ b/localist/urls.py @@ -2,9 +2,15 @@ from django.contrib import admin from django.urls import path from api.views.event import EventView +from api.views.category import CategoryView +from api.views.tag import TagView urlpatterns = [ path("admin/", admin.site.urls), path("api/event/", EventView.as_view(), name="event"), - path("api/event", EventView.as_view(), name="event") + path("api/event", EventView.as_view(), name="event"), + path("api/category/", CategoryView.as_view(), name="category"), + path("api/category", CategoryView.as_view(), name="category"), + path("api/tag/", TagView.as_view(), name="tag"), + path("api/tag", TagView.as_view(), name="tag"), ] diff --git a/test_requests/category_post.py b/test_requests/category_post.py new file mode 100644 index 0000000..9d87529 --- /dev/null +++ b/test_requests/category_post.py @@ -0,0 +1,11 @@ +import requests + +url = "http://127.0.0.1:8000/api/category" + +data = { + "name": "Test Category", + "description": "this is a test", +} + +resp = requests.post(url, data=data) +print(resp.status_code) diff --git a/test_requests/category_put.py b/test_requests/category_put.py new file mode 100644 index 0000000..af6f42e --- /dev/null +++ b/test_requests/category_put.py @@ -0,0 +1,10 @@ +import requests + +url = "http://127.0.0.1:8000/api/category/1" + +data = { + "name": "diddy cat" +} + +resp = requests.put(url, data=data) +print(resp.status_code) diff --git a/test_requests/create_event.py b/test_requests/event_post.py similarity index 88% rename from test_requests/create_event.py rename to test_requests/event_post.py index 04024b3..88fe122 100644 --- a/test_requests/create_event.py +++ b/test_requests/event_post.py @@ -17,4 +17,5 @@ data = { "phone_number": "" } -requests.post(url, data=data) +resp = requests.post(url, data=data) +print(resp.status_code) diff --git a/test_requests/update_event.py b/test_requests/event_put.py similarity index 62% rename from test_requests/update_event.py rename to test_requests/event_put.py index bd7716f..b9698c0 100644 --- a/test_requests/update_event.py +++ b/test_requests/event_put.py @@ -6,4 +6,5 @@ data = { "name": "diddy freakoff", } -requests.put(url, data=data) +resp = requests.put(url, data=data) +print(resp.status_code) diff --git a/test_requests/tag_post.py b/test_requests/tag_post.py new file mode 100644 index 0000000..e69de29 diff --git a/test_requests/tag_put.py b/test_requests/tag_put.py new file mode 100644 index 0000000..e69de29