fix: correct imports in admin subscriptions module

- Use get_current_admin_api instead of non-existent get_current_admin
- Use get_db from app.core.database
- Replace generic NotFoundException with specific exceptions:
  - TierNotFoundException for tier lookup failures
  - ConflictException for duplicate tier codes
  - BusinessLogicException for tier deletion with active subscriptions
  - ResourceNotFoundException for subscription lookup failures

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-25 22:01:17 +01:00
parent 3b67515bc2
commit 56e851592c
2 changed files with 22 additions and 16 deletions

View File

@@ -14,7 +14,8 @@ import logging
from fastapi import APIRouter, Depends, Path, Query
from sqlalchemy.orm import Session
from app.api.deps import get_current_admin, get_db
from app.api.deps import get_current_admin_api
from app.core.database import get_db
from app.services.admin_subscription_service import admin_subscription_service
from models.database.user import User
from models.schema.billing import (
@@ -43,7 +44,7 @@ logger = logging.getLogger(__name__)
@router.get("/tiers", response_model=SubscriptionTierListResponse)
def list_subscription_tiers(
include_inactive: bool = Query(False, description="Include inactive tiers"),
current_user: User = Depends(get_current_admin),
current_user: User = Depends(get_current_admin_api),
db: Session = Depends(get_db),
):
"""
@@ -62,7 +63,7 @@ def list_subscription_tiers(
@router.get("/tiers/{tier_code}", response_model=SubscriptionTierResponse)
def get_subscription_tier(
tier_code: str = Path(..., description="Tier code"),
current_user: User = Depends(get_current_admin),
current_user: User = Depends(get_current_admin_api),
db: Session = Depends(get_db),
):
"""Get a specific subscription tier by code."""
@@ -73,7 +74,7 @@ def get_subscription_tier(
@router.post("/tiers", response_model=SubscriptionTierResponse, status_code=201)
def create_subscription_tier(
tier_data: SubscriptionTierCreate,
current_user: User = Depends(get_current_admin),
current_user: User = Depends(get_current_admin_api),
db: Session = Depends(get_db),
):
"""Create a new subscription tier."""
@@ -87,7 +88,7 @@ def create_subscription_tier(
def update_subscription_tier(
tier_data: SubscriptionTierUpdate,
tier_code: str = Path(..., description="Tier code"),
current_user: User = Depends(get_current_admin),
current_user: User = Depends(get_current_admin_api),
db: Session = Depends(get_db),
):
"""Update a subscription tier."""
@@ -101,7 +102,7 @@ def update_subscription_tier(
@router.delete("/tiers/{tier_code}", status_code=204)
def delete_subscription_tier(
tier_code: str = Path(..., description="Tier code"),
current_user: User = Depends(get_current_admin),
current_user: User = Depends(get_current_admin_api),
db: Session = Depends(get_db),
):
"""
@@ -125,7 +126,7 @@ def list_vendor_subscriptions(
status: str | None = Query(None, description="Filter by status"),
tier: str | None = Query(None, description="Filter by tier"),
search: str | None = Query(None, description="Search vendor name"),
current_user: User = Depends(get_current_admin),
current_user: User = Depends(get_current_admin_api),
db: Session = Depends(get_db),
):
"""
@@ -161,7 +162,7 @@ def list_vendor_subscriptions(
@router.get("/{vendor_id}", response_model=VendorSubscriptionWithVendor)
def get_vendor_subscription(
vendor_id: int = Path(..., description="Vendor ID"),
current_user: User = Depends(get_current_admin),
current_user: User = Depends(get_current_admin_api),
db: Session = Depends(get_db),
):
"""Get subscription details for a specific vendor."""
@@ -181,7 +182,7 @@ def get_vendor_subscription(
def update_vendor_subscription(
update_data: VendorSubscriptionUpdate,
vendor_id: int = Path(..., description="Vendor ID"),
current_user: User = Depends(get_current_admin),
current_user: User = Depends(get_current_admin_api),
db: Session = Depends(get_db),
):
"""
@@ -219,7 +220,7 @@ def list_billing_history(
per_page: int = Query(20, ge=1, le=100),
vendor_id: int | None = Query(None, description="Filter by vendor"),
status: str | None = Query(None, description="Filter by status"),
current_user: User = Depends(get_current_admin),
current_user: User = Depends(get_current_admin_api),
db: Session = Depends(get_db),
):
"""List billing history (invoices) across all vendors."""
@@ -267,7 +268,7 @@ def list_billing_history(
@router.get("/stats", response_model=SubscriptionStatsResponse)
def get_subscription_stats(
current_user: User = Depends(get_current_admin),
current_user: User = Depends(get_current_admin_api),
db: Session = Depends(get_db),
):
"""Get subscription statistics for admin dashboard."""

View File

@@ -15,7 +15,12 @@ from math import ceil
from sqlalchemy import func
from sqlalchemy.orm import Session
from app.exceptions import NotFoundException
from app.exceptions import (
BusinessLogicException,
ConflictException,
ResourceNotFoundException,
TierNotFoundException,
)
from models.database.subscription import (
BillingHistory,
SubscriptionStatus,
@@ -54,7 +59,7 @@ class AdminSubscriptionService:
)
if not tier:
raise NotFoundException(f"Tier '{tier_code}' not found")
raise TierNotFoundException(tier_code)
return tier
@@ -67,7 +72,7 @@ class AdminSubscriptionService:
.first()
)
if existing:
raise NotFoundException(
raise ConflictException(
f"Tier with code '{tier_data['code']}' already exists"
)
@@ -107,7 +112,7 @@ class AdminSubscriptionService:
)
if active_subs > 0:
raise NotFoundException(
raise BusinessLogicException(
f"Cannot delete tier: {active_subs} active subscriptions are using it"
)
@@ -172,7 +177,7 @@ class AdminSubscriptionService:
)
if not result:
raise NotFoundException(f"Subscription for vendor {vendor_id} not found")
raise ResourceNotFoundException(f"Subscription for vendor {vendor_id} not found")
return result