from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from typing import List from app.models.community import CommunityDB, CommunityCreate, CommunityUpdate, CommunityInfo from app.models.database import get_db from app.api.deps import get_admin_user from app.models.user import UserDB from app.core.response import success_response, error_response, ResponseModel router = APIRouter() @router.post("/", response_model=ResponseModel) async def create_community( community: CommunityCreate, db: Session = Depends(get_db), admin: UserDB = Depends(get_admin_user) ): """创建社区""" db_community = CommunityDB(**community.model_dump()) db.add(db_community) db.commit() db.refresh(db_community) return success_response(data=CommunityInfo.model_validate(db_community)) @router.get("/", response_model=ResponseModel) async def get_communities( skip: int = 0, limit: int = 10, db: Session = Depends(get_db) ): """获取社区列表""" communities = db.query(CommunityDB).offset(skip).limit(limit).all() return success_response(data=[CommunityInfo.model_validate(c) for c in communities]) @router.get("/{community_id}", response_model=ResponseModel) async def get_community( community_id: int, db: Session = Depends(get_db) ): """获取社区详情""" community = db.query(CommunityDB).filter(CommunityDB.id == community_id).first() if not community: return error_response(code=404, message="社区不存在") return success_response(data=CommunityInfo.model_validate(community)) @router.put("/{community_id}", response_model=ResponseModel) async def update_community( community_id: int, community: CommunityUpdate, db: Session = Depends(get_db), admin: UserDB = Depends(get_admin_user) ): """更新社区信息""" db_community = db.query(CommunityDB).filter(CommunityDB.id == community_id).first() if not db_community: return error_response(code=404, message="社区不存在") update_data = community.model_dump(exclude_unset=True) for key, value in update_data.items(): setattr(db_community, key, value) db.commit() db.refresh(db_community) return success_response(data=CommunityInfo.model_validate(db_community)) @router.delete("/{community_id}", response_model=ResponseModel) async def delete_community( community_id: int, db: Session = Depends(get_db), admin: UserDB = Depends(get_admin_user) ): """删除社区""" result = db.query(CommunityDB).filter(CommunityDB.id == community_id).delete() if not result: return error_response(code=404, message="社区不存在") db.commit() return success_response(message="社区已删除")