48 lines
1.5 KiB
Python
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
|