20 lines
745 B
Python
20 lines
745 B
Python
from django.contrib.contenttypes.models import ContentType
|
|
|
|
from apps.providers.models import ExternalMapping
|
|
|
|
|
|
def upsert_external_mapping(*, provider_namespace: str, external_id: str, instance, raw_payload: dict | None = None) -> ExternalMapping:
|
|
"""Create or update a provider mapping for any internal model instance."""
|
|
content_type = ContentType.objects.get_for_model(instance.__class__)
|
|
mapping, _ = ExternalMapping.objects.update_or_create(
|
|
provider_namespace=provider_namespace,
|
|
content_type=content_type,
|
|
object_id=instance.pk,
|
|
defaults={
|
|
"external_id": external_id,
|
|
"raw_payload": raw_payload or {},
|
|
"is_active": True,
|
|
},
|
|
)
|
|
return mapping
|