|
|
from datetime import datetime
|
|
|
|
|
|
from flask import session
|
|
|
|
|
|
from main import db
|
|
|
|
|
|
class Favorite(db.Model):
|
|
|
__tablename__ = 'favorite'
|
|
|
favoriteid = db.Column(db.Integer, primary_key=True)
|
|
|
userid = db.Column(db.String(64), db.ForeignKey('user.userid'))
|
|
|
articleid = db.Column(db.String(64), db.ForeignKey('article.articleid'))
|
|
|
canceled = db.Column(db.Integer, nullable=False)
|
|
|
# canceled 默认是0,不取消收藏
|
|
|
createtime = db.Column(db.DateTime, nullable=False) # 使用 DateTime 类型,并设置默认值为当前 UTC 时间
|
|
|
updatetime = db.Column(db.DateTime, nullable=False)
|
|
|
|
|
|
|
|
|
# 插入收藏数据
|
|
|
# 每次收藏之前,先看一下之前是否收藏过,没有才插入,有的话直接更改cancled
|
|
|
@classmethod
|
|
|
def insert_favorite(cls,articleid):
|
|
|
userid = session.get('userid')
|
|
|
if Favorite.is_favorite(articleid): # 如果收藏存在
|
|
|
cls.query.filter_by(userid = userid, articleid = articleid).update({cls.canceled:0})
|
|
|
else:
|
|
|
favorite = Favorite(userid = userid,articleid = articleid,canceled = 0,createtime=datetime.utcnow(),updatetime=datetime.utcnow())
|
|
|
db.session.add(favorite)
|
|
|
try:
|
|
|
db.session.commit()
|
|
|
except Exception as e:
|
|
|
print("收藏失败,文章id:", articleid, "错误:", e)
|
|
|
return True
|
|
|
|
|
|
# 取消收藏
|
|
|
@classmethod
|
|
|
def cancel_favorite(cls,articleid):
|
|
|
# 默认是已经收藏过的文章
|
|
|
userid = session.get('userid')
|
|
|
cls.query.filter_by(userid=userid, articleid=articleid).update({cls.canceled: 1})
|
|
|
db.session.commit()
|
|
|
return True
|
|
|
|
|
|
|
|
|
# 判断是否收藏过
|
|
|
@classmethod
|
|
|
def is_favorite(cls,articleid):
|
|
|
userid = session.get('userid')
|
|
|
result = cls.query.filter_by(articleid=articleid, userid=userid).first()
|
|
|
if result is None: # 如果结果不存在
|
|
|
return False
|
|
|
else:
|
|
|
return True
|
|
|
|
|
|
# 判断是否正在收藏
|
|
|
@classmethod
|
|
|
def is_at_favorite(cls,articleid):
|
|
|
userid = session.get('userid')
|
|
|
result = cls.query.filter_by(articleid=articleid, userid=userid,canceled = 0).first()
|
|
|
if result is None: # 如果结果不存在
|
|
|
return False
|
|
|
else:
|
|
|
return True
|
|
|
|