From 7d205a6086b12b1f44ad68b7dd70f84599105103 Mon Sep 17 00:00:00 2001 From: aaron <> Date: Wed, 19 Feb 2025 17:12:07 +0800 Subject: [PATCH] remove subscribedb --- app/api/endpoints/subscribe.py | 69 --------------------------------- app/api/endpoints/user.py | 9 ----- app/core/wechat.py | 70 ---------------------------------- app/models/subscribe.py | 38 ------------------ 4 files changed, 186 deletions(-) delete mode 100644 app/api/endpoints/subscribe.py delete mode 100644 app/models/subscribe.py diff --git a/app/api/endpoints/subscribe.py b/app/api/endpoints/subscribe.py deleted file mode 100644 index a807fad..0000000 --- a/app/api/endpoints/subscribe.py +++ /dev/null @@ -1,69 +0,0 @@ -from fastapi import APIRouter, Depends -from sqlalchemy.orm import Session -from app.models.database import get_db -from app.api.deps import get_current_user -from app.models.user import UserDB -from app.core.response import success_response, error_response, ResponseModel -from app.models.subscribe import SubscribeDB, SubscribeCreate, SubscribeInfo -from sqlalchemy import and_, func - -router = APIRouter() - -@router.post("", response_model=ResponseModel) -async def subscribe_template( - subscribe: SubscribeCreate, - db: Session = Depends(get_db), - current_user: UserDB = Depends(get_current_user) -): - """订阅消息模板""" - results = [] - - try: - for template_info in subscribe.template_infos: - # 检查是否已存在订阅记录 - exists = db.query(SubscribeDB).filter( - and_( - SubscribeDB.user_id == current_user.userid, - SubscribeDB.template_id == template_info.template_id - ) - ).first() - - if exists: - # 更新动作 - exists.action = template_info.action - exists.update_time = func.now() - results.append(exists) - else: - # 创建新的订阅记录 - db_subscribe = SubscribeDB( - user_id=current_user.userid, - template_id=template_info.template_id, - action=template_info.action - ) - db.add(db_subscribe) - results.append(db_subscribe) - - db.commit() - for r in results: - db.refresh(r) - - return success_response(data=[ - SubscribeInfo.model_validate(r) for r in results - ]) - except Exception as e: - db.rollback() - return error_response(code=500, message=f"处理订阅失败: {str(e)}") - -@router.get("", response_model=ResponseModel) -async def get_subscribes( - db: Session = Depends(get_db), - current_user: UserDB = Depends(get_current_user) -): - """获取用户的订阅列表""" - subscribes = db.query(SubscribeDB).filter( - SubscribeDB.user_id == current_user.userid - ).all() - - return success_response(data=[ - SubscribeInfo.model_validate(s) for s in subscribes - ]) \ No newline at end of file diff --git a/app/api/endpoints/user.py b/app/api/endpoints/user.py index cef90a9..1464f7c 100644 --- a/app/api/endpoints/user.py +++ b/app/api/endpoints/user.py @@ -23,8 +23,6 @@ from app.models.user_auth import UserAuthDB, UserAuthCreate, UserAuthInfo from app.core.qcloud import qcloud_manager from app.models.merchant import MerchantDB from app.models.address import AddressDB, AddressInfo -from app.models.subscribe import SubscribeDB - router = APIRouter() @@ -163,13 +161,6 @@ async def get_user_info( UserCouponDB.status == CouponStatus.UNUSED ).count() user_data['coupon_count'] = coupon_count - - # 查询当前用户是否订阅的模板 - subscribe_count = db.query(SubscribeDB).filter( - SubscribeDB.user_id == current_user.userid - ).count() - - user_data['is_subscribe'] = subscribe_count > 0 return success_response(data=user_data) diff --git a/app/core/wechat.py b/app/core/wechat.py index a3f59f4..33b1c57 100644 --- a/app/core/wechat.py +++ b/app/core/wechat.py @@ -16,13 +16,11 @@ import uuid from typing import Dict, Any from sqlalchemy.orm import Session from sqlalchemy import and_ -from app.models.subscribe import SubscribeDB def generate_random_string(length=32): """生成指定长度的随机字符串""" return ''.join(random.choices(string.ascii_letters + string.digits, k=length)) - class WeChatClient: """微信客户端""" @@ -447,71 +445,3 @@ class WeChatClient: except Exception as e: print(f"申请退款异常: {str(e)}") raise Exception(f"申请退款失败: {str(e)}") - - async def send_subscribe_message( - self, - openid: str, - template_id: str, - data: Dict[str, Any], - db: Session = None, - user_id: int = None, - page: str = None - ) -> bool: - """ - 发送订阅消息 - :param openid: 用户openid - :param template_id: 模板ID - :param data: 模板数据 - :param db: 数据库会话(可选) - :param user_id: 用户ID(可选,用于检查订阅状态) - :param page: 点击模板卡片后的跳转页面(可选) - :return: 发送是否成功 - """ - try: - # 如果提供了数据库会话和用户ID,检查订阅状态 - if db and user_id: - subscribe = db.query(SubscribeDB).filter( - and_( - SubscribeDB.user_id == user_id, - SubscribeDB.template_id == template_id - ) - ).first() - - # 如果用户没有订阅或拒绝了订阅,则不发送 - if not subscribe or subscribe.action == "reject": - return False - - # 构建消息数据 - message_data = { - "touser": openid, - "template_id": template_id, - "data": { - key: { - "value": value - } for key, value in data.items() - } - } - - # 如果提供了跳转页面 - if page: - message_data["page"] = page - - # 发送订阅消息 - access_token = await self.get_access_token() - url = f"https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={access_token}" - - async with aiohttp.ClientSession() as session: - async with session.post(url, json=message_data) as response: - result = await response.json() - - if result.get("errcode") == 0: - return True - - print(f"发送订阅消息失败: {result}") - return False - - except Exception as e: - print(f"发送订阅消息异常: {str(e)}") - return False - - \ No newline at end of file diff --git a/app/models/subscribe.py b/app/models/subscribe.py deleted file mode 100644 index b2f2cbd..0000000 --- a/app/models/subscribe.py +++ /dev/null @@ -1,38 +0,0 @@ -from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Boolean -from sqlalchemy.sql import func -from pydantic import BaseModel, Field -from typing import Optional, List -from datetime import datetime -from .database import Base - -class SubscribeDB(Base): - __tablename__ = "user_subscribes" - - id = Column(Integer, primary_key=True, autoincrement=True) - user_id = Column(Integer, ForeignKey("users.userid"), nullable=False) - template_id = Column(String(64), nullable=False) # 模板ID - action = Column(String(10), nullable=False) # accept 或 reject - create_time = Column(DateTime(timezone=True), server_default=func.now()) - update_time = Column(DateTime(timezone=True), onupdate=func.now()) - - class Config: - from_attributes = True - - -class TemplateInfo(BaseModel): - template_id: str - action: str = Field(..., pattern="^(accept|reject)$") # 只允许 accept 或 reject - -class SubscribeCreate(BaseModel): - template_infos: List[TemplateInfo] = Field(..., min_items=1) # 至少一个模板ID - -class SubscribeInfo(BaseModel): - id: int - user_id: int - template_id: str - action: str - create_time: datetime - update_time: Optional[datetime] - - class Config: - from_attributes = True \ No newline at end of file