RABC fejlesztése és beélesítése hibák kijavításával
This commit is contained in:
@@ -2,10 +2,12 @@
|
||||
import logging
|
||||
from fastapi import APIRouter, UploadFile, File, HTTPException, status, Depends
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy import select, func, text
|
||||
from sqlalchemy import select, func
|
||||
from app.api.deps import get_db, get_current_user
|
||||
from app.models.identity import User
|
||||
from app.models import Asset # JAVÍTVA: Asset modell
|
||||
from app.models.marketplace.organization import Organization
|
||||
from app.models.core_logic import SubscriptionTier
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -13,10 +15,28 @@ router = APIRouter()
|
||||
|
||||
@router.post("/scan-registration")
|
||||
async def scan_registration_document(file: UploadFile = File(...), db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user)):
|
||||
stmt_limit = text("SELECT (value->>:plan)::int FROM system.system_parameters WHERE key = 'VEHICLE_LIMIT'")
|
||||
plan_key = (current_user.subscription_plan or "free").lower()
|
||||
res = await db.execute(stmt_limit, {"plan": plan_key})
|
||||
max_allowed = max(res.scalar() or 1, 1)
|
||||
# ── P0 FEATURE: Quota engine sync — read org's subscription_tier rules ──
|
||||
# Instead of hardcoded plan-based lookup from system_parameters,
|
||||
# we now read the organization's assigned subscription_tier rules.
|
||||
max_allowed = 1 # default fallback
|
||||
|
||||
if current_user.scope_id:
|
||||
# Get the organization and its subscription tier
|
||||
stmt_org = select(Organization).where(Organization.id == current_user.scope_id)
|
||||
result = await db.execute(stmt_org)
|
||||
org = result.scalar_one_or_none()
|
||||
|
||||
if org and org.subscription_tier_id:
|
||||
stmt_tier = select(SubscriptionTier).where(SubscriptionTier.id == org.subscription_tier_id)
|
||||
tier_result = await db.execute(stmt_tier)
|
||||
tier = tier_result.scalar_one_or_none()
|
||||
|
||||
if tier and tier.rules:
|
||||
max_vehicles = tier.rules.get("allowances", {}).get("max_vehicles", 1)
|
||||
max_allowed = max(int(max_vehicles), 1)
|
||||
elif org:
|
||||
# Fallback to legacy base_asset_limit if no tier assigned
|
||||
max_allowed = max(org.base_asset_limit or 1, 1)
|
||||
|
||||
stmt_count = select(func.count(Asset.id)).where(
|
||||
Asset.owner_org_id == current_user.scope_id,
|
||||
|
||||
Reference in New Issue
Block a user