11
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user