import logging import re from fastapi import APIRouter, HTTPException, status from sqlalchemy.exc import IntegrityError from app.api.dependencies import CurrentOwnerUser, SessionDep from app.crud import user_crud from app.database.models.user_model import UserRole from app.schemas.user_schemas import UserRegister, UserUpdate logger = logging.getLogger(__name__) INTERNAL_SERVER_ERROR = HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Internal server error") router = APIRouter( prefix="/user", tags=["User", "Dashboard"] ) @router.get("", summary="Get information about currently logged in user") async def get_user(session: SessionDep, current_user: CurrentOwnerUser): pass @router.post("", summary="Register new user", status_code=status.HTTP_201_CREATED, response_model=bool) async def register(session: SessionDep, user_data: UserRegister): try: user_crud.create_user(session, user_data, None, UserRole.OWNER) return True except IntegrityError as e: field_mapping = {"uuid": "email"} # If a UUID is duplicate, it means email is in use constraint = e.orig.diag.constraint_name column_name = re.sub(r"^user_(\w+)_key$", r"\1", constraint) if constraint else None if column_name == "uuid": column_name = "email" detail = f"{field_mapping.get(column_name, column_name or 'Entry').capitalize()} already in use" raise HTTPException( status_code=status.HTTP_409_CONFLICT, detail=detail ) except Exception as e: if isinstance(e, HTTPException): raise logger.error(e) raise INTERNAL_SERVER_ERROR @router.delete("", summary="Delete user") async def delete_user(): raise HTTPException(status_code=status.HTTP_501_NOT_IMPLEMENTED, detail="delete_user() not implemented") @router.put("", summary="Update user details") async def update_user(data: UserUpdate): raise HTTPException(status_code=status.HTTP_501_NOT_IMPLEMENTED, detail="update_user() not implemented")