68 lines
2.0 KiB
Python
68 lines
2.0 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
小程序备注路由 —— 备注 CRUD(含星星评分)。
|
||
|
||
端点清单:
|
||
- POST /api/xcx/notes — 创建备注
|
||
- GET /api/xcx/notes — 查询备注列表(query: target_type, target_id)
|
||
- DELETE /api/xcx/notes/{id} — 删除备注
|
||
|
||
所有端点均需 JWT(approved 状态)。
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from fastapi import APIRouter, Depends, Query
|
||
|
||
from app.auth.dependencies import CurrentUser
|
||
from app.middleware.permission import require_approved
|
||
from app.schemas.xcx_notes import NoteCreateRequest, NoteOut
|
||
from app.services import note_service
|
||
|
||
router = APIRouter(prefix="/api/xcx/notes", tags=["小程序备注"])
|
||
|
||
|
||
@router.post("", response_model=NoteOut)
|
||
async def create_note(
|
||
body: NoteCreateRequest,
|
||
user: CurrentUser = Depends(require_approved()),
|
||
):
|
||
"""创建备注(含星星评分,可选关联任务)。"""
|
||
return await note_service.create_note(
|
||
site_id=user.site_id,
|
||
user_id=user.user_id,
|
||
target_type=body.target_type,
|
||
target_id=body.target_id,
|
||
content=body.content,
|
||
task_id=body.task_id,
|
||
rating_service_willingness=body.rating_service_willingness,
|
||
rating_revisit_likelihood=body.rating_revisit_likelihood,
|
||
)
|
||
|
||
|
||
@router.get("")
|
||
async def get_notes(
|
||
target_type: str = Query("member", description="目标类型"),
|
||
target_id: int = Query(..., description="目标 ID"),
|
||
user: CurrentUser = Depends(require_approved()),
|
||
):
|
||
"""查询某目标的备注列表(按创建时间倒序)。"""
|
||
return await note_service.get_notes(
|
||
site_id=user.site_id,
|
||
target_type=target_type,
|
||
target_id=target_id,
|
||
)
|
||
|
||
|
||
@router.delete("/{note_id}")
|
||
async def delete_note(
|
||
note_id: int,
|
||
user: CurrentUser = Depends(require_approved()),
|
||
):
|
||
"""删除备注(验证归属后硬删除)。"""
|
||
return await note_service.delete_note(
|
||
note_id=note_id,
|
||
user_id=user.user_id,
|
||
site_id=user.site_id,
|
||
)
|