2025-05-25 19:05:34 +02:00

181 lines
5.8 KiB
Python

import logging
from typing import Optional
from fastapi import APIRouter, Depends, HTTPException, Request
from src.services.user_service import UserService
from src.schemas.user import UserResponse, UserListResponse, UserCreate, UserUpdate
from src.utils.logging import log_request
logger = logging.getLogger(__name__)
router = APIRouter(tags=["Users"], prefix="/users")
# Initialize service
user_service = UserService()
@router.get("/me", response_model=UserResponse)
async def read_users_me(
request: Request,
user_id: str # Now requires user_id as a query parameter
):
"""Get user information by user ID"""
log_request(
{"path": request.url.path, "method": request.method, "user_id": user_id}
)
try:
response = await user_service.get_user_by_id(user_id)
return response
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
except RuntimeError as e:
raise HTTPException(status_code=404, detail=str(e))
except Exception as e:
logger.error(f"Unexpected error getting user: {e}")
raise HTTPException(status_code=500, detail="Internal server error")
@router.put("/me", response_model=UserResponse)
async def update_current_user(
user_data: UserUpdate,
request: Request,
user_id: str # Now requires user_id as a query parameter
):
"""Update user information by user ID"""
log_request(
{"path": request.url.path, "method": request.method, "user_data": user_data.dict(), "user_id": user_id}
)
try:
response = await user_service.update_user_by_id(user_id, user_data)
return response
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
except RuntimeError as e:
raise HTTPException(status_code=404, detail=str(e))
except Exception as e:
logger.error(f"Unexpected error updating user: {e}")
raise HTTPException(status_code=500, detail="Internal server error")
@router.post("", response_model=UserResponse, status_code=201)
async def create_user(
user_data: UserCreate,
request: Request
):
"""
Create a new user
This endpoint no longer requires authentication
"""
log_request(
{"path": request.url.path, "method": request.method, "user_data": user_data.dict()}
)
try:
response = await user_service.create_user(user_data)
return response
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
except RuntimeError as e:
raise HTTPException(status_code=404, detail=str(e))
except Exception as e:
logger.error(f"Unexpected error creating user: {e}")
raise HTTPException(status_code=500, detail="Internal server error")
@router.get("", response_model=UserListResponse)
async def list_users(
request: Request,
team_id: Optional[str] = None
):
"""
List users
This endpoint no longer requires authentication
"""
log_request(
{"path": request.url.path, "method": request.method, "team_id": team_id}
)
try:
response = await user_service.list_users(team_id)
return response
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
except Exception as e:
logger.error(f"Unexpected error listing users: {e}")
raise HTTPException(status_code=500, detail="Internal server error")
@router.get("/{user_id}", response_model=UserResponse)
async def get_user(
user_id: str,
request: Request
):
"""
Get user by ID
This endpoint no longer requires authentication
"""
log_request(
{"path": request.url.path, "method": request.method, "user_id": user_id}
)
try:
response = await user_service.get_user(user_id)
return response
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
except RuntimeError as e:
raise HTTPException(status_code=404, detail=str(e))
except Exception as e:
logger.error(f"Unexpected error getting user: {e}")
raise HTTPException(status_code=500, detail="Internal server error")
@router.put("/{user_id}", response_model=UserResponse)
async def update_user(
user_id: str,
user_data: UserUpdate,
request: Request
):
"""
Update user by ID
This endpoint no longer requires authentication
"""
log_request(
{"path": request.url.path, "method": request.method, "user_id": user_id, "user_data": user_data.dict()}
)
try:
response = await user_service.update_user(user_id, user_data)
return response
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
except RuntimeError as e:
raise HTTPException(status_code=404, detail=str(e))
except Exception as e:
logger.error(f"Unexpected error updating user: {e}")
raise HTTPException(status_code=500, detail="Internal server error")
@router.delete("/{user_id}", status_code=204)
async def delete_user(
user_id: str,
request: Request
):
"""
Delete user by ID
This endpoint no longer requires authentication
"""
log_request(
{"path": request.url.path, "method": request.method, "user_id": user_id}
)
try:
await user_service.delete_user(user_id)
return None
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
except RuntimeError as e:
raise HTTPException(status_code=404, detail=str(e))
except Exception as e:
logger.error(f"Unexpected error deleting user: {e}")
raise HTTPException(status_code=500, detail="Internal server error")