|
|
|
|
|
""" |
|
@File : products.py |
|
@Time : 2024/08/30 |
|
@Project : https://github.com/PeterH0323/Streamer-Sales |
|
@Author : HinGwenWong |
|
@Version : 1.0 |
|
@Desc : 商品信息接口 |
|
""" |
|
|
|
from pathlib import Path |
|
|
|
from fastapi import APIRouter, Depends |
|
|
|
from ...web_configs import WEB_CONFIGS |
|
from ..database.product_db import ( |
|
create_or_update_db_product_by_id, |
|
delete_product_id, |
|
get_db_product_info, |
|
) |
|
from ..models.product_model import ProductInfo, ProductPageItem, ProductQueryItem |
|
from ..modules.rag.rag_worker import rebuild_rag_db |
|
from ..utils import ResultCode, make_return_data |
|
from .users import get_current_user_info |
|
|
|
router = APIRouter( |
|
prefix="/products", |
|
tags=["products"], |
|
responses={404: {"description": "Not found"}}, |
|
) |
|
|
|
|
|
@router.get("/list", summary="获取分页商品信息接口") |
|
async def get_product_info_api( |
|
currentPage: int = 1, pageSize: int = 5, productName: str | None = None, user_id: int = Depends(get_current_user_info) |
|
): |
|
product_list, db_product_size = await get_db_product_info( |
|
user_id=user_id, |
|
current_page=currentPage, |
|
page_size=pageSize, |
|
product_name=productName, |
|
) |
|
|
|
res_data = ProductPageItem(product_list=product_list, currentPage=currentPage, pageSize=pageSize, totalSize=db_product_size) |
|
return make_return_data(True, ResultCode.SUCCESS, "成功", res_data) |
|
|
|
|
|
@router.get("/info/{productId}", summary="获取特定商品 ID 的详细信息接口") |
|
async def get_product_id_info_api(productId: int, user_id: int = Depends(get_current_user_info)): |
|
product_list, _ = await get_db_product_info(user_id=user_id, product_id=productId) |
|
|
|
if len(product_list) == 1: |
|
product_list = product_list[0] |
|
|
|
return make_return_data(True, ResultCode.SUCCESS, "成功", product_list) |
|
|
|
|
|
@router.post("/create", summary="新增商品接口") |
|
async def upload_product_api(upload_product_item: ProductInfo, user_id: int = Depends(get_current_user_info)): |
|
|
|
upload_product_item.user_id = user_id |
|
upload_product_item.product_id = None |
|
|
|
rebuild_rag_db_flag = create_or_update_db_product_by_id(0, upload_product_item) |
|
|
|
if WEB_CONFIGS.ENABLE_RAG and rebuild_rag_db_flag: |
|
|
|
await rebuild_rag_db(user_id) |
|
|
|
return make_return_data(True, ResultCode.SUCCESS, "成功", "") |
|
|
|
|
|
@router.put("/edit/{product_id}", summary="编辑商品接口") |
|
async def upload_product_api(product_id: int, upload_product_item: ProductInfo, user_id: int = Depends(get_current_user_info)): |
|
|
|
rebuild_rag_db_flag = create_or_update_db_product_by_id(product_id, upload_product_item, user_id) |
|
|
|
if WEB_CONFIGS.ENABLE_RAG and rebuild_rag_db_flag: |
|
|
|
await rebuild_rag_db(user_id) |
|
|
|
return make_return_data(True, ResultCode.SUCCESS, "成功", "") |
|
|
|
|
|
@router.delete("/delete/{productId}", summary="删除特定商品 ID 接口") |
|
async def upload_product_api(productId: int, user_id: int = Depends(get_current_user_info)): |
|
|
|
process_success_flag = await delete_product_id(productId, user_id) |
|
|
|
if not process_success_flag: |
|
return make_return_data(False, ResultCode.FAIL, "失败", "") |
|
|
|
if WEB_CONFIGS.ENABLE_RAG: |
|
|
|
await rebuild_rag_db(user_id) |
|
|
|
return make_return_data(True, ResultCode.SUCCESS, "成功", "") |
|
|
|
|
|
@router.post("/instruction", summary="获取对应商品的说明书内容接口", dependencies=[Depends(get_current_user_info)]) |
|
async def get_product_instruction_info_api(instruction_path: ProductQueryItem): |
|
"""获取对应商品的说明书 |
|
|
|
Args: |
|
instruction_path (ProductInstructionItem): 说明书路径 |
|
|
|
""" |
|
|
|
loacl_path = Path(WEB_CONFIGS.SERVER_FILE_ROOT).joinpath( |
|
WEB_CONFIGS.PRODUCT_FILE_DIR, WEB_CONFIGS.INSTRUCTIONS_DIR, Path(instruction_path.instructionPath).name |
|
) |
|
if not loacl_path.exists(): |
|
return make_return_data(False, ResultCode.FAIL, "文件不存在", "") |
|
|
|
with open(loacl_path, "r") as f: |
|
instruction_content = f.read() |
|
|
|
return make_return_data(True, ResultCode.SUCCESS, "成功", instruction_content) |
|
|