41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
|
|
from fastapi import APIRouter, Depends
|
||
|
|
from sqlalchemy import func, select
|
||
|
|
from sqlalchemy.orm import Session
|
||
|
|
|
||
|
|
from app import quota
|
||
|
|
from app.auth import current_user
|
||
|
|
from app.db import get_db
|
||
|
|
from app.models import Channel, Subscription, User, Video
|
||
|
|
from app.sync.subscriptions import import_subscriptions
|
||
|
|
|
||
|
|
router = APIRouter(prefix="/api/sync", tags=["sync"])
|
||
|
|
|
||
|
|
|
||
|
|
@router.post("/subscriptions")
|
||
|
|
def sync_subscriptions(
|
||
|
|
user: User = Depends(current_user), db: Session = Depends(get_db)
|
||
|
|
) -> dict:
|
||
|
|
before = quota.units_used_today(db)
|
||
|
|
result = import_subscriptions(db, user)
|
||
|
|
result["quota_used_estimate"] = quota.units_used_today(db) - before
|
||
|
|
result["quota_remaining_today"] = quota.remaining_today(db)
|
||
|
|
return result
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/status")
|
||
|
|
def sync_status(
|
||
|
|
user: User = Depends(current_user), db: Session = Depends(get_db)
|
||
|
|
) -> dict:
|
||
|
|
sub_count = db.scalar(
|
||
|
|
select(func.count())
|
||
|
|
.select_from(Subscription)
|
||
|
|
.where(Subscription.user_id == user.id)
|
||
|
|
)
|
||
|
|
return {
|
||
|
|
"subscriptions": sub_count,
|
||
|
|
"channels_total": db.scalar(select(func.count()).select_from(Channel)),
|
||
|
|
"videos_total": db.scalar(select(func.count()).select_from(Video)),
|
||
|
|
"quota_used_today": quota.units_used_today(db),
|
||
|
|
"quota_remaining_today": quota.remaining_today(db),
|
||
|
|
}
|