diff --git a/backend/api/v2/objects/serializers.py b/backend/api/v2/objects/serializers.py index f3081c4..8047f60 100644 --- a/backend/api/v2/objects/serializers.py +++ b/backend/api/v2/objects/serializers.py @@ -1 +1,41 @@ """Сериализаторы для API.""" +from rest_framework import serializers + +from base_objects.models import ( + BaseObject, + Object, + BaseObjectField, + ObjectField, + ) + + +class BaseObjectSerializer(serializers.ModelSerializer): + """Сериализатор поля документов.""" + + class Meta: + fields = '__all__' + model = BaseObject + + +class BaseObjectFieldSerializer(serializers.ModelSerializer): + """Сериализатор поля документов.""" + + class Meta: + fields = '__all__' + model = BaseObjectField + + +class ObjectSerializer(serializers.ModelSerializer): + """Сериализатор поля документов.""" + + class Meta: + fields = '__all__' + model = Object + + +class ObjectFieldSerializer(serializers.ModelSerializer): + """Сериализатор поля документов.""" + + class Meta: + fields = '__all__' + model = ObjectField \ No newline at end of file diff --git a/backend/api/v2/objects/views.py b/backend/api/v2/objects/views.py index e69de29..c664bc9 100644 --- a/backend/api/v2/objects/views.py +++ b/backend/api/v2/objects/views.py @@ -0,0 +1,36 @@ +from rest_framework import ( + viewsets, +) + +from base_objects.models import ( + BaseObject, + Object, + BaseObjectField, + ObjectField + ) +from .serializers import ( + BaseObjectSerializer, + BaseObjectFieldSerializer, + ObjectSerializer, + ObjectFieldSerializer, +) + + +class BaseObjectViewSet(viewsets.ModelViewSet): + queryset = BaseObject.objects.all() + serializer_class = BaseObjectSerializer + + +class BaseObjectFieldViewSet(viewsets.ModelViewSet): + queryset = BaseObjectField.objects.all() + serializer_class = BaseObjectFieldSerializer + + +class ObjectViewSet(viewsets.ModelViewSet): + queryset = Object.objects.all() + serializer_class = ObjectSerializer + + +class ObjectFieldViewSet(viewsets.ModelViewSet): + queryset = ObjectField.objects.all() + serializer_class = ObjectFieldSerializer \ No newline at end of file diff --git a/backend/api/v2/templates/serializers.py b/backend/api/v2/templates/serializers.py index e22a861..339fc4f 100644 --- a/backend/api/v2/templates/serializers.py +++ b/backend/api/v2/templates/serializers.py @@ -103,7 +103,7 @@ class TemplateGroupSerializerMinified(serializers.ModelSerializer): class Meta: model = TemplateFieldGroup - fields = ("id", "name") + fields = ("id", "name", ) class TemplateGroupSerializer(serializers.ModelSerializer): diff --git a/backend/api/v2/urls.py b/backend/api/v2/urls.py index 2c1bc9c..a810605 100644 --- a/backend/api/v2/urls.py +++ b/backend/api/v2/urls.py @@ -10,9 +10,12 @@ from api.v2.favorites.views import ( FavTemplateAPIview, FavDocumentAPIview,) -# from api.v2.objects.views import (BaseObjectViewSet, -# BaseObjectFieldViewSet, -# ObjectViewSet) +from api.v2.objects.views import ( + BaseObjectViewSet, + BaseObjectFieldViewSet, + ObjectViewSet, + ObjectFieldViewSet + ) from django.urls import include, path, re_path from rest_framework.routers import DefaultRouter @@ -46,26 +49,26 @@ viewset=DocumentViewSet, ) -# router_v1.register( -# prefix="base_objects", -# basename="base_objects", -# viewset=BaseObjectViewSet, -# ) -# router_v1.register( -# prefix="base_object_fields", -# basename="base_object_fields", -# viewset=BaseObjectFieldViewSet, -# ) -# router_v1.register( -# prefix="objects", -# basename="objects", -# viewset=ObjectViewSet, -# ) -# router_v1.register( -# prefix="object_fields", -# basename="object_fields", -# viewset=ObjectFieldViewSet, -# ) +router_v1.register( + prefix="base_objects", + basename="base_objects", + viewset=BaseObjectViewSet, +) +router_v1.register( + prefix="base_object_fields", + basename="base_object_fields", + viewset=BaseObjectFieldViewSet, +) +router_v1.register( + prefix="objects", + basename="objects", + viewset=ObjectViewSet, +) +router_v1.register( + prefix="object_fields", + basename="object_fields", + viewset=ObjectFieldViewSet, +) urlpatterns = [ path( diff --git a/backend/base_objects/migrations/0006_remove_object_base_object.py b/backend/base_objects/migrations/0006_remove_object_base_object.py new file mode 100644 index 0000000..d8ffe0e --- /dev/null +++ b/backend/base_objects/migrations/0006_remove_object_base_object.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2 on 2024-01-14 17:40 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('base_objects', '0005_alter_object_base_object'), + ] + + operations = [ + migrations.RemoveField( + model_name='object', + name='base_object', + ), + ] diff --git a/backend/base_objects/models.py b/backend/base_objects/models.py index 29737a1..40deb40 100644 --- a/backend/base_objects/models.py +++ b/backend/base_objects/models.py @@ -57,18 +57,16 @@ class Object(models.Model): # owner = models.ForeignKey( # User, - # on_delete=models.CASCADE, + # on_delete=models.SET_NULL, # verbose_name="Автор документа", # null=True, # blank=True, # ) - base_object = models.ForeignKey( - BaseObject, - on_delete=models.PROTECT, - verbose_name="Юр или физ лицо", - null=True, - blank=True, - ) + # base_object = models.ForeignKey( + # BaseObject, + # on_delete=models.CASCADE, + # verbose_name="поля базового Обьект", + # ) name = models.CharField( max_length=255, verbose_name="Наименование обьекта" ) diff --git a/backend/documents/admin.py b/backend/documents/admin.py index 0313e74..91695b8 100644 --- a/backend/documents/admin.py +++ b/backend/documents/admin.py @@ -101,7 +101,7 @@ class TemplateFieldAdmin(admin.ModelAdmin): "group", "type", "length", - "base_object_field", + # "base_object_field", ) list_filter = ("template",) readonly_fields = ("id",) diff --git a/backend/documents/models.py b/backend/documents/models.py index 8875583..aab3a6b 100644 --- a/backend/documents/models.py +++ b/backend/documents/models.py @@ -7,7 +7,10 @@ from core.constants import Messages from core.template_render import DocumentTemplate -from base_objects.models import BaseObject, BaseObjectField +from base_objects.models import ( + BaseObject, + BaseObjectField, +) User = get_user_model() diff --git a/backend/request/objects.http b/backend/request/objects.http new file mode 100644 index 0000000..aad2263 --- /dev/null +++ b/backend/request/objects.http @@ -0,0 +1,37 @@ +@TOKEN = Token 66ba19730c8aaad7378dc20fae75656b06b00e02 + +# @URL = https://documents-template.site/ +@URL = http://localhost:8000/api/v2 + + +### Все базовые обьекты +GET {{URL}}/base_objects/ +Content-Type: application/json +Authorization: {{TOKEN}} + +{ +} + +### Все поля базового обьекта +GET {{URL}}/base_object_fields/ +Content-Type: application/json +Authorization: {{TOKEN}} + +{ +} + +### Все поля базового обьекта +GET {{URL}}/objects/ +Content-Type: application/json +Authorization: {{TOKEN}} + +{ +} + +### Все поля базового обьекта +GET {{URL}}/object_fields/ +Content-Type: application/json +Authorization: {{TOKEN}} + +{ +} \ No newline at end of file diff --git a/backend/request/template.http b/backend/request/template.http index c49b524..ca97d79 100644 --- a/backend/request/template.http +++ b/backend/request/template.http @@ -1,4 +1,4 @@ -@TOKEN = Token c911144116cd1689f8fd01e00102bcd1ce4cc175 +@TOKEN = Token 66ba19730c8aaad7378dc20fae75656b06b00e02 # @URL = https://documents-template.site/ @URL = http://localhost:8000/api/v2 @@ -13,7 +13,7 @@ Authorization: {{TOKEN}} } ### Просмотр одного шаблона -GET {{URL}}/templates/42/ +GET {{URL}}/templates/22/ Content-Type: application/json Authorization: {{TOKEN}} @@ -30,7 +30,7 @@ Authorization: {{TOKEN}} } ### Добавить шаблон в избранное -POST {{URL}}/templates/42/favorite/ +POST {{URL}}/templates/22/favorite/ Content-Type: application/json Authorization: {{TOKEN}} @@ -47,7 +47,7 @@ Authorization: {{TOKEN}} ### Получить первью документа от анонимного пользователя -POST {{URL}}/templates/42/download_preview/ +POST {{URL}}/templates/22/download_preview/ Content-Type: application/json # Authorization: {{TOKEN}} diff --git a/backend/users/tests.py b/backend/users/tests.py index 19b0c86..9fa6235 100644 --- a/backend/users/tests.py +++ b/backend/users/tests.py @@ -1,61 +1,61 @@ -import shutil -import tempfile - -from django.conf import settings -from django.contrib.auth import get_user_model -from django.test import override_settings -from rest_framework import status -from rest_framework.test import APIClient, APITestCase - -DEFAULT_NUMBER_OF_USERS = 0 -TEMP_MEDIA_ROOT = tempfile.mkdtemp(dir=settings.BASE_DIR) - -User = get_user_model() - - -@override_settings(MEDIA_ROOT=TEMP_MEDIA_ROOT) -class TestAPIRegistrationAndAuthenticationUser(APITestCase): - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.client = APIClient() - cls.test_user_data = { - "email": "user@mail.ru", - "password": "qwertyqwerty123", - } - cls.response_registration = cls.client.post( - "/api/users/", cls.test_user_data - ) - - @classmethod - def tearDownClass(cls): - super().tearDownClass() - shutil.rmtree(TEMP_MEDIA_ROOT, ignore_errors=True) - - def test_registration(self): - response = self.response_registration - user = User.objects.first() - user_data = [user.id, user.email] - user_count = User.objects.count() - - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - self.assertEqual(user_data, [*response.data.values()]) - self.assertEqual(user_count, DEFAULT_NUMBER_OF_USERS + 1) - - def test_authentication(self): - response_registration = self.response_registration - response_token_login = self.client.post( - "/api/auth/token/login/", self.test_user_data - ) - response_auth = self.client.get( - "/api/users/me/", - HTTP_AUTHORIZATION=f'Token {response_token_login.data["auth_token"]}', - ) - self.assertEqual( - response_registration.data["id"], - response_auth.data["id"], - ) - self.assertEqual( - response_registration.data["email"], - response_auth.data["email"], - ) \ No newline at end of file +# import shutil +# import tempfile + +# from django.conf import settings +# from django.contrib.auth import get_user_model +# from django.test import override_settings +# from rest_framework import status +# from rest_framework.test import APIClient, APITestCase + +# DEFAULT_NUMBER_OF_USERS = 0 +# TEMP_MEDIA_ROOT = tempfile.mkdtemp(dir=settings.BASE_DIR) + +# User = get_user_model() + + +# @override_settings(MEDIA_ROOT=TEMP_MEDIA_ROOT) +# class TestAPIRegistrationAndAuthenticationUser(APITestCase): +# @classmethod +# def setUpClass(cls): +# super().setUpClass() +# cls.client = APIClient() +# cls.test_user_data = { +# "email": "user@mail.ru", +# "password": "qwertyqwerty123", +# } +# cls.response_registration = cls.client.post( +# "/api/users/", cls.test_user_data +# ) + +# @classmethod +# def tearDownClass(cls): +# super().tearDownClass() +# shutil.rmtree(TEMP_MEDIA_ROOT, ignore_errors=True) + +# def test_registration(self): +# response = self.response_registration +# user = User.objects.first() +# user_data = [user.id, user.email] +# user_count = User.objects.count() + +# self.assertEqual(response.status_code, status.HTTP_201_CREATED) +# self.assertEqual(user_data, [*response.data.values()]) +# self.assertEqual(user_count, DEFAULT_NUMBER_OF_USERS + 1) + +# def test_authentication(self): +# response_registration = self.response_registration +# response_token_login = self.client.post( +# "/api/auth/token/login/", self.test_user_data +# ) +# response_auth = self.client.get( +# "/api/users/me/", +# HTTP_AUTHORIZATION=f'Token {response_token_login.data["auth_token"]}', +# ) +# self.assertEqual( +# response_registration.data["id"], +# response_auth.data["id"], +# ) +# self.assertEqual( +# response_registration.data["email"], +# response_auth.data["email"], +# ) \ No newline at end of file