181 lines
5.8 KiB
Python
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") |