72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
import random
|
|
import string
|
|
from typing import Optional
|
|
from sqlalchemy.orm import Session
|
|
from models.name import Name
|
|
|
|
def generate_random_name_code(length: int = 6) -> str:
|
|
"""
|
|
Generate a random name code of the specified length.
|
|
|
|
Args:
|
|
length (int): Length of the name code (default: 6).
|
|
|
|
Returns:
|
|
str: Random name code.
|
|
"""
|
|
characters = string.ascii_uppercase + string.digits
|
|
return ''.join(random.choice(characters) for _ in range(length))
|
|
|
|
def get_name_by_code(db: Session, name_code: str) -> Optional[Name]:
|
|
"""
|
|
Get a name by its code.
|
|
|
|
Args:
|
|
db (Session): SQLAlchemy database session.
|
|
name_code (str): Name code to search for.
|
|
|
|
Returns:
|
|
Optional[Name]: Name object if found, None otherwise.
|
|
"""
|
|
return db.query(Name).filter(Name.name_code == name_code).first()
|
|
|
|
def create_name(db: Session, name_code: Optional[str] = None) -> Name:
|
|
"""
|
|
Create a new name with a unique name code.
|
|
|
|
Args:
|
|
db (Session): SQLAlchemy database session.
|
|
name_code (Optional[str]): Custom name code (default: None).
|
|
|
|
Returns:
|
|
Name: Created name object.
|
|
"""
|
|
if name_code is None:
|
|
name_code = generate_random_name_code()
|
|
|
|
# Check if the name code already exists
|
|
existing_name = get_name_by_code(db, name_code)
|
|
if existing_name:
|
|
raise ValueError(f"Name code '{name_code}' already exists.")
|
|
|
|
db_name = Name(name_code=name_code)
|
|
db.add(db_name)
|
|
db.commit()
|
|
db.refresh(db_name)
|
|
|
|
return db_name
|
|
|
|
def generate_name_code(db: Session) -> str:
|
|
"""
|
|
Generate a unique name code.
|
|
|
|
Args:
|
|
db (Session): SQLAlchemy database session.
|
|
|
|
Returns:
|
|
str: Unique name code.
|
|
"""
|
|
while True:
|
|
name_code = generate_random_name_code()
|
|
if not get_name_by_code(db, name_code):
|
|
return name_code |