refactor(B1): migrate to domain-driven project structure
Move all models/schemas/services/routers into app/domains/. Keep backward-compat shims in old locations for imports. Preserves domains/rendering/tasks.py from Phase A. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,22 +1,3 @@
|
||||
"""Order number generation and business logic."""
|
||||
from datetime import datetime
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy import select, func
|
||||
from app.models.order import Order
|
||||
|
||||
|
||||
async def generate_order_number(db: AsyncSession) -> str:
|
||||
"""Generate next sequential order number: SA-2026-XXXXX."""
|
||||
year = datetime.utcnow().year
|
||||
prefix = f"SA-{year}-"
|
||||
|
||||
# Use MAX to find the highest existing sequence number this year.
|
||||
# COUNT-based approach breaks when orders are deleted (produces duplicates).
|
||||
result = await db.execute(
|
||||
select(func.max(Order.order_number)).where(Order.order_number.like(f"{prefix}%"))
|
||||
)
|
||||
max_num = result.scalar()
|
||||
if max_num:
|
||||
last_seq = int(max_num.split("-")[-1])
|
||||
return f"{prefix}{last_seq + 1:05d}"
|
||||
return f"{prefix}00001"
|
||||
# Compat shim — use app.domains.orders.service instead
|
||||
from app.domains.orders.service import generate_order_number, check_order_completion
|
||||
__all__ = ["generate_order_number", "check_order_completion"]
|
||||
|
||||
Reference in New Issue
Block a user