old_console/company/views/company_api.py
2024-11-02 14:12:45 +03:00

47 lines
1.7 KiB
Python

from typing import Optional
from django.http import Http404
from rest_framework.response import Response
from rest_framework.views import APIView
from company.models.company import Company
from company.serializers.company import CompanySerializer, CompanyCreateSerializer
from company.services.company_create_update import CompanyCreateAndUpdateService
from core.mixins import ApiPermissionCheckMixin
from perms.models import Perm
class CompanyApiView(ApiPermissionCheckMixin, APIView):
action = None
console_permissions = {'get': [Perm.can_view_company_card], 'post': [Perm.can_edit_company_card]}
def dispatch(self, request, *args, **kwargs):
if request.method == 'GET':
self.action = 'get'
elif request.method == 'POST':
self.action = 'post'
else:
self.action = None
return super().dispatch(request, *args, **kwargs)
def get_company(self) -> Optional[Company]:
"""Return first Compay or None"""
return Company.objects.first()
def get(self, request, *args, **kwargs) -> Response:
"""Return date company."""
company = self.get_company()
if company is None:
return Response({"details": "company not initialized"})
data = CompanySerializer(company).data
return Response(data)
def post(self, request, *args, **kwargs) -> Response:
"""Creating or updating company in database."""
serializer = CompanyCreateSerializer(data=request.data)
if not serializer.is_valid():
return Response(serializer.errors, status=400)
company = self.get_company()
data = CompanyCreateAndUpdateService(company, serializer.data).save()
return Response(data, status=200)