fix promo #2
This commit is contained in:
@ -42,72 +42,43 @@ async def admin_create_promo(
|
|||||||
clientToken: str = Form(...),
|
clientToken: str = Form(...),
|
||||||
code: str = Form(...),
|
code: str = Form(...),
|
||||||
reward_coins: int = Form(...),
|
reward_coins: int = Form(...),
|
||||||
max_uses: str | None = Form(
|
max_uses: int | None = Form(None),
|
||||||
default=None,
|
|
||||||
description="Сколько всего раз можно активировать промокод. Пусто = бесконечно. 1 = одноразовый."
|
|
||||||
),
|
|
||||||
is_active: bool = Form(True),
|
is_active: bool = Form(True),
|
||||||
):
|
):
|
||||||
await validate_admin(accessToken, clientToken)
|
await validate_admin(accessToken, clientToken)
|
||||||
|
|
||||||
# normalize max_uses
|
if max_uses is not None and max_uses <= 0:
|
||||||
if max_uses is None or max_uses.strip() == "":
|
max_uses = None
|
||||||
max_uses_int = None
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
max_uses_int = int(max_uses)
|
|
||||||
except ValueError:
|
|
||||||
raise HTTPException(status_code=400, detail="max_uses must be an integer")
|
|
||||||
if max_uses_int <= 0:
|
|
||||||
# 0 или отрицательные считаем как "бесконечно"
|
|
||||||
max_uses_int = None
|
|
||||||
|
|
||||||
payload = PromoCreate(
|
payload = PromoCreate(
|
||||||
code=code,
|
code=code,
|
||||||
reward_coins=reward_coins,
|
reward_coins=reward_coins,
|
||||||
max_uses=max_uses_int,
|
max_uses=max_uses,
|
||||||
is_active=is_active,
|
is_active=is_active,
|
||||||
)
|
)
|
||||||
return await promo_service.create(payload)
|
return await promo_service.create(payload)
|
||||||
|
|
||||||
|
|
||||||
@router.put("/admin/promo/{promo_id}", response_model=dict)
|
@router.put("/admin/promo/{promo_id}", response_model=dict)
|
||||||
async def admin_update_promo(
|
async def admin_update_promo(
|
||||||
promo_id: str,
|
promo_id: str,
|
||||||
accessToken: str = Form(...),
|
accessToken: str = Form(...),
|
||||||
clientToken: str = Form(...),
|
clientToken: str = Form(...),
|
||||||
reward_coins: int | None = Form(None),
|
reward_coins: int | None = Form(None),
|
||||||
max_uses: str | None = Form(
|
max_uses: int | None = Form(None),
|
||||||
default=None,
|
|
||||||
description="Пусто = не менять. '0' = бесконечно. '1' = одноразовый."
|
|
||||||
),
|
|
||||||
is_active: bool | None = Form(None),
|
is_active: bool | None = Form(None),
|
||||||
):
|
):
|
||||||
await validate_admin(accessToken, clientToken)
|
await validate_admin(accessToken, clientToken)
|
||||||
|
|
||||||
max_uses_int = None
|
if max_uses is not None and max_uses <= 0:
|
||||||
max_uses_provided = max_uses is not None # отличаем “не прислали” от “прислали пусто/0”
|
max_uses = None
|
||||||
|
|
||||||
if max_uses_provided:
|
payload = PromoUpdate(
|
||||||
if max_uses.strip() == "":
|
reward_coins=reward_coins,
|
||||||
# пусто -> бесконечно
|
max_uses=max_uses,
|
||||||
max_uses_int = None
|
is_active=is_active
|
||||||
else:
|
)
|
||||||
try:
|
|
||||||
max_uses_int = int(max_uses)
|
|
||||||
except ValueError:
|
|
||||||
raise HTTPException(status_code=400, detail="max_uses must be an integer")
|
|
||||||
if max_uses_int <= 0:
|
|
||||||
max_uses_int = None
|
|
||||||
|
|
||||||
data = {"reward_coins": reward_coins, "is_active": is_active}
|
|
||||||
if max_uses_provided:
|
|
||||||
data["max_uses"] = max_uses_int
|
|
||||||
|
|
||||||
payload = PromoUpdate(**{k: v for k, v in data.items() if v is not None or k == "max_uses" and max_uses_provided})
|
|
||||||
return await promo_service.update(promo_id, payload)
|
return await promo_service.update(promo_id, payload)
|
||||||
|
|
||||||
|
|
||||||
@router.delete("/admin/promo/{promo_id}")
|
@router.delete("/admin/promo/{promo_id}")
|
||||||
async def admin_delete_promo(
|
async def admin_delete_promo(
|
||||||
promo_id: str,
|
promo_id: str,
|
||||||
|
|||||||
Reference in New Issue
Block a user