fix(card): 非会员限制存卡数 非会员限制存卡数量,默认18张

This commit is contained in:
xingc
2025-05-06 21:11:40 +08:00
parent 4a111fcbdd
commit 2b6b53b13d
4 changed files with 46 additions and 18 deletions

View File

@@ -1,5 +1,5 @@
# 应用配置
ALLOWED_ORIGINS = http://127.0.0.1:3000,http://localhost:3000
ALLOWED_ORIGINS=http://127.0.0.1:8001,http://localhost:8001
# 身份认证
ACCESS_SECRET_KEY=a2f718e8313bf8efcb45ef7364d040c45800f34d10f65776eef0f6584677ecd0
@@ -28,3 +28,5 @@ APP_SECRET = 8e57b1b5344d1dbd058cd45f3b2c4d3c
PAY_MCH_ID=
PAY_API_KEY=
PAY_NOTIFY_URL=
USER_MAX_CREATED_CARD_NUM=18

View File

@@ -66,6 +66,9 @@ class Settings(BaseSettings):
PAY_API_KEY: str = ''
PAY_NOTIFY_URL: str = ''
# 会员配置
USER_MAX_CREATED_CARD_NUM: int = 18
model_config = SettingsConfigDict(env_file=f'.env.{ENVIRONMENT}', env_file_encoding='utf-8')

View File

@@ -24,6 +24,7 @@ from core.utils.helper import generate_keyname, check_picture_for_empty
from . import schema
from .scraper import card_scraper
from .services import check_user_card_created_permission
logger = logging.getLogger(__name__)
card_router = APIRouter(prefix='/card', tags=['卡册模块'])
@@ -190,6 +191,14 @@ async def created_card(
db_session: AsyncSession = Depends(get_async_session)
):
card_crud = CRUD(db_session, Card)
# 确认用户存卡权限
if await check_user_card_created_permission(
db_session, login_user=login_user
) is False:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST, detail=f'非会员仅支持存入{settings.USER_MAX_CREATED_CARD_NUM}张卡片'
)
# 卡片库查询
card: Card = await card_crud.get(filters={'cert_number': payload.cert_number})
if payload.source.value != 'other':

View File

@@ -7,7 +7,11 @@
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from core.db.models import SearchCardCache
from core.db.crud import CRUD
from core.db.models import SearchCardCache, User, UserCollection
from core.routers.auth.schema import LoginUser
from config import settings
async def get_cache_card_by_number(db_session: AsyncSession, *, cert_number: str) -> SearchCardCache | None:
@@ -16,3 +20,13 @@ async def get_cache_card_by_number(db_session: AsyncSession, *, cert_number: str
card: SearchCardCache | None = result.scalar_one_or_none()
return card
async def check_user_card_created_permission(db_session: AsyncSession, *, login_user: LoginUser) -> bool:
db_crud = CRUD(db_session, User)
user = await db_crud.get(filters={'user_id': login_user.user_id})
if user.is_vip():
return True
total = await db_crud.total(model=UserCollection, filters={'user_id': login_user.user_id})
return settings.USER_MAX_CREATED_CARD_NUM > total