from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from typing import List from models import User from schemas.user import UserCreate, User as UserSchema from services.database import SessionLocal, engine user_router = APIRouter(tags=["users"]) def get_db(): db = SessionLocal() try: yield db finally: db.close() @user_router.post("/users/", response_model=UserSchema) def create_user(user: UserCreate, db: Session = Depends(get_db)): db_user = User(**user.dict()) db.add(db_user) db.commit() db.refresh(db_user) return db_user @user_router.get("/users/", response_model=List[UserSchema]) def read_users(db: Session = Depends(get_db)): users = db.query(User).all() return users @user_router.get("/users/{user_id}", response_model=UserSchema) def read_user(user_id: int, db: Session = Depends(get_db)): db_user = db.query(User).filter(User.id == user_id).first() if db_user is None: raise HTTPException(status_code=404, detail="User not found") return db_user @user_router.put("/users/{user_id}", response_model=UserSchema) def update_user(user_id: int, user: UserCreate, db: Session = Depends(get_db)): db_user = db.query(User).filter(User.id == user_id).first() if db_user is None: raise HTTPException(status_code=404, detail="User not found") for key, value in user.dict().items(): setattr(db_user, key, value) db.commit() db.refresh(db_user) return db_user @user_router.delete("/users/{user_id}") def delete_user(user_id: int, db: Session = Depends(get_db)): db_user = db.query(User).filter(User.id == user_id).first() if db_user is None: raise HTTPException(status_code=404, detail="User not found") db.delete(db_user) db.commit() return {"message": "User deleted successfully"}