upload project source code
This commit is contained in:
@@ -0,0 +1 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
@@ -0,0 +1,56 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.common.response import SuccessResponse
|
||||
from app.core.dependencies import db_getter, get_current_user
|
||||
from app.api.v1.module_system.auth.schema import AuthSchema
|
||||
from app.api.v1.module_common.activity.crud import ActivityCRUD
|
||||
|
||||
# 定义路由前缀
|
||||
ActivityRouter = APIRouter(prefix="/activity", tags=["活动记录"])
|
||||
|
||||
|
||||
@ActivityRouter.get("/display", summary="获取活动展示列表", description="获取前端展示格式的用户活动记录(无需登录)")
|
||||
async def get_activity_display(
|
||||
limit: int = 10,
|
||||
db: AsyncSession = Depends(db_getter)
|
||||
) -> SuccessResponse:
|
||||
"""
|
||||
获取活动展示列表(公开接口,无需登录)
|
||||
|
||||
返回格式: ["张** 预约了 宝宝起名 服务", "李** 完成了 个人改名 测算", ...]
|
||||
"""
|
||||
# 创建一个不需要用户信息的 auth 对象
|
||||
auth = AuthSchema(db=db, check_data_scope=False)
|
||||
crud = ActivityCRUD(auth)
|
||||
|
||||
data = await crud.get_display_list(limit=limit)
|
||||
return SuccessResponse(data=data)
|
||||
|
||||
|
||||
@ActivityRouter.post("/create", summary="创建活动记录", description="创建活动记录(需要登录)")
|
||||
async def create_activity(
|
||||
user_name: str,
|
||||
action: str,
|
||||
service_name: str,
|
||||
service_type: str = None,
|
||||
sort_order: int = 0,
|
||||
auth: AuthSchema = Depends(get_current_user)
|
||||
) -> SuccessResponse:
|
||||
"""
|
||||
创建活动记录(需要登录)
|
||||
"""
|
||||
crud = ActivityCRUD(auth)
|
||||
|
||||
data = {
|
||||
"user_name": user_name,
|
||||
"action": action,
|
||||
"service_name": service_name,
|
||||
"service_type": service_type,
|
||||
"sort_order": sort_order
|
||||
}
|
||||
|
||||
result = await crud.create(data)
|
||||
return SuccessResponse(data={"id": result.id}, msg="创建成功")
|
||||
@@ -0,0 +1,37 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from typing import List
|
||||
|
||||
from app.core.base_crud import CRUDBase
|
||||
from app.api.v1.module_common.activity.model import ActivityModel
|
||||
from app.api.v1.module_common.activity.schema import ActivityCreate, ActivityUpdate
|
||||
from app.api.v1.module_system.auth.schema import AuthSchema
|
||||
|
||||
|
||||
class ActivityCRUD(CRUDBase[ActivityModel, ActivityCreate, ActivityUpdate]):
|
||||
"""活动记录CRUD"""
|
||||
|
||||
def __init__(self, auth: AuthSchema) -> None:
|
||||
super().__init__(ActivityModel, auth)
|
||||
|
||||
async def get_display_list(self, limit: int = 10) -> List[str]:
|
||||
"""
|
||||
获取前端展示格式的活动列表
|
||||
|
||||
参数:
|
||||
- limit: 返回数量限制
|
||||
|
||||
返回:
|
||||
- List[str]: 格式化的活动文本列表
|
||||
"""
|
||||
activities = await self.list(
|
||||
search={"status": "0"},
|
||||
order_by=[{"sort_order": "asc"}, {"created_time": "desc"}]
|
||||
)
|
||||
|
||||
result = []
|
||||
for activity in activities[:limit]:
|
||||
text = f"{activity.user_name} {activity.action}了 {activity.service_name} {activity.service_type or ''}".strip()
|
||||
result.append(text)
|
||||
|
||||
return result
|
||||
@@ -0,0 +1,18 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from sqlalchemy import String, Integer
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
|
||||
from app.core.base_model import ModelMixin
|
||||
|
||||
|
||||
class ActivityModel(ModelMixin):
|
||||
"""用户活动记录表"""
|
||||
|
||||
__tablename__ = "biz_activity"
|
||||
|
||||
user_name: Mapped[str] = mapped_column(String(50), nullable=False, comment="用户名(脱敏)")
|
||||
action: Mapped[str] = mapped_column(String(50), nullable=False, comment="操作类型(预约/完成/购买/查看)")
|
||||
service_name: Mapped[str] = mapped_column(String(100), nullable=False, comment="服务名称")
|
||||
service_type: Mapped[str] = mapped_column(String(50), nullable=True, comment="服务类型")
|
||||
sort_order: Mapped[int] = mapped_column(Integer, default=0, nullable=False, comment="排序顺序")
|
||||
@@ -0,0 +1,42 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Optional
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class ActivityBase(BaseModel):
|
||||
"""活动记录基础模型"""
|
||||
user_name: str = Field(..., max_length=50, description="用户名(脱敏)")
|
||||
action: str = Field(..., max_length=50, description="操作类型")
|
||||
service_name: str = Field(..., max_length=100, description="服务名称")
|
||||
service_type: Optional[str] = Field(None, max_length=50, description="服务类型")
|
||||
sort_order: int = Field(default=0, description="排序顺序")
|
||||
|
||||
|
||||
class ActivityCreate(ActivityBase):
|
||||
"""创建活动记录"""
|
||||
pass
|
||||
|
||||
|
||||
class ActivityUpdate(BaseModel):
|
||||
"""更新活动记录"""
|
||||
user_name: Optional[str] = Field(None, max_length=50)
|
||||
action: Optional[str] = Field(None, max_length=50)
|
||||
service_name: Optional[str] = Field(None, max_length=100)
|
||||
service_type: Optional[str] = Field(None, max_length=50)
|
||||
sort_order: Optional[int] = None
|
||||
|
||||
|
||||
class ActivityOut(ActivityBase):
|
||||
"""活动记录输出模型"""
|
||||
id: int
|
||||
created_time: datetime
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
class ActivityDisplay(BaseModel):
|
||||
"""前端展示格式"""
|
||||
text: str = Field(..., description="展示文本")
|
||||
Reference in New Issue
Block a user