77 lines
2.7 KiB
Python
77 lines
2.7 KiB
Python
from database.thotcontent.model import THotContent
|
||
from log.log_manager import logger
|
||
|
||
|
||
def create_hot_content(db, hot_content: THotContent):
|
||
db.add(hot_content)
|
||
db.commit()
|
||
db.refresh(hot_content)
|
||
return hot_content
|
||
|
||
# 插入数据库之前判断数据库中是否已经存在,根据news.url 判断
|
||
def create_content_if_url_not_exists(db, hot_content: THotContent):
|
||
# 检查是否已经存在具有相同 URL 的记录
|
||
existing_content = db.query(THotContent).filter(THotContent.url == hot_content.url).first()
|
||
|
||
if existing_content:
|
||
# 如果记录已存在,直接返回已有的记录
|
||
return existing_content
|
||
|
||
# 如果记录不存在,插入新的记录
|
||
db.add(hot_content)
|
||
db.commit()
|
||
db.refresh(hot_content)
|
||
return hot_content
|
||
|
||
|
||
def create_contents_top3_if_url_not_exists(db, contents: list[THotContent]):
|
||
logger.info(f"采集到内容数量:{len(contents)},存入数据库前三")
|
||
# 按照 THotContent.content_upvote_count 对contents进行排序
|
||
contents.sort(key=lambda x: x.content_upvote_count, reverse=True)
|
||
|
||
# 保留 contents 的前3条
|
||
contents = contents[:3]
|
||
|
||
inserted_contents = [] # 用于保存实际插入的新闻记录
|
||
|
||
for content in contents:
|
||
# 检查是否已经存在具有相同 URL 的记录
|
||
existing_content = db.query(THotContent).filter(THotContent.url == content.url).first()
|
||
|
||
if not existing_content:
|
||
# 如果记录不存在,插入新的记录
|
||
db.add(content)
|
||
inserted_contents.append(content)
|
||
|
||
# 批量提交所有插入的记录
|
||
db.commit()
|
||
|
||
# 刷新所有新插入的记录
|
||
for content in inserted_contents:
|
||
db.refresh(content)
|
||
|
||
return inserted_contents
|
||
|
||
def get_hot_content_by_id(db, hot_content_id: int):
|
||
return db.query(THotContent).filter(THotContent.id == hot_content_id).first()
|
||
|
||
def get_hot_content_by_topic_id(db, topic_id: int):
|
||
return db.query(THotContent).filter(THotContent.topic_id == topic_id).all()
|
||
|
||
def get_hot_contents(db, skip: int = 0, limit: int = 100):
|
||
return db.query(THotContent).offset(skip).limit(limit).all()
|
||
|
||
def update_hot_content(db, hot_content_id: int, updates: dict):
|
||
hot_content = db.query(THotContent).filter(THotContent.id == hot_content_id).first()
|
||
if hot_content:
|
||
for key, value in updates.items():
|
||
setattr(hot_content, key, value)
|
||
db.commit()
|
||
db.refresh(hot_content)
|
||
return hot_content
|
||
|
||
def delete_hot_content(db, hot_content_id: int):
|
||
hot_content = db.query(THotContent).filter(THotContent.id == hot_content_id).first()
|
||
if hot_content:
|
||
db.delete(hot_content)
|
||
db.commit() |