""" ID Generation Utilities Provides unique short numeric ID generation with prefixes. Matches contract examples: - ath_102938 (athlete) - cas_554433 (case) - evt_776655 (event) - mil_001 (milestone) - schl_001 (school) """ import time import random # Atomic counter storage per prefix _counter_lock = {} _last_timestamp = {} def generate_id(prefix: str) -> str: """ Generate unique short numeric ID with prefix Uses timestamp + random for uniqueness without DB sequence dependency Format: prefix + 9-digit number (6 from timestamp + 3 random) Examples: - ath_102938 - cas_554433 - evt_776655 """ # Use timestamp + random for uniqueness ts = int(time.time() * 1000) % 1000000 rand = random.randint(0, 999) return f"{prefix}{ts:06d}{rand:03d}" def generate_id_with_counter(prefix: str, counter: int) -> str: """ Generate ID with explicit counter (for testing/sequencing) Format: prefix + counter padded to 6 digits """ return f"{prefix}{counter:06d}"