user_material_api.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from fastapi import APIRouter, UploadFile, File, Form, HTTPException, Depends
  2. from fastapi.responses import JSONResponse
  3. from typing import Optional
  4. from backend.services.user_material_service import user_material_service
  5. router = APIRouter()
  6. @router.post("/api/v1/users/{user_id}/materials", tags=["用户素材管理"])
  7. def upload_material(
  8. user_id: int,
  9. file: UploadFile = File(...),
  10. image_type: str = Form(...),
  11. original_filename: str = Form(...)
  12. ):
  13. """
  14. 用户上传素材
  15. """
  16. file_bytes = file.file.read()
  17. result = user_material_service.upload_material(
  18. user_id=user_id,
  19. file_bytes=file_bytes,
  20. image_type=image_type,
  21. original_filename=original_filename
  22. )
  23. if not result["success"]:
  24. raise HTTPException(status_code=400, detail=result["error"])
  25. return result
  26. @router.get("/api/v1/users/{user_id}/materials", tags=["用户素材管理"])
  27. def list_materials(
  28. user_id: int,
  29. material_type: Optional[str] = None,
  30. page: int = 1,
  31. page_size: int = 20
  32. ):
  33. """
  34. 获取用户素材列表
  35. """
  36. result = user_material_service.list_materials(
  37. user_id=user_id,
  38. material_type=material_type,
  39. page=page,
  40. page_size=page_size
  41. )
  42. if not result["success"]:
  43. raise HTTPException(status_code=400, detail=result["error"])
  44. return result
  45. from pydantic import BaseModel
  46. class UpdateMaterialRequest(BaseModel):
  47. original_filename: str
  48. @router.put("/api/v1/users/{user_id}/materials/{material_id}", tags=["用户素材管理"])
  49. def update_material(
  50. user_id: int,
  51. material_id: int,
  52. data: UpdateMaterialRequest
  53. ):
  54. """
  55. 更新用户素材信息
  56. """
  57. result = user_material_service.update_material(user_id, material_id, data.dict())
  58. if not result["success"]:
  59. raise HTTPException(status_code=400, detail=result["error"])
  60. return result
  61. @router.delete("/api/v1/users/{user_id}/materials/{material_id}", tags=["用户素材管理"])
  62. def delete_material(
  63. user_id: int,
  64. material_id: int
  65. ):
  66. """
  67. 删除用户素材
  68. """
  69. result = user_material_service.delete_material(user_id, material_id)
  70. if not result["success"]:
  71. raise HTTPException(status_code=400, detail=result["error"])
  72. return result