This commit is contained in:
2026-07-06 13:39:08 +08:00
parent 16b3d223c1
commit c68215c177
33 changed files with 3250 additions and 732 deletions
+2
View File
@@ -31,6 +31,7 @@ from app.api.v1.contact import router as contact_router
from app.api.v1.team import router as team_router
from app.api.v1.home_materials import router as home_materials_router
from app.api.admin import router as admin_module_router
from app.api.v1.material_admin import router as material_admin_router
api_router = APIRouter()
api_router.include_router(auth_router)
@@ -64,3 +65,4 @@ api_router.include_router(contact_router)
api_router.include_router(team_router)
api_router.include_router(home_materials_router)
api_router.include_router(admin_module_router)
api_router.include_router(material_admin_router)
+168
View File
@@ -0,0 +1,168 @@
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,
},
}