allo-chat / backend /app /refs.py
dave
Upload folder using huggingface_hub
e4227ee verified
Raw
History Blame Contribute Delete
1.49 kB
"""Numéros de référence d'événements — lisibles et recherchables côté admin.
Format : `PREFIX-NNNNNN` (id zéro-paddé sur 6). Déterministe : un événement a
toujours la même référence ; aucune colonne ajoutée en base, l'id (clé primaire)
suffit. Les références ne sont PAS des secrets — le `claim_token` reste le seul
accès privé du propriétaire. Elles servent au support : si un usager écrit en
citant « VU-000019 », on retrouve l'événement instantanément (cf. /admin).
Types :
- cat → SUIV : déclaration d'un chat perdu (ce que le propriétaire « suit »)
- poster → AFFI : affiche partagée par un passant
- sighting → VU : chat repéré / signalé par un trouveur
- lead → SIGN : signalement transmis au propriétaire (« c'est lui »)
"""
from __future__ import annotations
PREFIXES: dict[str, str] = {
"cat": "SUIV",
"poster": "AFFI",
"sighting": "VU",
"lead": "SIGN",
}
_BY_PREFIX: dict[str, str] = {v: k for k, v in PREFIXES.items()}
def make_ref(kind: str, id: int) -> str:
"""(kind, id) → « VU-000019 ». kind ∈ PREFIXES."""
return f"{PREFIXES[kind]}-{id:06d}"
def parse_ref(ref: str) -> tuple[str, int] | None:
"""« vu-19 » / « VU-000019 » → (\"sighting\", 19). None si invalide."""
ref = (ref or "").strip().upper()
prefix, _, num = ref.partition("-")
kind = _BY_PREFIX.get(prefix)
if not kind or not num.isdigit():
return None
return kind, int(num)