|
|
|
|
|
""" |
|
@File : streamer_info_db.py |
|
@Time : 2024/08/30 |
|
@Project : https://github.com/PeterH0323/Streamer-Sales |
|
@Author : HinGwenWong |
|
@Version : 1.0 |
|
@Desc : 主播信息数据库操作 |
|
""" |
|
|
|
|
|
from typing import List |
|
|
|
from loguru import logger |
|
from sqlmodel import Session, and_, select |
|
|
|
from ...web_configs import API_CONFIG |
|
from ..models.streamer_info_model import StreamerInfo |
|
from .init_db import DB_ENGINE |
|
|
|
|
|
async def get_db_streamer_info(user_id: int, streamer_id: int | None = None) -> List[StreamerInfo] | None: |
|
"""查询数据库中的主播信息 |
|
|
|
Args: |
|
user_id (int): 用户 ID |
|
streamer_id (int | None, optional): 主播 ID,用户获取特定主播信息. Defaults to None. |
|
|
|
Returns: |
|
List[StreamerInfo] | StreamerInfo | None: 主播信息,如果获取全部则返回 list,如果获取单个则返回单个,如果查不到返回 None |
|
""" |
|
|
|
|
|
query_condiction = and_(StreamerInfo.user_id == user_id, StreamerInfo.delete == False) |
|
|
|
|
|
with Session(DB_ENGINE) as session: |
|
|
|
|
|
|
|
if streamer_id is not None: |
|
|
|
query_condiction = and_( |
|
StreamerInfo.user_id == user_id, StreamerInfo.delete == False, StreamerInfo.streamer_id == streamer_id |
|
) |
|
|
|
|
|
try: |
|
streamer_list = session.exec(select(StreamerInfo).where(query_condiction).order_by(StreamerInfo.streamer_id)).all() |
|
except Exception as e: |
|
streamer_list = None |
|
|
|
if streamer_list is None: |
|
logger.warning("nothing to find in db...") |
|
streamer_list = [] |
|
|
|
|
|
for streamer in streamer_list: |
|
streamer.avatar = API_CONFIG.REQUEST_FILES_URL + streamer.avatar |
|
streamer.tts_reference_audio = API_CONFIG.REQUEST_FILES_URL + streamer.tts_reference_audio |
|
streamer.poster_image = API_CONFIG.REQUEST_FILES_URL + streamer.poster_image |
|
streamer.base_mp4_path = API_CONFIG.REQUEST_FILES_URL + streamer.base_mp4_path |
|
|
|
logger.info(streamer_list) |
|
logger.info(f"len {len(streamer_list)}") |
|
|
|
return streamer_list |
|
|
|
|
|
async def delete_streamer_id(streamer_id: int, user_id: int) -> bool: |
|
"""删除特定的主播 ID |
|
|
|
Args: |
|
streamer_id (int): 主播 ID |
|
user_id (int): 用户 ID,用于防止其他用户恶意删除 |
|
|
|
Returns: |
|
bool: 是否删除成功 |
|
""" |
|
|
|
delete_success = True |
|
|
|
try: |
|
|
|
with Session(DB_ENGINE) as session: |
|
|
|
streamer_info = session.exec( |
|
select(StreamerInfo).where(and_(StreamerInfo.streamer_id == streamer_id, StreamerInfo.user_id == user_id)) |
|
).one() |
|
|
|
if streamer_info is None: |
|
logger.error("Delete by other ID !!!") |
|
return False |
|
|
|
streamer_info.delete = True |
|
session.add(streamer_info) |
|
session.commit() |
|
except Exception: |
|
delete_success = False |
|
|
|
return delete_success |
|
|
|
|
|
def create_or_update_db_streamer_by_id(streamer_id: int, new_info: StreamerInfo, user_id: int) -> int: |
|
"""新增 or 编辑主播信息 |
|
|
|
Args: |
|
product_id (int): 商品 ID |
|
new_info (ProductInfo): 新的信息 |
|
user_id (int): 用户 ID,用于防止其他用户恶意修改 |
|
|
|
Returns: |
|
int: 主播 ID |
|
""" |
|
|
|
|
|
new_info.avatar = new_info.avatar.replace(API_CONFIG.REQUEST_FILES_URL, "") |
|
new_info.tts_reference_audio = new_info.tts_reference_audio.replace(API_CONFIG.REQUEST_FILES_URL, "") |
|
new_info.poster_image = new_info.poster_image.replace(API_CONFIG.REQUEST_FILES_URL, "") |
|
new_info.base_mp4_path = new_info.base_mp4_path.replace(API_CONFIG.REQUEST_FILES_URL, "") |
|
|
|
with Session(DB_ENGINE) as session: |
|
|
|
if streamer_id > 0: |
|
|
|
streamer_info = session.exec( |
|
select(StreamerInfo).where(and_(StreamerInfo.streamer_id == streamer_id, StreamerInfo.user_id == user_id)) |
|
).one() |
|
|
|
if streamer_info is None: |
|
logger.error("Edit by other ID !!!") |
|
return -1 |
|
else: |
|
|
|
streamer_info = StreamerInfo(user_id=user_id) |
|
|
|
|
|
streamer_info.name = new_info.name |
|
streamer_info.character = new_info.character |
|
streamer_info.avatar = new_info.avatar |
|
streamer_info.tts_weight_tag = new_info.tts_weight_tag |
|
streamer_info.tts_reference_sentence = new_info.tts_reference_sentence |
|
streamer_info.tts_reference_audio = new_info.tts_reference_audio |
|
streamer_info.poster_image = new_info.poster_image |
|
streamer_info.base_mp4_path = new_info.base_mp4_path |
|
|
|
session.add(streamer_info) |
|
session.commit() |
|
session.refresh(streamer_info) |
|
|
|
return int(streamer_info.streamer_id) |
|
|