Files
video-gen/video-gen-api/app/api/v1/material_admin.py
T

168 lines
6.3 KiB
Python

from typing import Any, Optional, List
from datetime import datetime, timedelta, timezone
from fastapi import APIRouter, Query, Depends, Body
from sqlalchemy import select, func
from sqlalchemy.ext.asyncio import AsyncSession
from app.models.user import User
from app.models.resources_material import ResourcesMaterial
from app.models.material_cost import MaterialCost
from app.models.user_oauth import UserOAuth
from app.models.user_oauth_account import UserOAuthAccount
from app.models.pre_test_template import PreTestTemplate
from app.models.upload_task import UploadTask
from app.dependencies import get_current_user, get_db, get_admin_user
from app.services.material_consumption_queue import sync_all_advertisers_consumption, _fetch_and_save_consumption
from app.services.material_consumption_service import get_consumption_list, format_consumption_response
from app.services.material_admin_service import get_oauth_list, get_material_list, get_pre_test_template_list, get_upload_task_list
router = APIRouter(prefix="/material-admin", tags=["material-admin"])
@router.get("/oauth-list", summary="管理员查看所有授权列表")
async def admin_get_oauth_list(
id: Optional[str] = Query(None, description="主键id"),
phone: Optional[str] = Query(None, description="用户登录手机号"),
account_id: Optional[str] = Query(None, description="授权账户id"),
account_userid: Optional[str] = Query(None, description="授权登录账号id"),
created_at: Optional[List[datetime]] = Query(None, description="授权时间"),
appid: Optional[str] = Query(None, description="应用id"),
open_type: Optional[int] = Query(None, description="开户方式"),
page: int = Query(1, ge=1, description="页码"),
page_size: int = Query(10, ge=1, le=3000, description="每页数量"),
db: AsyncSession = Depends(get_db),
admin_user: User = Depends(get_admin_user),
) -> Any | dict:
try:
oauth_list, total = await get_oauth_list(
id=id,
db=db,
phone=phone,
account_id=account_id,
account_userid=account_userid,
created_at=created_at,
appid=appid,
open_type=open_type,
page=page,
page_size=page_size,
)
return {
"code": 0,
"data": oauth_list,
"pagination": {
"page": page,
"page_size": page_size,
"total": total,
},
}
except Exception as e:
return {
"code": 1,
"msg": str(e),
"data": None,
}
@router.get("/material-list", summary="管理员查看所有素材资源列表")
async def admin_get_material_list(
phone: Optional[str] = Query(None, description="用户登录手机号"),
id: Optional[str] = Query(None, description="主键id"),
resource_type: Optional[str] = Query(None, description="素材资源类型"),
advertiser_id: Optional[str] = Query(None, description="广告主id"),
material_id: Optional[str] = Query(None, description="素材id"),
upload_id: Optional[str] = Query(None, description="平台id【视频id/图片id】"),
created_at: Optional[List[datetime]] = Query(None, description="创建时间"),
status: Optional[str] = Query(None, description="前测状态"),
page: int = Query(1, ge=1, description="页码"),
page_size: int = Query(10, ge=1, le=3000, description="每页数量"),
db: AsyncSession = Depends(get_db),
admin_user: User = Depends(get_admin_user),
) -> Any | dict:
materials, total = await get_material_list(
db=db,
phone=phone,
id=id,
resource_type=resource_type,
advertiser_id=advertiser_id,
material_id=material_id,
upload_id=upload_id,
created_at=created_at,
status=status,
page=page,
page_size=page_size,
)
return {
"code": 0,
"data": materials,
"pagination": {
"page": page,
"page_size": page_size,
"total": total,
},
}
@router.get("/pre-test-template-list", summary="管理员查看所有前测模板列表")
async def admin_get_pre_test_template_list(
phone: Optional[str] = Query(None, description="用户登录手机号"),
id: Optional[str] = Query(None, description="主键id"),
created_at: Optional[datetime] = Query(None, description="创建时间"),
page: int = Query(1, ge=1, description="页码"),
page_size: int = Query(10, ge=1, le=3000, description="每页数量"),
db: AsyncSession = Depends(get_db),
admin_user: User = Depends(get_admin_user),
) -> Any | dict:
templates, total = await get_pre_test_template_list(
db=db,
phone=phone,
id=id,
created_at=created_at,
page=page,
page_size=page_size,
)
return {
"code": 0,
"data": templates,
"pagination": {
"page": page,
"page_size": page_size,
"total": total,
},
}
@router.get("/upload-task-list", summary="管理员查看推送任务列表")
async def admin_get_upload_task_list(
phone: Optional[str] = Query(None, description="用户登录手机号"),
id: Optional[str] = Query(None, description="主键id"),
created_at: Optional[List[str]] = Query(None, description="创建时间范围,示例: ['2023-01-01', '2023-03-01']"),
advertiser_id: Optional[str] = Query(None, description="广告主id"),
status: Optional[int] = Query(None, description="前测状态"),
resource_id: Optional[str] = Query(None, description="资源id"),
page: int = Query(1, ge=1, description="页码"),
page_size: int = Query(10, ge=1, le=3000, description="每页数量"),
db: AsyncSession = Depends(get_db),
admin_user: User = Depends(get_admin_user),
) -> Any | dict:
tasks, total = await get_upload_task_list(
db=db,
phone=phone,
id=id,
created_at=created_at,
advertiser_id=advertiser_id,
status=status,
resource_id=resource_id,
page=page,
page_size=page_size,
)
return {
"code": 0,
"data": tasks,
"pagination": {
"page": page,
"page_size": page_size,
"total": total,
},
}