mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
feat: add customers list on the dashboard
This commit is contained in:
parent
3988ee1d4b
commit
9f1d8c58d1
8 changed files with 361 additions and 7 deletions
|
|
@ -20,6 +20,7 @@ from src.services.payments.payments_courses import (
|
|||
from src.services.payments.payments_webhook import handle_stripe_webhook
|
||||
from src.services.payments.stripe import create_checkout_session
|
||||
from src.services.payments.payments_access import check_course_paid_access
|
||||
from src.services.payments.payments_customers import get_customers
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
|
@ -205,3 +206,15 @@ async def api_check_course_paid_access(
|
|||
db_session=db_session
|
||||
)
|
||||
}
|
||||
|
||||
@router.get("/{org_id}/customers")
|
||||
async def api_get_customers(
|
||||
request: Request,
|
||||
org_id: int,
|
||||
current_user: PublicUser = Depends(get_current_user),
|
||||
db_session: Session = Depends(get_db_session),
|
||||
):
|
||||
"""
|
||||
Get list of customers and their subscriptions for an organization
|
||||
"""
|
||||
return await get_customers(request, org_id, current_user, db_session)
|
||||
|
|
|
|||
51
apps/api/src/services/payments/payments_customers.py
Normal file
51
apps/api/src/services/payments/payments_customers.py
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
from fastapi import HTTPException, Request
|
||||
from sqlmodel import Session, select
|
||||
from src.db.organizations import Organization
|
||||
from src.db.users import PublicUser, AnonymousUser, User
|
||||
from src.db.payments.payments_users import PaymentsUser
|
||||
from src.db.payments.payments_products import PaymentsProduct
|
||||
from src.services.orgs.orgs import rbac_check
|
||||
from src.services.payments.payments_products import get_payments_product
|
||||
from src.services.users.users import read_user_by_id
|
||||
|
||||
async def get_customers(
|
||||
request: Request,
|
||||
org_id: int,
|
||||
current_user: PublicUser | AnonymousUser,
|
||||
db_session: Session,
|
||||
):
|
||||
# Check if organization exists
|
||||
statement = select(Organization).where(Organization.id == org_id)
|
||||
org = db_session.exec(statement).first()
|
||||
if not org:
|
||||
raise HTTPException(status_code=404, detail="Organization not found")
|
||||
|
||||
# RBAC check
|
||||
await rbac_check(request, org.org_uuid, current_user, "read", db_session)
|
||||
|
||||
# Get all payment users for the organization
|
||||
statement = select(PaymentsUser).where(PaymentsUser.org_id == org_id)
|
||||
payment_users = db_session.exec(statement).all()
|
||||
|
||||
customers_data = []
|
||||
|
||||
for payment_user in payment_users:
|
||||
# Get user data
|
||||
user = await read_user_by_id(request, db_session, current_user, payment_user.user_id)
|
||||
|
||||
# Get product data
|
||||
if org.id is None:
|
||||
raise HTTPException(status_code=400, detail="Invalid organization ID")
|
||||
product = await get_payments_product(request, org.id, payment_user.payment_product_id, current_user, db_session)
|
||||
|
||||
customer_data = {
|
||||
'payment_user_id': payment_user.id,
|
||||
'user': user if user else None,
|
||||
'product': product if product else None,
|
||||
'status': payment_user.status,
|
||||
'creation_date': payment_user.creation_date,
|
||||
'update_date': payment_user.update_date
|
||||
}
|
||||
customers_data.append(customer_data)
|
||||
|
||||
return customers_data
|
||||
Loading…
Add table
Add a link
Reference in a new issue