diff --git a/core/db/models.py b/core/db/models.py index 396fcbe..a68a3f2 100644 --- a/core/db/models.py +++ b/core/db/models.py @@ -99,6 +99,9 @@ class User(BaseModel, DateModel): def __str__(self): return f'{self.user_id}' + def is_vip(self) -> bool: + return self.vip_expire_date >= datetime.now().date() + class UserFollows(BaseModel, DateModel): __tablename__ = 'system_user_followers' @@ -303,4 +306,4 @@ chat_participant = Table( Column('user_id', Integer, ForeignKey('system_users.user_id'), primary_key=True), Column('chat_id', Integer, ForeignKey('system_chats.id'), primary_key=True), comment='聊天参与者关联表' -) \ No newline at end of file +) diff --git a/core/routers/card/routes.py b/core/routers/card/routes.py index e3e58cb..bf67a85 100644 --- a/core/routers/card/routes.py +++ b/core/routers/card/routes.py @@ -17,7 +17,7 @@ from config import settings from core.base import schema as base_schema from core.db.crud import CRUD from core.db.engine import get_async_session, get_cache -from core.db.models import Card, SearchCardCache, UserCollection +from core.db.models import Card, SearchCardCache, UserCollection, User from core.routers.auth.schema import LoginUser from core.routers.auth.services import get_current_user_form_http from core.utils.helper import generate_keyname, check_picture_for_empty @@ -267,6 +267,10 @@ async def update_card_price_info( db_session: AsyncSession = Depends(get_async_session), ): db_crud = CRUD(db_session, UserCollection) + user = await db_crud.get(model=User, filters={'user_id': login_user.user_id}) + if user.is_vip() is False: + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail='会员未开通或者已过期') + result = await db_crud.update( data=payload.dict(exclude_none=True), filters={'card_id': card_id, 'user_id': login_user.user_id} diff --git a/core/routers/card/schema.py b/core/routers/card/schema.py index 398e949..e3b10df 100644 --- a/core/routers/card/schema.py +++ b/core/routers/card/schema.py @@ -62,8 +62,9 @@ class SearchCardOut(Card): pass -class CardVisitOut(Card, UpdateCard): +class CardVisitOut(Card): source: PlatformSourceType + display_price: Optional[condecimal(max_digits=10, decimal_places=2)] = None class CardOut(CardVisitOut): @@ -71,7 +72,6 @@ class CardOut(CardVisitOut): card_id: Optional[int] = None card_year: str | None purchase_price: Optional[condecimal(max_digits=10, decimal_places=2)] = None - display_price: Optional[condecimal(max_digits=10, decimal_places=2)] = None displayed: Optional[bool] = False diy_source: Optional[str] = None