diff --git a/gso/services/subscriptions.py b/gso/services/subscriptions.py index 9185265c09d31a4c6a010336123a407a969404b1..e5b3c8e75fbc67570f49cb3f3e2272e759018d34 100644 --- a/gso/services/subscriptions.py +++ b/gso/services/subscriptions.py @@ -19,6 +19,8 @@ from orchestrator.db import ( from orchestrator.domain import SubscriptionModel from orchestrator.services.subscriptions import query_in_use_by_subscriptions from orchestrator.types import SubscriptionLifecycle, UUIDstr +from sqlalchemy import text +from sqlalchemy.exc import SQLAlchemyError from gso.products import ProductName, ProductType from gso.products.product_types.site import Site @@ -329,3 +331,39 @@ def is_virtual_circuit_id_available(virtual_circuit_id: str) -> bool: True if the virtual circuit ID is unique (not found), False if it exists. """ return is_resource_type_value_unique("virtual_circuit_id", virtual_circuit_id) + + +def make_unique_gs_id() -> str: + """Generate a unique GS ID using the gs_id_seq database sequence. + + Returns: + str: A unique GS ID in the format `GS-<number>`. + + Raises: + ValueError: If there is an error generating the ID. + """ + try: + new_id = db.session.execute(text("SELECT nextval('gs_id_seq')")).scalar_one() + except SQLAlchemyError as exc: + error_message = f"Error generating GS ID: {exc}" + raise ValueError(error_message) from exc + else: + return f"GS-{new_id}" + + +def make_unique_ga_id() -> str: + """Generate a unique GA ID using the ga_id_seq database sequence. + + Returns: + str: A unique GA ID in the format `GA<number>`. + + Raises: + ValueError: If there is an error generating the ID. + """ + try: + new_id = db.session.execute(text("SELECT nextval('ga_id_seq')")).scalar_one() + except SQLAlchemyError as exc: + error_message = f"Error generating GA ID: {exc}" + raise ValueError(error_message) from exc + else: + return f"GA-{new_id}"