This commit is contained in:
fengchuanhn@gmail.com
2026-05-23 10:33:29 +08:00
parent c5f12421af
commit a27905a2fe
3 changed files with 16 additions and 4 deletions

View File

@@ -2,7 +2,7 @@
from fastapi import APIRouter from fastapi import APIRouter
from app.dependencies import CurrentUser, DbSession from app.dependencies import DbSession
from app.schemas.card_key import CardKeyActivateRequest, CardKeyActivateResponse from app.schemas.card_key import CardKeyActivateRequest, CardKeyActivateResponse
from app.schemas.common import ApiResponse from app.schemas.common import ApiResponse
from app.services import card_key_activate as activate_service from app.services import card_key_activate as activate_service
@@ -13,13 +13,12 @@ router = APIRouter(prefix="/card-keys", tags=["卡密"])
@router.post("/activate", response_model=ApiResponse[CardKeyActivateResponse]) @router.post("/activate", response_model=ApiResponse[CardKeyActivateResponse])
async def activate_card_key( async def activate_card_key(
body: CardKeyActivateRequest, body: CardKeyActivateRequest,
current_user: CurrentUser,
db: DbSession, db: DbSession,
) -> ApiResponse[CardKeyActivateResponse]: ) -> ApiResponse[CardKeyActivateResponse]:
try: try:
data = await activate_service.activate_card_key( data = await activate_service.activate_card_key(
db, db,
user=current_user, username=body.username,
serial_number=body.serial_number, serial_number=body.serial_number,
) )
except activate_service.CardKeyActivateError as exc: except activate_service.CardKeyActivateError as exc:

View File

@@ -7,8 +7,17 @@ CardKeyType = Literal["时长", "点数"]
class CardKeyActivateRequest(BaseModel): class CardKeyActivateRequest(BaseModel):
username: str = Field(min_length=1, max_length=64)
serial_number: str = Field(min_length=1, max_length=64) serial_number: str = Field(min_length=1, max_length=64)
@field_validator("username")
@classmethod
def normalize_username(cls, value: str) -> str:
stripped = value.strip()
if not stripped:
raise ValueError("请输入用户名")
return stripped
@field_validator("serial_number") @field_validator("serial_number")
@classmethod @classmethod
def normalize_serial(cls, value: str) -> str: def normalize_serial(cls, value: str) -> str:

View File

@@ -38,9 +38,13 @@ def _extend_vip_end_time(current: datetime | None, days: int) -> datetime:
async def activate_card_key( async def activate_card_key(
db: AsyncSession, db: AsyncSession,
*, *,
user: User, username: str,
serial_number: str, serial_number: str,
) -> CardKeyActivateResponse: ) -> CardKeyActivateResponse:
user = await db.scalar(select(User).where(User.username == username))
if user is None:
raise CardKeyActivateError("用户不存在")
result = await db.execute( result = await db.execute(
select(CardKey) select(CardKey)
.where(CardKey.serial_number == serial_number) .where(CardKey.serial_number == serial_number)