80 lines
2.6 KiB
Python
80 lines
2.6 KiB
Python
|
|
from DbKit.Db import Db
|
||
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
class DouYinModel:
|
||
|
|
def __init__(self, db: Db = None):
|
||
|
|
self.db = db or Db()
|
||
|
|
|
||
|
|
async def init(self):
|
||
|
|
await self.db.init_db()
|
||
|
|
|
||
|
|
async def update_status(self, id, status, error_msg=None):
|
||
|
|
await self.db.init_db()
|
||
|
|
params = {
|
||
|
|
"id": id,
|
||
|
|
"status": status,
|
||
|
|
"error_msg": error_msg
|
||
|
|
}
|
||
|
|
return await self.db.execute_update("DouYin.updateStatus", params)
|
||
|
|
|
||
|
|
async def update_record(self, id, title, obs_url, transcript, status):
|
||
|
|
await self.db.init_db()
|
||
|
|
# Truncate title to 100 chars to fit DB schema
|
||
|
|
if title and len(title) > 100:
|
||
|
|
title = title[:100] + "..."
|
||
|
|
|
||
|
|
params = {
|
||
|
|
"id": id,
|
||
|
|
"title": title,
|
||
|
|
"obs_url": obs_url,
|
||
|
|
"transcript": transcript,
|
||
|
|
"status": status
|
||
|
|
}
|
||
|
|
return await self.db.execute_update("DouYin.updateRecord", params)
|
||
|
|
|
||
|
|
async def insert_record(self, id, url, create_time=None):
|
||
|
|
await self.db.init_db()
|
||
|
|
if create_time is None:
|
||
|
|
create_time = datetime.now()
|
||
|
|
params = {
|
||
|
|
"id": id,
|
||
|
|
"url": url,
|
||
|
|
"create_time": create_time
|
||
|
|
}
|
||
|
|
return await self.db.execute_update("DouYin.insertRecord", params)
|
||
|
|
|
||
|
|
async def get_records(self, limit=50):
|
||
|
|
await self.db.init_db()
|
||
|
|
params = {"limit": limit}
|
||
|
|
records = await self.db.find("DouYin.getRecords", params)
|
||
|
|
|
||
|
|
# Manually handle datetime serialization
|
||
|
|
for r in records:
|
||
|
|
if 'create_time' in r and r['create_time']:
|
||
|
|
r['create_time'] = r['create_time'].strftime("%Y-%m-%d %H:%M:%S")
|
||
|
|
if 'update_time' in r and r['update_time']:
|
||
|
|
r['update_time'] = r['update_time'].strftime("%Y-%m-%d %H:%M:%S")
|
||
|
|
return records
|
||
|
|
|
||
|
|
async def delete_record(self, id):
|
||
|
|
await self.db.init_db()
|
||
|
|
params = {"id": id}
|
||
|
|
return await self.db.execute_update("DouYin.deleteRecord", params)
|
||
|
|
|
||
|
|
async def get_transcripts(self, ids=None, limit=20):
|
||
|
|
await self.db.init_db()
|
||
|
|
if ids:
|
||
|
|
params = {"ids": ids}
|
||
|
|
return await self.db.find("DouYin.getTranscriptsByIds", params)
|
||
|
|
else:
|
||
|
|
params = {"limit": limit}
|
||
|
|
return await self.db.find("DouYin.getLatestTranscripts", params)
|
||
|
|
|
||
|
|
async def get_interrupted_tasks(self, limit=20):
|
||
|
|
await self.db.init_db()
|
||
|
|
params = {"limit": limit}
|
||
|
|
return await self.db.find("DouYin.getInterruptedTasks", params)
|
||
|
|
|
||
|
|
async def close(self):
|
||
|
|
await self.db.shutdown()
|