31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
from django.db import transaction
|
|
from core.models import Source, Entity, IdentityProfile
|
|
|
|
class IngestionService:
|
|
@staticmethod
|
|
def ingest_data(source_name, entity_type, value, profile_data=None):
|
|
"""
|
|
Aggregates and normalizes data into the system, optionally linking it to an IdentityProfile.
|
|
"""
|
|
with transaction.atomic():
|
|
source, _ = Source.objects.get_or_create(name=source_name)
|
|
|
|
profile = None
|
|
if profile_data:
|
|
profile, _ = IdentityProfile.objects.get_or_create(
|
|
full_name=profile_data.get('full_name', 'Unknown'),
|
|
defaults={'description': profile_data.get('description', '')}
|
|
)
|
|
|
|
entity, created = Entity.objects.get_or_create(
|
|
entity_type=entity_type,
|
|
value=value,
|
|
source=source,
|
|
defaults={'profile': profile}
|
|
)
|
|
|
|
if not created and profile:
|
|
entity.profile = profile
|
|
entity.save()
|
|
|
|
return entity |