| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- from typing import Any, List
- from fastapi import APIRouter, Body, Depends, HTTPException
- from fastapi.encoders import jsonable_encoder
- from sqlalchemy.orm import Session
- from backend.app.core import security
- from backend.app.core.database import get_db
- from backend.app.models import sql_models
- from backend.app.schemas import schemas
- from backend.app.api import deps
- router = APIRouter()
- @router.get("", response_model=List[schemas.User])
- def read_users(
- db: Session = Depends(get_db),
- skip: int = 0,
- limit: int = 100,
- current_user: sql_models.User = Depends(deps.get_current_active_superuser),
- ) -> Any:
- """
- Retrieve users.
- """
- users = db.query(sql_models.User).offset(skip).limit(limit).all()
- return users
- @router.post("", response_model=schemas.User)
- def create_user(
- *,
- db: Session = Depends(get_db),
- user_in: schemas.UserCreate,
- current_user: sql_models.User = Depends(deps.get_current_active_superuser),
- ) -> Any:
- """
- Create new user.
- """
- user = db.query(sql_models.User).filter(sql_models.User.username == user_in.username).first()
- if user:
- raise HTTPException(
- status_code=400,
- detail="The user with this username already exists in the system.",
- )
-
- hashed_password = security.get_password_hash(user_in.password)
- db_user = sql_models.User(
- username=user_in.username,
- hashed_password=hashed_password,
- is_active=user_in.is_active,
- is_superuser=user_in.is_superuser,
- )
- db.add(db_user)
- db.commit()
- db.refresh(db_user)
- return db_user
- @router.put("/{user_id}", response_model=schemas.User)
- def update_user(
- *,
- db: Session = Depends(get_db),
- user_id: int,
- user_in: schemas.UserUpdate,
- current_user: sql_models.User = Depends(deps.get_current_active_superuser),
- ) -> Any:
- """
- Update a user.
- """
- user = db.query(sql_models.User).filter(sql_models.User.id == user_id).first()
- if not user:
- raise HTTPException(
- status_code=404,
- detail="The user with this id does not exist in the system",
- )
-
- # Check if username collision if logic allowed changing username (but UserUpdate doesn't have username)
- # So we just update fields
-
- if user_in.password:
- user.hashed_password = security.get_password_hash(user_in.password)
- if user_in.is_active is not None:
- user.is_active = user_in.is_active
- if user_in.is_superuser is not None:
- user.is_superuser = user_in.is_superuser
-
- db.add(user)
- db.commit()
- db.refresh(user)
- return user
- @router.delete("/{user_id}", response_model=schemas.User)
- def delete_user(
- *,
- db: Session = Depends(get_db),
- user_id: int,
- current_user: sql_models.User = Depends(deps.get_current_active_superuser),
- ) -> Any:
- """
- Delete a user.
- """
- user = db.query(sql_models.User).filter(sql_models.User.id == user_id).first()
- if not user:
- raise HTTPException(
- status_code=404,
- detail="The user with this id does not exist in the system",
- )
- if user.id == current_user.id:
- raise HTTPException(
- status_code=400,
- detail="Users cannot delete themselves",
- )
-
- db.delete(user)
- db.commit()
- return user
|