11from datetime import datetime
22from typing import List , Optional
3+ from uuid import UUID
34
45from pydantic import HttpUrl , ValidationError
56
89from domain .exceptions .document_error import InvalidDocumentTypeError
910from domain .exceptions .offer_errors import OfferDoesNotExist
1011from domain .repositories .offers_repository_interface import IOffersRepository
12+ from domain .repositories .source_repository_interface import ISourceRepository
1113from domain .services .document_cleaner_interface import CleaningResult , IDocumentCleaner
1214from domain .services .logger_interface import ILogger
1315from domain .value_objects .area import GeographicalArea
3436
3537
3638class OffersCleaner (IDocumentCleaner [Offer ]):
37- def __init__ (self , logger : ILogger , offers_repository : IOffersRepository ):
39+ def __init__ (
40+ self ,
41+ logger : ILogger ,
42+ offers_repository : IOffersRepository ,
43+ source_repository : ISourceRepository ,
44+ ):
3845 self .logger = logger
3946 self .offers_repository = offers_repository
47+ self .source_repository = source_repository
4048
4149 def clean (self , raw_documents : List [Document ]) -> CleaningResult [Offer ]:
4250 for document in raw_documents :
4351 if document .type != DocumentType .OFFERS :
4452 raise InvalidDocumentTypeError (document .type .value ) # todo: test
4553
54+ sources = self .source_repository .get_all ()
55+ if not sources :
56+ raise ValueError ("No source found in repository" )
57+ # TODO: replace when we will have multiple instances of Talentsoft
58+ source_id = sources [0 ].source_id
59+
4660 validated_offers = []
4761 cleaning_errors = []
4862
@@ -63,7 +77,7 @@ def clean(self, raw_documents: List[Document]) -> CleaningResult[Offer]:
6377 for talentsoft_offer in validated_offers :
6478 self .logger .info (f"Processing offer { talentsoft_offer .reference } " )
6579 try :
66- offer = self ._map_talentsoft_to_offer (talentsoft_offer )
80+ offer = self ._map_talentsoft_to_offer (talentsoft_offer , source_id )
6781 offers_list .append (offer )
6882 self .logger .debug (
6983 f"Successfully processed offer { talentsoft_offer .reference } "
@@ -88,7 +102,7 @@ def clean(self, raw_documents: List[Document]) -> CleaningResult[Offer]:
88102 return CleaningResult (entities = offers_list , cleaning_errors = cleaning_errors )
89103
90104 def _map_talentsoft_to_offer (
91- self , talentsoft_offer : TalentsoftDetailOffer
105+ self , talentsoft_offer : TalentsoftDetailOffer , source_id : UUID
92106 ) -> Offer :
93107 # Extract verse from salaryRange if available
94108 ts_verse = (
@@ -148,6 +162,7 @@ def _map_talentsoft_to_offer(
148162 publication_date = publication_date ,
149163 beginning_date = beginning_date ,
150164 family_code = family_code_value ,
165+ source_id = source_id ,
151166 )
152167 try :
153168 existing_offer = self .offers_repository .get_by_external_id (
0 commit comments