执行 Ruff 安全自动修复
This commit is contained in:
@@ -10,7 +10,8 @@ from sqlalchemy.orm import Session
|
||||
|
||||
from ..database import get_db
|
||||
from ..deps import get_current_user
|
||||
from ..models import ProxyConfig as ProxyConfigModel, User
|
||||
from ..models import ProxyConfig as ProxyConfigModel
|
||||
from ..models import User
|
||||
from ..permissions import user_has_permission
|
||||
from ..schemas import AccountCheckBatchOut, AccountCheckBatchRequest
|
||||
from ..services.account_check_service import (
|
||||
@@ -18,7 +19,6 @@ from ..services.account_check_service import (
|
||||
parse_account_check_lines,
|
||||
)
|
||||
|
||||
|
||||
router = APIRouter(prefix="/api/account-check", tags=["账号检测"])
|
||||
|
||||
|
||||
|
||||
@@ -5,25 +5,25 @@ from sqlalchemy import func, or_, select
|
||||
from sqlalchemy.orm import Session, defer, joinedload
|
||||
|
||||
from ..database import get_db
|
||||
from ..deps import get_current_user, require_permission
|
||||
from ..models import (
|
||||
User,
|
||||
Account,
|
||||
AuditLog,
|
||||
LoginTask,
|
||||
DouyuTask,
|
||||
DouyuWorkbenchAccount,
|
||||
LoginTask,
|
||||
User,
|
||||
)
|
||||
from ..permissions import user_has_permission
|
||||
from ..schemas import (
|
||||
AccountAssign,
|
||||
AccountBulkSelection,
|
||||
AccountBulkTag,
|
||||
AccountImport,
|
||||
AccountAssign,
|
||||
AccountTag,
|
||||
AccountOut,
|
||||
AccountTag,
|
||||
BatchAssign,
|
||||
)
|
||||
from ..deps import get_current_user, require_permission
|
||||
from ..permissions import user_has_permission
|
||||
from ..services.account_service import (
|
||||
cookie_account_ids_query,
|
||||
parse_and_build_accounts,
|
||||
|
||||
@@ -12,7 +12,6 @@ from ..database import get_db
|
||||
from ..deps import get_current_user
|
||||
from ..models import Account, AuditLog, DouyuTask, User
|
||||
|
||||
|
||||
router = APIRouter(prefix="/api/audit-logs", tags=["审计日志"])
|
||||
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
"""认证路由"""
|
||||
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Response
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from ..database import get_db
|
||||
from ..models import User, AuditLog
|
||||
from ..security import verify_password, create_access_token, ACCESS_TOKEN_EXPIRE_HOURS
|
||||
from ..permissions import get_user_permissions, ROLE_LABELS
|
||||
from ..schemas import LoginRequest, TokenResponse
|
||||
from ..deps import get_current_user
|
||||
from ..models import AuditLog, User
|
||||
from ..permissions import ROLE_LABELS, get_user_permissions
|
||||
from ..schemas import LoginRequest, TokenResponse
|
||||
from ..security import ACCESS_TOKEN_EXPIRE_HOURS, create_access_token, verify_password
|
||||
|
||||
router = APIRouter(prefix="/api/auth", tags=["认证"])
|
||||
|
||||
|
||||
@@ -1,22 +1,24 @@
|
||||
"""Cookie 管理路由"""
|
||||
|
||||
import csv
|
||||
import io
|
||||
import threading
|
||||
from concurrent.futures import ThreadPoolExecutor, as_completed
|
||||
from datetime import datetime, timezone
|
||||
from datetime import UTC, datetime
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query
|
||||
from fastapi.responses import StreamingResponse
|
||||
from sqlalchemy import case, func, or_
|
||||
from sqlalchemy.orm import Session, defer, joinedload
|
||||
import io
|
||||
import csv
|
||||
|
||||
from ..database import get_db, SessionLocal
|
||||
from ..models import User, LoginTask, Account, AuditLog, ProxyConfig as ProxyConfigModel
|
||||
from ..database import SessionLocal, get_db
|
||||
from ..deps import get_current_user, require_permission
|
||||
from ..permissions import user_has_permission, get_user_permissions
|
||||
from ..models import Account, AuditLog, LoginTask, User
|
||||
from ..models import ProxyConfig as ProxyConfigModel
|
||||
from ..permissions import get_user_permissions, user_has_permission
|
||||
from ..schemas import CookieReloginRequest
|
||||
from ..services.login_service import BatchRegistry, LoginBatchRunner, get_relogin_limits
|
||||
from ..services.cookie_check_service import check_douyu_cookie
|
||||
from ..services.login_service import BatchRegistry, LoginBatchRunner, get_relogin_limits
|
||||
|
||||
|
||||
def _fmt_dt(dt) -> str | None:
|
||||
@@ -24,7 +26,7 @@ def _fmt_dt(dt) -> str | None:
|
||||
if dt is None:
|
||||
return None
|
||||
if dt.tzinfo is None:
|
||||
dt = dt.replace(tzinfo=timezone.utc)
|
||||
dt = dt.replace(tzinfo=UTC)
|
||||
return dt.isoformat()
|
||||
|
||||
|
||||
@@ -491,7 +493,7 @@ def _check_cookies(ids: str, db: Session, current: User, *, detailed: bool) -> d
|
||||
"fish_ball": None,
|
||||
"nickname": None,
|
||||
"level": None,
|
||||
"checked_at": datetime.now(timezone.utc).isoformat(),
|
||||
"checked_at": datetime.now(UTC).isoformat(),
|
||||
}
|
||||
)
|
||||
results.sort(key=lambda item: item["id"])
|
||||
@@ -509,7 +511,7 @@ def _check_cookies(ids: str, db: Session, current: User, *, detailed: bool) -> d
|
||||
"level": item.get("level"),
|
||||
"message": item.get("message", ""),
|
||||
}
|
||||
task.ck_checked_at = datetime.now(timezone.utc)
|
||||
task.ck_checked_at = datetime.now(UTC)
|
||||
db.add(
|
||||
AuditLog(
|
||||
user_id=current.id,
|
||||
@@ -571,7 +573,7 @@ def _start_relogin_tasks(
|
||||
if not acc.password or not acc.email:
|
||||
task.status = "relogin_failed"
|
||||
task.message = "重新登录失败: 账号缺少密码或邮箱,旧 Cookie 已保留"
|
||||
task.finished_at = datetime.now(timezone.utc)
|
||||
task.finished_at = datetime.now(UTC)
|
||||
skipped.append(task.id)
|
||||
continue
|
||||
if task.status in {"relogin_pending", "relogin_running"}:
|
||||
|
||||
@@ -17,7 +17,6 @@ from ..models import (
|
||||
)
|
||||
from ..permissions import user_has_permission
|
||||
|
||||
|
||||
router = APIRouter(prefix="/api/dashboard", tags=["首页概览"])
|
||||
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
import threading
|
||||
from datetime import datetime, timezone
|
||||
from datetime import UTC, datetime
|
||||
from typing import Any, cast
|
||||
|
||||
from fastapi import (
|
||||
@@ -18,7 +18,13 @@ from fastapi import (
|
||||
)
|
||||
from loguru import logger
|
||||
from sqlalchemy import func, or_, select
|
||||
from sqlalchemy.orm import Session, joinedload, load_only
|
||||
from sqlalchemy.orm import Session, joinedload
|
||||
|
||||
from core.douyu import (
|
||||
FishFinRechargeClient,
|
||||
FishFinRechargeConfig,
|
||||
FishFinRechargeConfigError,
|
||||
)
|
||||
|
||||
from ..database import SessionLocal, get_db
|
||||
from ..deps import authenticate_websocket, get_current_user, require_permission
|
||||
@@ -45,26 +51,19 @@ from ..schemas import (
|
||||
DouyuWorkbenchAccountsUpdate,
|
||||
DouyuXpdGoodsOut,
|
||||
)
|
||||
from ..services.douyu_runner import DouyuBatchRunner, douyu_batch_registry
|
||||
from ..services.audit_service import record_audit
|
||||
from ..services.douyu_runner import DouyuBatchRunner, douyu_batch_registry
|
||||
from ..services.douyu_service import (
|
||||
DOUYU_CONFIG_FIELDS,
|
||||
DOUYU_HANDBOOK_TASK_TYPES,
|
||||
SUPPORTED_DOUYU_TASK_TYPES,
|
||||
apply_douyu_config_defaults,
|
||||
cleanup_orphan_douyu_tasks,
|
||||
cookie_account_ids_query,
|
||||
create_douyu_planned_tasks,
|
||||
douyu_config_value,
|
||||
douyu_task_payload,
|
||||
ensure_douyu_config,
|
||||
)
|
||||
from core.douyu import (
|
||||
FishFinRechargeClient,
|
||||
FishFinRechargeConfig,
|
||||
FishFinRechargeConfigError,
|
||||
)
|
||||
|
||||
|
||||
router = APIRouter(prefix="/api/douyu", tags=["斗鱼活动"])
|
||||
|
||||
@@ -132,10 +131,10 @@ async def supplier_recharge_callback(request: Request, db: Session = Depends(get
|
||||
if status == 2:
|
||||
task.status = "success"
|
||||
task.message = "供应商直充成功(异步通知)"
|
||||
task.finished_at = datetime.now(timezone.utc)
|
||||
task.finished_at = datetime.now(UTC)
|
||||
if task.account:
|
||||
task.account.bind_status = "gold_recharged"
|
||||
task.account.updated_at = datetime.now(timezone.utc)
|
||||
task.account.updated_at = datetime.now(UTC)
|
||||
elif status in {3, 4}:
|
||||
reason = str(
|
||||
_supplier_response_value(payload, "fail_reason", "message", "msg")
|
||||
@@ -143,7 +142,7 @@ async def supplier_recharge_callback(request: Request, db: Session = Depends(get
|
||||
)
|
||||
task.status = "failed"
|
||||
task.message = reason[:512]
|
||||
task.finished_at = datetime.now(timezone.utc)
|
||||
task.finished_at = datetime.now(UTC)
|
||||
else:
|
||||
task.status = "running"
|
||||
task.message = (
|
||||
@@ -466,7 +465,7 @@ def update_workbench_accounts(
|
||||
if workbench is None:
|
||||
db.add(DouyuWorkbench(user_id=current.id, handbook_scope=req.handbook_scope))
|
||||
else:
|
||||
workbench.updated_at = datetime.now(timezone.utc)
|
||||
workbench.updated_at = datetime.now(UTC)
|
||||
db.query(DouyuWorkbenchAccount).filter(
|
||||
DouyuWorkbenchAccount.user_id == current.id,
|
||||
DouyuWorkbenchAccount.handbook_scope == req.handbook_scope,
|
||||
@@ -525,7 +524,7 @@ def update_config(
|
||||
setattr(config, field, value.strip() if isinstance(value, str) else value)
|
||||
changed_fields.append(field)
|
||||
apply_douyu_config_defaults(config)
|
||||
config.updated_at = datetime.now(timezone.utc)
|
||||
config.updated_at = datetime.now(UTC)
|
||||
recharge_fields = [field for field in changed_fields if field.startswith("gold_")]
|
||||
if recharge_fields:
|
||||
record_audit(
|
||||
@@ -853,7 +852,7 @@ async def ws_douyu_logs(websocket: WebSocket, batch_id: str):
|
||||
if msg.get("level") == "result":
|
||||
await asyncio.sleep(0.1)
|
||||
break
|
||||
except asyncio.TimeoutError:
|
||||
except TimeoutError:
|
||||
await websocket.send_json({"level": "heartbeat", "message": ""})
|
||||
except WebSocketDisconnect:
|
||||
pass
|
||||
|
||||
+23
-25
@@ -3,14 +3,11 @@
|
||||
import asyncio
|
||||
import csv
|
||||
import io
|
||||
import json
|
||||
import shutil
|
||||
import threading
|
||||
from datetime import datetime, timezone
|
||||
from datetime import UTC, datetime
|
||||
from typing import cast
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from fastapi import (
|
||||
APIRouter,
|
||||
Depends,
|
||||
@@ -37,6 +34,8 @@ from core.huya.cookie_utils import normalize_huya_cookie
|
||||
from core.huya.device_fingerprint import account_state_dir as _fp_state_dir
|
||||
from core.huya.device_profile import (
|
||||
_load_db as _load_profile_db,
|
||||
)
|
||||
from core.huya.device_profile import (
|
||||
_save_db as _save_profile_db,
|
||||
)
|
||||
from core.sms_provider import parse_sms_lines
|
||||
@@ -62,6 +61,7 @@ from ..schemas import (
|
||||
AccountTag,
|
||||
BatchAssign,
|
||||
HuyaAccountOut,
|
||||
HuyaAppPasswordLoginRequest,
|
||||
HuyaAutoRegisterBatchOut,
|
||||
HuyaAutoRegisterRequest,
|
||||
HuyaAutoRegisterRetryRequest,
|
||||
@@ -72,7 +72,6 @@ from ..schemas import (
|
||||
HuyaGoodsOut,
|
||||
HuyaPasswordAccountImport,
|
||||
HuyaPasswordLoginRequest,
|
||||
HuyaAppPasswordLoginRequest,
|
||||
HuyaPasswordLoginSelectedRequest,
|
||||
HuyaRechargeGoodsOut,
|
||||
HuyaRegisterSuccessLogOut,
|
||||
@@ -81,6 +80,13 @@ from ..schemas import (
|
||||
HuyaTaskBatchRequest,
|
||||
HuyaTaskOut,
|
||||
)
|
||||
from ..services.audit_service import record_audit
|
||||
from ..services.huya_register_runner import (
|
||||
export_success_logs_text,
|
||||
huya_register_registry,
|
||||
list_success_logs,
|
||||
)
|
||||
from ..services.huya_runner import HuyaBatchRunner, huya_batch_registry
|
||||
from ..services.huya_service import (
|
||||
HUYA_CONFIG_FIELDS,
|
||||
SUPPORTED_TASK_TYPES,
|
||||
@@ -94,14 +100,6 @@ from ..services.huya_service import (
|
||||
save_huya_login_cookie_to_account,
|
||||
upsert_huya_cookie,
|
||||
)
|
||||
from ..services.huya_runner import HuyaBatchRunner, huya_batch_registry
|
||||
from ..services.audit_service import record_audit
|
||||
from ..services.huya_register_runner import (
|
||||
export_success_logs_text,
|
||||
huya_register_registry,
|
||||
list_success_logs,
|
||||
)
|
||||
|
||||
|
||||
router = APIRouter(prefix="/api/huya", tags=["虎牙"])
|
||||
|
||||
@@ -760,7 +758,7 @@ def sms_login_account(
|
||||
phone = (req.phone or "").strip()
|
||||
if phone:
|
||||
account.game_phone = phone
|
||||
account.updated_at = datetime.now(timezone.utc)
|
||||
account.updated_at = datetime.now(UTC)
|
||||
db.commit()
|
||||
db.refresh(account)
|
||||
except ValueError as exc:
|
||||
@@ -1011,7 +1009,7 @@ def password_login_selected_accounts(
|
||||
)
|
||||
if not result.success or not result.cookie:
|
||||
account.status = "login_failed"
|
||||
account.updated_at = datetime.now(timezone.utc)
|
||||
account.updated_at = datetime.now(UTC)
|
||||
db.commit()
|
||||
failed_count += 1
|
||||
results.append(
|
||||
@@ -1051,7 +1049,7 @@ def password_login_selected_accounts(
|
||||
)
|
||||
except HuyaCredentialError as exc:
|
||||
account.status = "login_failed"
|
||||
account.updated_at = datetime.now(timezone.utc)
|
||||
account.updated_at = datetime.now(UTC)
|
||||
db.commit()
|
||||
failed_count += 1
|
||||
results.append(
|
||||
@@ -1065,7 +1063,7 @@ def password_login_selected_accounts(
|
||||
)
|
||||
except (HuyaLoginError, ValueError) as exc:
|
||||
account.status = "login_failed"
|
||||
account.updated_at = datetime.now(timezone.utc)
|
||||
account.updated_at = datetime.now(UTC)
|
||||
db.commit()
|
||||
failed_count += 1
|
||||
results.append(
|
||||
@@ -1079,7 +1077,7 @@ def password_login_selected_accounts(
|
||||
)
|
||||
except Exception as exc:
|
||||
account.status = "login_failed"
|
||||
account.updated_at = datetime.now(timezone.utc)
|
||||
account.updated_at = datetime.now(UTC)
|
||||
db.commit()
|
||||
failed_count += 1
|
||||
results.append(
|
||||
@@ -1163,7 +1161,7 @@ def app_password_login_selected_accounts(
|
||||
)
|
||||
if not result.success or not result.cookie:
|
||||
account.status = "login_failed"
|
||||
account.updated_at = datetime.now(timezone.utc)
|
||||
account.updated_at = datetime.now(UTC)
|
||||
db.commit()
|
||||
failed_count += 1
|
||||
results.append(
|
||||
@@ -1201,7 +1199,7 @@ def app_password_login_selected_accounts(
|
||||
)
|
||||
except HuyaAppQrAuthRequiredError as exc:
|
||||
account.status = "login_failed"
|
||||
account.updated_at = datetime.now(timezone.utc)
|
||||
account.updated_at = datetime.now(UTC)
|
||||
db.commit()
|
||||
failed_count += 1
|
||||
results.append(
|
||||
@@ -1215,7 +1213,7 @@ def app_password_login_selected_accounts(
|
||||
)
|
||||
except HuyaCredentialError as exc:
|
||||
account.status = "login_failed"
|
||||
account.updated_at = datetime.now(timezone.utc)
|
||||
account.updated_at = datetime.now(UTC)
|
||||
db.commit()
|
||||
failed_count += 1
|
||||
results.append(
|
||||
@@ -1229,7 +1227,7 @@ def app_password_login_selected_accounts(
|
||||
)
|
||||
except (HuyaAppLoginError, HuyaLoginError, ValueError) as exc:
|
||||
account.status = "login_failed"
|
||||
account.updated_at = datetime.now(timezone.utc)
|
||||
account.updated_at = datetime.now(UTC)
|
||||
db.commit()
|
||||
failed_count += 1
|
||||
results.append(
|
||||
@@ -1243,7 +1241,7 @@ def app_password_login_selected_accounts(
|
||||
)
|
||||
except Exception as exc:
|
||||
account.status = "login_failed"
|
||||
account.updated_at = datetime.now(timezone.utc)
|
||||
account.updated_at = datetime.now(UTC)
|
||||
db.commit()
|
||||
failed_count += 1
|
||||
results.append(
|
||||
@@ -1729,7 +1727,7 @@ def update_config(
|
||||
setattr(config, field, value.strip())
|
||||
changed_fields.append(field)
|
||||
apply_huya_config_defaults(config)
|
||||
config.updated_at = datetime.now(timezone.utc)
|
||||
config.updated_at = datetime.now(UTC)
|
||||
if changed_fields:
|
||||
record_audit(
|
||||
db,
|
||||
@@ -1995,7 +1993,7 @@ async def ws_huya_logs(websocket: WebSocket, batch_id: str):
|
||||
if msg.get("level") == "result":
|
||||
await asyncio.sleep(0.1)
|
||||
break
|
||||
except asyncio.TimeoutError:
|
||||
except TimeoutError:
|
||||
await websocket.send_json({"level": "heartbeat", "message": ""})
|
||||
except WebSocketDisconnect:
|
||||
pass
|
||||
|
||||
@@ -2,16 +2,17 @@
|
||||
|
||||
import asyncio
|
||||
import threading
|
||||
from datetime import datetime
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, WebSocket, WebSocketDisconnect
|
||||
from sqlalchemy import func
|
||||
from sqlalchemy.orm import Session, defer, load_only
|
||||
|
||||
from ..database import get_db, SessionLocal
|
||||
from ..models import User, Account, LoginTask, ProxyConfig as ProxyConfigModel
|
||||
from ..database import SessionLocal, get_db
|
||||
from ..deps import authenticate_websocket, get_current_user, require_permission
|
||||
from ..models import Account, LoginTask, User
|
||||
from ..models import ProxyConfig as ProxyConfigModel
|
||||
from ..permissions import get_user_permissions, user_has_permission
|
||||
from ..schemas import LoginBatchRequest, LoginTaskOut
|
||||
from ..deps import get_current_user, require_permission, authenticate_websocket
|
||||
from ..permissions import user_has_permission, get_user_permissions
|
||||
from ..services.login_service import LoginBatchRunner, batch_registry
|
||||
|
||||
router = APIRouter(prefix="/api/login", tags=["登录任务"])
|
||||
@@ -259,7 +260,7 @@ async def ws_login_logs(websocket: WebSocket, batch_id: str):
|
||||
if msg.get("level") == "result":
|
||||
await asyncio.sleep(0.1)
|
||||
break
|
||||
except asyncio.TimeoutError:
|
||||
except TimeoutError:
|
||||
await websocket.send_json({"level": "heartbeat", "message": ""})
|
||||
except WebSocketDisconnect:
|
||||
pass
|
||||
|
||||
@@ -2,20 +2,22 @@
|
||||
|
||||
import asyncio
|
||||
import threading
|
||||
|
||||
from fastapi import APIRouter, Depends, WebSocket, WebSocketDisconnect
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from ..database import get_db
|
||||
from ..models import User
|
||||
from ..schemas import ProxyConfigOut, ProxyConfigUpdate, PlatformInfo, PlatformFieldDef
|
||||
from ..deps import require_permission, authenticate_websocket
|
||||
from ..services.proxy_service import proxy_service
|
||||
from core.douyu.proxy_platforms import (
|
||||
get_platform_names,
|
||||
get_platform_labels,
|
||||
get_credential_fields,
|
||||
get_platform_labels,
|
||||
get_platform_names,
|
||||
)
|
||||
|
||||
from ..database import get_db
|
||||
from ..deps import authenticate_websocket, require_permission
|
||||
from ..models import User
|
||||
from ..schemas import PlatformFieldDef, PlatformInfo, ProxyConfigOut, ProxyConfigUpdate
|
||||
from ..services.proxy_service import proxy_service
|
||||
|
||||
router = APIRouter(prefix="/api/proxy", tags=["代理与白名单"])
|
||||
|
||||
|
||||
@@ -97,7 +99,7 @@ async def ws_test_logs(websocket: WebSocket, test_id: str):
|
||||
if msg.get("level") == "result":
|
||||
await asyncio.sleep(0.1)
|
||||
break
|
||||
except asyncio.TimeoutError:
|
||||
except TimeoutError:
|
||||
await websocket.send_json({"level": "heartbeat", "message": ""})
|
||||
except WebSocketDisconnect:
|
||||
pass
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
"""用户管理路由(超管)"""
|
||||
|
||||
from datetime import datetime, timezone
|
||||
from datetime import UTC, datetime
|
||||
from uuid import uuid4
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
@@ -8,11 +8,11 @@ from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from ..database import get_db
|
||||
from ..models import Account, AuditLog, HuyaAccount, User
|
||||
from ..security import hash_password
|
||||
from ..permissions import PERMISSIONS, get_user_permissions
|
||||
from ..schemas import UserCreate, UserRename, UserUpdate, UserInfo
|
||||
from ..deps import require_permission
|
||||
from ..models import Account, AuditLog, HuyaAccount, User
|
||||
from ..permissions import PERMISSIONS, get_user_permissions
|
||||
from ..schemas import UserCreate, UserInfo, UserRename, UserUpdate
|
||||
from ..security import hash_password
|
||||
|
||||
router = APIRouter(prefix="/api/users", tags=["用户管理"])
|
||||
|
||||
@@ -221,7 +221,7 @@ def delete_user(
|
||||
)
|
||||
)
|
||||
user.is_active = False
|
||||
user.deleted_at = datetime.now(timezone.utc)
|
||||
user.deleted_at = datetime.now(UTC)
|
||||
user.deleted_username = deleted_username
|
||||
# 释放用户名供新用户使用,同时不改变历史任务通过 user.id 保存的归属。
|
||||
user.username = f"deleted-{user.id}-{uuid4().hex[:12]}"
|
||||
|
||||
@@ -12,10 +12,9 @@ from ..deps import get_current_user, require_permission
|
||||
from ..models import User, YybRechargeTask
|
||||
from ..permissions import user_has_permission
|
||||
from ..schemas import YybLoginRequest, YybSelectionRequest, YybTaskCreateRequest
|
||||
from ..services.audit_service import record_audit
|
||||
from ..services.yyb_service import _utcnow, public_task, sync_task
|
||||
from ..services.yyb_worker_client import YybWorkerClient, YybWorkerError
|
||||
from ..services.audit_service import record_audit
|
||||
|
||||
|
||||
router = APIRouter(prefix="/api/yyb", tags=["应用宝充值"])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user