You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
27 lines
1.0 KiB
Python
27 lines
1.0 KiB
Python
|
1 day ago
|
from fastapi import APIRouter, Depends, HTTPException
|
||
|
|
from sqlmodel import Session, select
|
||
|
|
|
||
|
|
from app.core.db import get_session
|
||
|
|
from app.models import GoogleAccount, AuditLog
|
||
|
|
from app.google.client import get_service
|
||
|
|
|
||
|
|
router = APIRouter()
|
||
|
|
|
||
|
|
def get_account(session: Session, email: str) -> GoogleAccount:
|
||
|
|
acc = session.exec(select(GoogleAccount).where(GoogleAccount.email == email)).first()
|
||
|
|
if not acc:
|
||
|
|
raise HTTPException(status_code=404, detail="Cuenta no autorizada. Primero usa /auth/google/start.")
|
||
|
|
return acc
|
||
|
|
|
||
|
|
@router.get("/courses")
|
||
|
|
def list_courses(account_email: str, session: Session = Depends(get_session)):
|
||
|
|
acc = get_account(session, account_email)
|
||
|
|
classroom = get_service("classroom", "v1", acc.token_json)
|
||
|
|
try:
|
||
|
|
res = classroom.courses().list(pageSize=20).execute()
|
||
|
|
session.add(AuditLog(account_email=account_email, action="classroom_courses", detail="ok"))
|
||
|
|
session.commit()
|
||
|
|
return res
|
||
|
|
except Exception as e:
|
||
|
|
raise HTTPException(status_code=400, detail=str(e))
|