|
@@ -53,7 +53,8 @@ from app.schemas.notification_outbox import NotificationOutboxCreate, Notificati
|
|
|
from app.schemas.resource import FileUploadOut
|
|
from app.schemas.resource import FileUploadOut
|
|
|
from app.schemas.statistics import VasStatisticsOverviewOut
|
|
from app.schemas.statistics import VasStatisticsOverviewOut
|
|
|
from app.schemas.llm import ParseUserInputsPayload, ParseUserInputsOut
|
|
from app.schemas.llm import ParseUserInputsPayload, ParseUserInputsOut
|
|
|
-from app.schemas.account import AccountResponse, AccountCreate, LockRequest
|
|
|
|
|
|
|
+from app.schemas.account import AccountOut, AccountCreate, AccountUpdate, GetNextAccountPayload
|
|
|
|
|
+from app.schemas.proxy_pool import ProxyCreate, ProxyUpdate, ProxyOut, GetNextIpPayload
|
|
|
from app.schemas.docker_remote import RemoteServerConfig, DockerStatusOut, DockerLogsRequest, DockerLogsOut, ConfigReadOut, ConfigReadRequest, ConfigUpdateRequest, LogReadRequest, LogReadOut, LogListOut, DockerContainerStatus, DockerActionRequest, ServerConfigItem, ServerListOut, RemoteActionRequest
|
|
from app.schemas.docker_remote import RemoteServerConfig, DockerStatusOut, DockerLogsRequest, DockerLogsOut, ConfigReadOut, ConfigReadRequest, ConfigUpdateRequest, LogReadRequest, LogReadOut, LogListOut, DockerContainerStatus, DockerActionRequest, ServerConfigItem, ServerListOut, RemoteActionRequest
|
|
|
from app.schemas.order_event import VasOrderEventCreate, VasOrderEventOut
|
|
from app.schemas.order_event import VasOrderEventCreate, VasOrderEventOut
|
|
|
from app.schemas.troov_session import TroovSessionCreate, TroovSessionUpdate, TroovSessionOut
|
|
from app.schemas.troov_session import TroovSessionCreate, TroovSessionUpdate, TroovSessionOut
|
|
@@ -94,6 +95,7 @@ from app.services.slot_refresh_status_service import SlotRefreshStatusService
|
|
|
from app.services.account_service import AccountService
|
|
from app.services.account_service import AccountService
|
|
|
from app.services.order_event_service import OrderEventService
|
|
from app.services.order_event_service import OrderEventService
|
|
|
from app.services.troov_session_service import TroovSessionService
|
|
from app.services.troov_session_service import TroovSessionService
|
|
|
|
|
+from app.services.proxy_service import ProxyService
|
|
|
|
|
|
|
|
# 公共路由
|
|
# 公共路由
|
|
|
public_router = APIRouter()
|
|
public_router = APIRouter()
|
|
@@ -592,8 +594,8 @@ async def emails_get_max_uid(
|
|
|
uid = await EmailsService.get_max_uid(db)
|
|
uid = await EmailsService.get_max_uid(db)
|
|
|
return success(data=uid)
|
|
return success(data=uid)
|
|
|
|
|
|
|
|
-@admin_required_router.get("/account/list_all", summary="分页查询账号", tags=["账号管理"], response_model=ApiResponse[PageResponse[AccountResponse]])
|
|
|
|
|
-async def account_next(
|
|
|
|
|
|
|
+@admin_required_router.get("/account/list_all", summary="分页查询账号", tags=["账号管理"], response_model=ApiResponse[PageResponse[AccountOut]])
|
|
|
|
|
+async def account_list(
|
|
|
page: int = Query(0, description="第几页"),
|
|
page: int = Query(0, description="第几页"),
|
|
|
size: int = Query(10, description="分页大小"),
|
|
size: int = Query(10, description="分页大小"),
|
|
|
keyword: str = Query("", description="查询条件"),
|
|
keyword: str = Query("", description="查询条件"),
|
|
@@ -602,39 +604,83 @@ async def account_next(
|
|
|
obj = await AccountService.list_all(db, page, size, keyword)
|
|
obj = await AccountService.list_all(db, page, size, keyword)
|
|
|
return success(data=obj)
|
|
return success(data=obj)
|
|
|
|
|
|
|
|
-@admin_required_router.get("/account/next", summary="获取下一个账号", tags=["账号管理"], response_model=ApiResponse[AccountResponse])
|
|
|
|
|
|
|
+@admin_required_router.post("/account/next", summary="获取下一个账号", tags=["账号管理"], response_model=ApiResponse[AccountOut])
|
|
|
async def account_next(
|
|
async def account_next(
|
|
|
- pool_name: str,
|
|
|
|
|
- lock_duration: float = 60.0,
|
|
|
|
|
|
|
+ payload: GetNextAccountPayload,
|
|
|
db: AsyncSession = Depends(get_db)
|
|
db: AsyncSession = Depends(get_db)
|
|
|
):
|
|
):
|
|
|
- account = await AccountService.get_next_account(db, pool_name, lock_duration)
|
|
|
|
|
|
|
+ account = await AccountService.get_next_account(db, payload.pool_name, payload.account_cd)
|
|
|
return success(data=account)
|
|
return success(data=account)
|
|
|
|
|
|
|
|
-@admin_required_router.post("/account/add", summary="新增一个账号", tags=["账号管理"], response_model=ApiResponse[AccountResponse])
|
|
|
|
|
|
|
+@admin_required_router.post("/account/add", summary="新增一个账号", tags=["账号管理"], response_model=ApiResponse[AccountOut])
|
|
|
async def account_add(
|
|
async def account_add(
|
|
|
payload: AccountCreate,
|
|
payload: AccountCreate,
|
|
|
db: AsyncSession = Depends(get_db)
|
|
db: AsyncSession = Depends(get_db)
|
|
|
):
|
|
):
|
|
|
account = await AccountService.add_account(db, payload)
|
|
account = await AccountService.add_account(db, payload)
|
|
|
return success(data=account)
|
|
return success(data=account)
|
|
|
-
|
|
|
|
|
-@admin_required_router.post("/account/lock", summary="锁定账号", tags=["账号管理"], response_model=ApiResponse)
|
|
|
|
|
-async def account_lock(
|
|
|
|
|
- payload: LockRequest,
|
|
|
|
|
|
|
+
|
|
|
|
|
+@admin_required_router.delete("/account/delete", summary="删除账号", tags=["账号管理"], response_model=ApiResponse)
|
|
|
|
|
+async def account_remove(
|
|
|
|
|
+ account_id: int,
|
|
|
db: AsyncSession = Depends(get_db)
|
|
db: AsyncSession = Depends(get_db)
|
|
|
):
|
|
):
|
|
|
- await AccountService.manual_lock(db, payload)
|
|
|
|
|
|
|
+ await AccountService.remove_account(db, account_id)
|
|
|
return success()
|
|
return success()
|
|
|
|
|
|
|
|
-@admin_required_router.post("/account/disable", summary="禁用账号", tags=["账号管理"], response_model=ApiResponse)
|
|
|
|
|
-async def account_disable(
|
|
|
|
|
- payload: LockRequest,
|
|
|
|
|
|
|
+@admin_required_router.put("/account/update", summary="更新账号", tags=["账号管理"], response_model=ApiResponse[ProxyOut])
|
|
|
|
|
+async def account_update(
|
|
|
|
|
+ account_id: int,
|
|
|
|
|
+ payload: AccountUpdate,
|
|
|
|
|
+ db: AsyncSession = Depends(get_db)
|
|
|
|
|
+):
|
|
|
|
|
+ account = await AccountService.update_acccount(db, account_id, payload)
|
|
|
|
|
+ return success(data=account)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+@admin_required_router.post("/proxy/create", summary="创建代理", tags=["代理管理"], response_model=ApiResponse[ProxyOut])
|
|
|
|
|
+async def proxy_create(
|
|
|
|
|
+ payload: ProxyCreate,
|
|
|
|
|
+ db: AsyncSession = Depends(get_db)
|
|
|
|
|
+):
|
|
|
|
|
+ proxy = await ProxyService.create_proxy(db, payload)
|
|
|
|
|
+ return success(data=proxy)
|
|
|
|
|
+
|
|
|
|
|
+@admin_required_router.put("/proxy/update", summary="更新代理", tags=["代理管理"], response_model=ApiResponse[ProxyOut])
|
|
|
|
|
+async def proxy_update(
|
|
|
|
|
+ proxy_id: int,
|
|
|
|
|
+ payload: ProxyUpdate,
|
|
|
|
|
+ db: AsyncSession = Depends(get_db)
|
|
|
|
|
+):
|
|
|
|
|
+ proxy = await ProxyService.update_proxy(db, proxy_id, payload)
|
|
|
|
|
+ return success(data=proxy)
|
|
|
|
|
+
|
|
|
|
|
+@admin_required_router.delete("/proxy/delete", summary="删除代理", tags=["代理管理"], response_model=ApiResponse)
|
|
|
|
|
+async def proxy_remove(
|
|
|
|
|
+ proxy_id: int,
|
|
|
db: AsyncSession = Depends(get_db)
|
|
db: AsyncSession = Depends(get_db)
|
|
|
):
|
|
):
|
|
|
- await AccountService.disable_account(db, payload)
|
|
|
|
|
|
|
+ await ProxyService.remove_proxy(db, proxy_id)
|
|
|
return success()
|
|
return success()
|
|
|
|
|
|
|
|
|
|
+@admin_required_router.get("/proxy/list_all", summary="查询代理", tags=["代理管理"], response_model=ApiResponse[PageResponse[ProxyOut]])
|
|
|
|
|
+async def proxy_list(
|
|
|
|
|
+ page: int = Query(0, description="第几页"),
|
|
|
|
|
+ size: int = Query(10, description="分页大小"),
|
|
|
|
|
+ keyword: str = Query("", description="查询条件"),
|
|
|
|
|
+ db: AsyncSession = Depends(get_db)
|
|
|
|
|
+):
|
|
|
|
|
+ obj = await ProxyService.list_all(db, page, size, keyword)
|
|
|
|
|
+ return success(data=obj)
|
|
|
|
|
+
|
|
|
|
|
+@admin_required_router.post("/proxy/next-ip", summary="获取下一个ip", tags=["代理管理"], response_model=ApiResponse[ProxyOut])
|
|
|
|
|
+async def proxy_next_ip_get(
|
|
|
|
|
+ payload: GetNextIpPayload,
|
|
|
|
|
+ db: AsyncSession = Depends(get_db)
|
|
|
|
|
+):
|
|
|
|
|
+ proxy = await ProxyService.get_next_ip(db, payload.pools, payload.proxy_cd)
|
|
|
|
|
+ return success(data=proxy)
|
|
|
|
|
+
|
|
|
@public_router.post("/resource/upload_file", summary="上传文件", tags=["文件管理"], response_model=ApiResponse[FileUploadOut])
|
|
@public_router.post("/resource/upload_file", summary="上传文件", tags=["文件管理"], response_model=ApiResponse[FileUploadOut])
|
|
|
async def resource_upload_file(file: UploadFile = File(...)):
|
|
async def resource_upload_file(file: UploadFile = File(...)):
|
|
|
result = await SeaweedFSService.upload(file)
|
|
result = await SeaweedFSService.upload(file)
|