feat: track designer downloads and notifications
This commit is contained in:
46
backend/app/services/download_tracker.py
Normal file
46
backend/app/services/download_tracker.py
Normal file
@@ -0,0 +1,46 @@
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.models.download import DownloadRecord
|
||||
from app.models.order import Order
|
||||
from app.models.user import User
|
||||
from app.models.work import Work
|
||||
from app.services.wecom_bot import send_wecom_text
|
||||
|
||||
|
||||
def _build_download_notice(work: Work, buyer: User, order: Order) -> str:
|
||||
return "\n".join(
|
||||
[
|
||||
"【图绘下载通知】",
|
||||
f"作品ID:{work.id}",
|
||||
f"作品标题:{work.title}",
|
||||
f"设计师:{work.designer or '-'}",
|
||||
f"购买用户:{buyer.nickname or buyer.phone or buyer.id}",
|
||||
f"金额:{order.amount}元",
|
||||
f"下载时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}",
|
||||
f"作品链接:https://tuhui.cloud/detail/{work.id}",
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
def record_download(db: Session, order: Order, work: Work, buyer: User) -> DownloadRecord:
|
||||
existing = db.query(DownloadRecord).filter(DownloadRecord.order_id == order.id).first()
|
||||
if existing:
|
||||
return existing
|
||||
|
||||
record = DownloadRecord(
|
||||
user_id=buyer.id,
|
||||
work_id=work.id,
|
||||
order_id=order.id,
|
||||
designer_name=work.designer or "",
|
||||
work_title=work.title or "",
|
||||
amount=float(order.amount or 0.0),
|
||||
)
|
||||
db.add(record)
|
||||
work.downloads = int(work.downloads or 0) + 1
|
||||
return record
|
||||
|
||||
|
||||
def notify_download(work: Work, buyer: User, order: Order):
|
||||
send_wecom_text(_build_download_notice(work, buyer, order))
|
||||
Reference in New Issue
Block a user