import logging import re from fastapi import APIRouter, Body, HTTPException, status from sqlalchemy.exc import IntegrityError from app.api.dependencies import SessionDep from app.crud import user_crud from app.database.models.user_model import UserRole from app.schemas.user_schemas import UserRegister logger = logging.getLogger(__name__) router = APIRouter( prefix="/user", tags=["User"] ) @router.delete("/delete", summary="Delete user") async def delete_user(): raise NotImplementedError("delete_user() needs to be implemented.") @router.delete("/logout", summary="User logout") async def logout(): raise NotImplementedError("logout() needs to be implemented.") @router.post("/register", summary="Register new user") async def register(session: SessionDep, user_data: UserRegister): try: user_crud.create_user(session, user_data, None, UserRole.OWNER) return {"detail": "Registered succeesfully"} 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: logger.error(e) raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Failed to register") @router.put("/update", summary="Update user details") async def update_user(data: dict = Body(...)): raise NotImplementedError("update_user() needs to be implemented.")