feat: suggest confirmed external aliases
This commit is contained in:
@@ -34,6 +34,20 @@ def map_observation(
|
||||
return observation
|
||||
|
||||
|
||||
def suggest_aliases(session: Session, observation: ExternalObservation) -> tuple[Fish | None, Waterbody | None]:
|
||||
fish_alias = session.scalar(select(ExternalEntityAlias).where(
|
||||
ExternalEntityAlias.source_system == observation.source_system,
|
||||
ExternalEntityAlias.entity_type == "fish",
|
||||
ExternalEntityAlias.external_id == (observation.fish_external_id or observation.fish_name),
|
||||
))
|
||||
waterbody_alias = session.scalar(select(ExternalEntityAlias).where(
|
||||
ExternalEntityAlias.source_system == observation.source_system,
|
||||
ExternalEntityAlias.entity_type == "waterbody",
|
||||
ExternalEntityAlias.external_id == (observation.waterbody_external_id or observation.waterbody_name),
|
||||
))
|
||||
return (fish_alias.fish if fish_alias else None, waterbody_alias.waterbody if waterbody_alias else None)
|
||||
|
||||
|
||||
def reject_observation(session: Session, observation: ExternalObservation, *, reason: str) -> ExternalObservation:
|
||||
if observation.status == "published":
|
||||
raise ExternalReviewError("published observation cannot be rejected")
|
||||
@@ -109,6 +123,8 @@ def _save_alias(
|
||||
external_id=external_id, external_name=observation.fish_name if fish else observation.waterbody_name,
|
||||
)
|
||||
session.add(alias)
|
||||
elif (fish is not None and alias.fish_id != fish.id) or (waterbody is not None and alias.waterbody_id != waterbody.id):
|
||||
raise ExternalReviewError(f"confirmed {entity_type} alias points to another entity")
|
||||
alias.fish = fish
|
||||
alias.waterbody = waterbody
|
||||
alias.updated_at = datetime.now(timezone.utc)
|
||||
|
||||
Reference in New Issue
Block a user