learnhouse/apps/api/src/routers/users.py
2023-11-12 23:16:34 +01:00

125 lines
2.9 KiB
Python

from fastapi import APIRouter, Depends, Request
from sqlmodel import Session
from src.security.auth import get_current_user
from src.core.events.database import get_db_session
from src.db.users import (
User,
UserCreate,
UserRead,
UserUpdate,
UserUpdatePassword,
)
from src.services.users.users import (
create_user,
create_user_without_org,
delete_user_by_id,
read_user_by_id,
read_user_by_uuid,
update_user,
update_user_password,
)
router = APIRouter()
@router.get("/profile")
async def api_get_current_user(current_user: User = Depends(get_current_user)):
"""
Get current user
"""
return current_user.dict()
@router.post("/org_id/{org_id}", response_model=UserRead, tags=["users"])
async def api_create_user_with_orgid(
*,
request: Request,
db_session: Session = Depends(get_db_session),
user_object: UserCreate,
org_id: int,
) -> UserRead:
"""
Create User with Org ID
"""
return await create_user(request, db_session, None, user_object, org_id)
@router.post("/", response_model=UserRead, tags=["users"])
async def api_create_user_without_org(
*,
request: Request,
db_session: Session = Depends(get_db_session),
user_object: UserCreate,
org_id: int,
) -> UserRead:
"""
Create User
"""
return await create_user_without_org(request, db_session, None, user_object)
@router.get("/user_id/{user_id}", response_model=UserRead, tags=["users"])
async def api_get_user_by_id(
*,
request: Request,
db_session: Session = Depends(get_db_session),
user_id: int,
) -> UserRead:
"""
Get User by ID
"""
return await read_user_by_id(request, db_session, None, user_id)
@router.get("/user_uuid/{user_uuid}", response_model=UserRead, tags=["users"])
async def api_get_user_by_uuid(
*,
request: Request,
db_session: Session = Depends(get_db_session),
user_uuid: str,
) -> UserRead:
"""
Get User by UUID
"""
return await read_user_by_uuid(request, db_session, None, user_uuid)
@router.put("/", response_model=UserRead, tags=["users"])
async def api_update_user(
*,
request: Request,
db_session: Session = Depends(get_db_session),
user_object: UserUpdate,
) -> UserRead:
"""
Update User
"""
return await update_user(request, db_session, None, user_object)
@router.put("/change_password/", response_model=UserRead, tags=["users"])
async def api_update_user_password(
*,
request: Request,
db_session: Session = Depends(get_db_session),
form: UserUpdatePassword,
) -> UserRead:
"""
Update User Password
"""
return await update_user_password(request, db_session, None, form)
@router.delete("/user_id/{user_id}", tags=["users"])
async def api_delete_user(
*,
request: Request,
db_session: Session = Depends(get_db_session),
user_id: int,
):
"""
Delete User
"""
return await delete_user_by_id(request, db_session, None, user_id)