88 lines
2.4 KiB
Python
88 lines
2.4 KiB
Python
from database.tnews.model import TNews
|
||
|
||
|
||
def create_news(db, news: TNews):
|
||
db.add(news)
|
||
db.commit()
|
||
db.refresh(news)
|
||
return news
|
||
|
||
|
||
# 插入数据库之前判断数据库中是否已经存在,根据news.url 判断
|
||
def create_news_if_url_not_exists(db, news: TNews):
|
||
# 检查是否已经存在具有相同 URL 的记录
|
||
existing_news = db.query(TNews).filter(TNews.url == news.url).first()
|
||
|
||
if existing_news:
|
||
# 如果记录已存在,直接返回已有的记录
|
||
return existing_news
|
||
|
||
# 如果记录不存在,插入新的记录
|
||
db.add(news)
|
||
db.commit()
|
||
db.refresh(news)
|
||
return news
|
||
|
||
|
||
def create_news_list_if_url_not_exists(db, news_list: list[TNews]):
|
||
inserted_news = [] # 用于保存实际插入的新闻记录
|
||
|
||
for news in news_list:
|
||
# 检查是否已经存在具有相同 URL 的记录
|
||
existing_news = db.query(TNews).filter(TNews.url == news.url).first()
|
||
|
||
if not existing_news:
|
||
# 如果记录不存在,插入新的记录
|
||
db.add(news)
|
||
inserted_news.append(news)
|
||
|
||
# 批量提交所有插入的记录
|
||
db.commit()
|
||
|
||
# 刷新所有新插入的记录
|
||
for news in inserted_news:
|
||
db.refresh(news)
|
||
|
||
return inserted_news
|
||
|
||
|
||
def get_news_by_id(db, news_id: int):
|
||
return db.query(TNews).filter(TNews.id == news_id).first()
|
||
|
||
def get_news_need_content(db):
|
||
return db.query(TNews).filter(TNews.content == None).all()
|
||
|
||
def get_news_need_summary(db):
|
||
return db.query(TNews).filter(TNews.ai_summary == None).all()
|
||
|
||
|
||
def get_news_for_generate_reference_message(db, news_type: str) -> list[TNews]:
|
||
return db.query(TNews).filter(
|
||
TNews.type == news_type,
|
||
TNews.ai_summary != None,
|
||
TNews.is_usage == False
|
||
).order_by(TNews.occurrence_date.desc()).all()
|
||
|
||
|
||
def update_news_by_id(db, news: TNews):
|
||
db.merge(news)
|
||
db.commit()
|
||
|
||
|
||
def update_news(db, news_id: int, updates: dict):
|
||
news = db.query(TNews).filter(TNews.id == news_id).first()
|
||
if news:
|
||
for key, value in updates.items():
|
||
setattr(news, key, value)
|
||
db.commit()
|
||
db.refresh(news)
|
||
return news
|
||
|
||
|
||
def delete_news(db, news_id: int):
|
||
news = db.query(TNews).filter(TNews.id == news_id).first()
|
||
if news:
|
||
db.delete(news)
|
||
db.commit()
|
||
return news
|