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

48 lines
1.5 KiB
Python

import logging
from typing import Optional, Dict, Any
from company.models.company import Company
from company.serializers.company import CompanySerializer
_log = logging.getLogger(__name__)
class CompanyCreateAndUpdateService:
"""Service for creating, and updating company"""
def __init__(self, company: Optional[Company], data: Dict[str, Any]):
_log.debug('Start create or update company')
self.company = company
self.data = self.prepare_date(data.copy())
def prepare_date(self, data: Dict[str, Any]) -> Dict[str, Any]:
"""Prepare data for creating and updating company"""
location_id = data.get('location')
if location_id:
data['location_id'] = location_id
del data['location']
return data
def _update(self) -> Company:
"""Update company data"""
_log.debug(f'Update company: {self.company}')
company = self.company
for attr, value in self.data.items():
setattr(company, attr, value)
company.save()
return company
def _create(self) -> Company:
"""Create company."""
company = Company.objects.create(**self.data)
_log.debug(f'Create company: {company}')
return company
def save(self) -> Dict:
"""SAve company data"""
_log.debug(f'Save company nata: {self.company}')
if self.company is None:
company = self._create()
else:
company = self._update()
return CompanySerializer(company).data