第一次提交
This commit is contained in:
74
app/services/product_service.py
Normal file
74
app/services/product_service.py
Normal file
@@ -0,0 +1,74 @@
|
||||
"""
|
||||
Product业务逻辑服务层
|
||||
"""
|
||||
from typing import Optional, Tuple, List
|
||||
from flask import current_app
|
||||
from sqlalchemy import func, or_
|
||||
from app import db
|
||||
from app.models import Product, Version
|
||||
from app.utils.logger import log_operation
|
||||
|
||||
|
||||
class ProductService:
|
||||
"""产品业务逻辑服务"""
|
||||
|
||||
@staticmethod
|
||||
def get_products(
|
||||
page: int = 1,
|
||||
per_page: int = 20,
|
||||
keyword: str = '',
|
||||
product_type: Optional[str] = None,
|
||||
is_paid: Optional[int] = None
|
||||
) -> Tuple[List[Product], int]:
|
||||
"""
|
||||
获取产品列表
|
||||
:param page: 页码
|
||||
:param per_page: 每页数量
|
||||
:param keyword: 关键词
|
||||
:param product_type: 产品类型
|
||||
:param is_paid: 是否付费
|
||||
:return: (产品列表, 总数)
|
||||
"""
|
||||
query = Product.query.filter_by(status=1) # 只显示启用的产品
|
||||
|
||||
# 关键词搜索
|
||||
if keyword:
|
||||
escaped_keyword = keyword.replace('%', '\\%').replace('_', '\\_')
|
||||
pattern = f'%{escaped_keyword}%'
|
||||
query = query.filter(
|
||||
or_(
|
||||
Product.product_name.like(pattern, escape='\\'),
|
||||
Product.description.like(pattern, escape='\\')
|
||||
)
|
||||
)
|
||||
|
||||
# 筛选条件
|
||||
if product_type:
|
||||
query = query.filter(Product.product_type == product_type)
|
||||
|
||||
query = query.order_by(Product.create_time.desc())
|
||||
|
||||
# 分页
|
||||
pagination = query.paginate(page=page, per_page=per_page, error_out=False)
|
||||
return pagination.items, pagination.total
|
||||
|
||||
@staticmethod
|
||||
def get_product(product_id: str) -> Optional[Product]:
|
||||
"""
|
||||
获取产品详情
|
||||
:param product_id: 产品ID
|
||||
:return: 产品对象
|
||||
"""
|
||||
return Product.query.filter_by(product_id=product_id, status=1).first()
|
||||
|
||||
@staticmethod
|
||||
def get_latest_version(product_id: str) -> Optional[Version]:
|
||||
"""
|
||||
获取产品最新版本
|
||||
:param product_id: 产品ID
|
||||
:return: 版本对象
|
||||
"""
|
||||
return Version.query.filter_by(
|
||||
product_id=product_id,
|
||||
publish_status=1
|
||||
).order_by(Version.update_time.desc(), Version.create_time.desc()).first()
|
||||
Reference in New Issue
Block a user