diff --git a/core/apps/evaluation/migrations/0032_certificatemodel.py b/core/apps/evaluation/migrations/0032_certificatemodel.py new file mode 100644 index 0000000..cbd26f6 --- /dev/null +++ b/core/apps/evaluation/migrations/0032_certificatemodel.py @@ -0,0 +1,28 @@ +# Generated by Django 6.0.4 on 2026-04-23 11:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('evaluation', '0031_remove_autoevaluationmodel_object_location_city_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='CertificateModel', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('title', models.CharField(max_length=255, verbose_name='title')), + ('file_url', models.URLField(max_length=255, verbose_name='file url')), + ], + options={ + 'verbose_name': 'Certificate', + 'verbose_name_plural': 'Certificates', + 'db_table': 'certificate', + }, + ), + ] diff --git a/core/apps/evaluation/models/__init__.py b/core/apps/evaluation/models/__init__.py index a625148..46a6a07 100644 --- a/core/apps/evaluation/models/__init__.py +++ b/core/apps/evaluation/models/__init__.py @@ -11,3 +11,4 @@ from .report import * # noqa from .request import * # noqa from .valuation import * # noqa from .vehicle import * # noqa +from .certificate import * # noqa diff --git a/core/apps/evaluation/models/certificate.py b/core/apps/evaluation/models/certificate.py new file mode 100644 index 0000000..5b8233c --- /dev/null +++ b/core/apps/evaluation/models/certificate.py @@ -0,0 +1,20 @@ +from django.db import models +from django_core.models import AbstractBaseModel +from model_bakery import baker +from django.utils.translation import gettext_lazy as _ + +class CertificateModel(AbstractBaseModel): + title = models.CharField(verbose_name=_("title"), max_length=255, blank=False, null=False) + file_url = models.URLField(verbose_name=_("file url"), max_length=255, blank=False, null=False) + + def __str__(self): + return self.title + + @classmethod + def _baker(cls): + return baker.make(cls) + + class Meta: + db_table = "certificate" + verbose_name = _("Certificate") + verbose_name_plural = _("Certificates") \ No newline at end of file diff --git a/core/apps/evaluation/serializers/__init__.py b/core/apps/evaluation/serializers/__init__.py index 600d37c..d137a69 100644 --- a/core/apps/evaluation/serializers/__init__.py +++ b/core/apps/evaluation/serializers/__init__.py @@ -12,3 +12,4 @@ from .request import * # noqa from .valuation import * # noqa from .vehicle import * # noqa from .tech_passport import * # noqa +from .certificate import * # noqa diff --git a/core/apps/evaluation/serializers/certificate/__init__.py b/core/apps/evaluation/serializers/certificate/__init__.py new file mode 100644 index 0000000..d736920 --- /dev/null +++ b/core/apps/evaluation/serializers/certificate/__init__.py @@ -0,0 +1 @@ +from .certificate import * # noqa diff --git a/core/apps/evaluation/serializers/certificate/certificate.py b/core/apps/evaluation/serializers/certificate/certificate.py new file mode 100644 index 0000000..1a7bcdb --- /dev/null +++ b/core/apps/evaluation/serializers/certificate/certificate.py @@ -0,0 +1,12 @@ +from rest_framework import serializers +from core.apps.evaluation.models import CertificateModel + +class BaseCertificateSerializer(serializers.ModelSerializer): + + class Meta: + model = CertificateModel + fields = [ + "id", + "title", + "file_url" + ] \ No newline at end of file diff --git a/core/apps/evaluation/urls.py b/core/apps/evaluation/urls.py index cf72238..8b25f9f 100644 --- a/core/apps/evaluation/urls.py +++ b/core/apps/evaluation/urls.py @@ -29,6 +29,7 @@ from .views import ( DidoxCompanyInfoAPIView, TechPassportAPIView, EvaluationStatusChange, + CertificateView, ArchiveQuickEvaluationView, ArchiveEvaluationrequestView, ) @@ -55,6 +56,7 @@ router.register("vehicle", VehicleView, basename="vehicle") router.register("valuation", ValuationView, basename="valuation") router.register("property-owner", PropertyOwnerView, basename="property-owner") router.register("customer", CustomerView, basename="customer") +router.register("certificate", CertificateView, basename="certificate") urlpatterns = [ path("", include(router.urls)), path("auto-evaluation/appraisers/", include( diff --git a/core/apps/evaluation/views/__init__.py b/core/apps/evaluation/views/__init__.py index 9fd419f..a6f2bd5 100644 --- a/core/apps/evaluation/views/__init__.py +++ b/core/apps/evaluation/views/__init__.py @@ -13,3 +13,4 @@ from .valuation import * # noqa from .vehicle import * # noqa from .didox import * # noqa from .tech_passport import * # noqa +from .certificate import * # noqa diff --git a/core/apps/evaluation/views/certificate.py b/core/apps/evaluation/views/certificate.py new file mode 100644 index 0000000..a990840 --- /dev/null +++ b/core/apps/evaluation/views/certificate.py @@ -0,0 +1,20 @@ +from django_core.mixins import BaseViewSetMixin +from drf_spectacular.utils import extend_schema +from rest_framework.permissions import IsAuthenticated +from rest_framework.viewsets import ModelViewSet +from core.apps.evaluation.models import CertificateModel +from core.apps.evaluation.serializers.certificate import BaseCertificateSerializer +from rest_framework.filters import SearchFilter + +@extend_schema(tags=["Certificate"]) +class CertificateView(BaseViewSetMixin, ModelViewSet): + queryset = CertificateModel.objects.all() + serializer_class = BaseCertificateSerializer + permission_classes = [IsAuthenticated] + + filter_backends = [SearchFilter] + search_fields = ["title"] + + pagination_class = None + + action_permission_classes = {}