Skip to content

Commit 49a66f8

Browse files
committed
🎨(ingestion-presentation) add ISerializerToDomainMapper
1 parent 804f8c5 commit 49a66f8

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

src/web/domain/interfaces/mapper_interface.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from abc import ABC, abstractmethod
12
from typing import Generic, Optional, Protocol, TypeVar
23

34
DomainType_contra = TypeVar("DomainType_contra", contravariant=True)
@@ -17,3 +18,12 @@ class IToDomainMapper(Protocol, Generic[SpecificType_contra, DomainType_co]):
1718
def to_domain(
1819
self, infrastructure_object: Optional[SpecificType_contra]
1920
) -> Optional[DomainType_co]: ...
21+
22+
23+
class ISerializerToDomainMapper(ABC):
24+
@abstractmethod
25+
def to_domain(self): ...
26+
27+
@staticmethod
28+
@abstractmethod
29+
def to_domain_from_validated(data: dict): ...

src/web/presentation/ingestion/serializers.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from rest_framework import serializers
22

33
from domain.entities.offer import Offer
4+
from domain.interfaces.mapper_interface import ISerializerToDomainMapper
45
from domain.value_objects.area import GeographicalArea
56
from domain.value_objects.category import Category
67
from domain.value_objects.contract_type import ContractKind, ContractType
@@ -103,7 +104,7 @@ class DescriptionInputSerializer(serializers.Serializer):
103104
additionnal = serializers.CharField(max_length=1500, allow_blank=True)
104105

105106

106-
class LocalisationInputSerializer(serializers.Serializer):
107+
class LocalisationInputSerializer(serializers.Serializer, ISerializerToDomainMapper):
107108
area_code = serializers.ChoiceField(
108109
choices=[(a.name, a.value) for a in GeographicalArea]
109110
)
@@ -127,6 +128,9 @@ def validate(self, data):
127128
)
128129
return data
129130

131+
def to_domain(self) -> Localisation:
132+
return self.to_domain_from_validated(self.validated_data)
133+
130134
@staticmethod
131135
def to_domain_from_validated(data: dict) -> Localisation:
132136
return Localisation(
@@ -188,7 +192,7 @@ class PublicationInputSerializer(serializers.Serializer):
188192
vacancy_start_date = serializers.DateTimeField(allow_null=True)
189193

190194

191-
class OffersInputSerializer(serializers.Serializer):
195+
class OffersInputSerializer(serializers.Serializer, ISerializerToDomainMapper):
192196
identity = IdentityInputSerializer()
193197

194198
# general infos

0 commit comments

Comments
 (0)