18 lines
557 B
Python
18 lines
557 B
Python
import uuid
|
|
from typing import Any, Type
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
|
|
def short_id(prefix: str, size: int = 8) -> str:
|
|
return f"{prefix}_{uuid.uuid4().hex[:size]}"
|
|
|
|
|
|
def unique_short_id(prefix: str, db: Session, model_cls: Type[Any], size: int = 8) -> str:
|
|
for _ in range(10):
|
|
candidate = short_id(prefix, size=size)
|
|
exists = db.query(model_cls.id).filter(model_cls.id == candidate).first()
|
|
if not exists:
|
|
return candidate
|
|
raise RuntimeError(f"failed to generate unique id for {model_cls.__name__}")
|