from fastapi import APIRouter, Depends, HTTPException, Query, Header, status from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer from sqlalchemy.orm import Session from typing import Optional, List # from database import get_db from app.core.auth import get_current_user from app.modules.users.models import Users # Modelo base de usuario from app.modules.{{entity_name}}.models import {{model_name}} from app.modules.{{entity_name}}.schema import {{schema_name}}, {{schema_name}}Response from app.modules.{{entity_name}}.services import {{class_name}}Service router = APIRouter(prefix="/{{entity_name}}", tags=["{{entity_name}}"]) security = HTTPBearer() #================ Create ==================== @router.post("/create", response_model={{schema_name}}Response, status_code=status.HTTP_201_CREATED) async def create_{{entity_name}}( data: {{schema_name}}, db: Session = Depends(get_db), current_user: Users = Depends(get_current_user) ): """Create a {{entity_name}} - Requires authentication""" if not current_user: raise HTTPException(status_code=401, detail="User not found - invalid token") if current_user.tipo_usuario not in ["root", "admin"]: raise HTTPException(status_code=403, detail="You don't have permission to create {{entity_name}}") try: result = {{class_name}}Service.create_{{entity_name}}(db=db, data=data) return result except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) #================ Get ==================== @router.get("/get_list", response_model=List[{{schema_name}}Response]) def get_{{entity_name}}s( db: Session = Depends(get_db), current_user: Users = Depends(get_current_user), skip: int = Query(0, ge=0, description="Number of records to skip"), limit: int = Query(100, ge=1, le=1000, description="Max number of records to return") ): """Get list with pagination - requires authentication""" if not current_user: raise HTTPException(status_code=401, detail="Authentication required") return {{class_name}}Service.get_{{entity_name}}s(db=db, skip=skip, limit=limit) #================ Get by ID ==================== @router.get("/get_Id", response_model={{schema_name}}Response) def get_{{entity_name}}_by_id( {{entity_name}}_id: int, db: Session = Depends(get_db), current_user: Users = Depends(get_current_user) ): """Get {{entity_name}} by ID - requires authentication""" if not current_user: raise HTTPException(status_code=401, detail="Authentication required") try: result = {{class_name}}Service.get_{{entity_name}}(db=db, {{entity_name}}_id={{entity_name}}_id, current_user=current_user) return result except ValueError as e: raise HTTPException(status_code=404, detail=str(e)) #================ Update ==================== @router.patch("/update", response_model={{schema_name}}Response) async def update_{{entity_name}}( {{entity_name}}_id: int, data: {{schema_name}}, db: Session = Depends(get_db), current_user: Users = Depends(get_current_user) ): """Update existing {{entity_name}} - requires authentication""" if not current_user: raise HTTPException(status_code=401, detail="Authentication required") if current_user.tipo_usuario not in ["root", "admin"]: raise HTTPException(status_code=403, detail="You don't have permission to update {{entity_name}}") try: result = {{class_name}}Service.update_{{entity_name}}( db=db, {{entity_name}}_id={{entity_name}}_id, data=data, current_user=current_user ) return result except ValueError as e: raise HTTPException(status_code=404, detail=str(e)) #================ Delete ==================== @router.delete("/delete", status_code=status.HTTP_200_OK) async def delete_{{entity_name}}( {{entity_name}}_id: int, db: Session = Depends(get_db), current_user: Users = Depends(get_current_user) ): """Delete {{entity_name}} by ID - requires authentication""" if not current_user: raise HTTPException(status_code=401, detail="Authentication required") if current_user.tipo_usuario not in ["root", "admin"]: raise HTTPException(status_code=403, detail="You don't have permission to delete {{entity_name}}") try: result = {{class_name}}Service.delete_{{entity_name}}(db=db, {{entity_name}}_id={{entity_name}}_id, current_user=current_user) return {"message": "{{entity_name}} deleted successfully"} except ValueError as e: raise HTTPException(status_code=404, detail=str(e))