feat: add user role system and public joke submission API
- Add AdminUser role field (admin/submitter) - User management in admin panel - Public joke submission API (no auth required) - Document submission methods for external workers Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
ceed63fcb0
commit
aecf1f1f15
@@ -0,0 +1,62 @@
|
||||
"""
|
||||
公开提交流程 - 供外部用户(submitter)使用。
|
||||
无后台管理权限,仅能提交笑话到 pending 状态。
|
||||
"""
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from sqlalchemy.orm import Session
|
||||
from pydantic import BaseModel
|
||||
|
||||
from app.database import get_db
|
||||
from app.models.joke import Joke
|
||||
|
||||
router = APIRouter(tags=["笑话提交"])
|
||||
|
||||
|
||||
class JokeSubmit(BaseModel):
|
||||
"""笑话提交"""
|
||||
title: str
|
||||
content: str
|
||||
|
||||
|
||||
class JokeBatchSubmit(BaseModel):
|
||||
"""批量提交"""
|
||||
jokes: list[JokeSubmit]
|
||||
|
||||
|
||||
@router.post("/submit", response_model=dict)
|
||||
def submit_joke(data: JokeSubmit, db: Session = Depends(get_db)):
|
||||
"""公开接口:提交单条笑话(自动进入待审核状态)"""
|
||||
joke = Joke(
|
||||
title=data.title,
|
||||
content=data.content,
|
||||
status="pending",
|
||||
)
|
||||
db.add(joke)
|
||||
db.commit()
|
||||
db.refresh(joke)
|
||||
return {
|
||||
"success": True,
|
||||
"id": joke.id,
|
||||
"message": f"已提交,ID: {joke.id}"
|
||||
}
|
||||
|
||||
|
||||
@router.post("/submit/batch", response_model=dict)
|
||||
def submit_jokes_batch(data: JokeBatchSubmit, db: Session = Depends(get_db)):
|
||||
"""公开接口:批量提交笑话"""
|
||||
added = []
|
||||
for item in data.jokes:
|
||||
joke = Joke(
|
||||
title=item.title,
|
||||
content=item.content,
|
||||
status="pending",
|
||||
)
|
||||
db.add(joke)
|
||||
added.append(item.title)
|
||||
|
||||
db.commit()
|
||||
return {
|
||||
"success": True,
|
||||
"count": len(added),
|
||||
"message": f"已提交 {len(added)} 条笑话"
|
||||
}
|
||||
Reference in New Issue
Block a user