Skip to content

Commit a0f9815

Browse files
committed
generated file: api/routes/user.py
1 parent 89e56b6 commit a0f9815

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

Diff for: api/routes/user.py

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from fastapi import APIRouter, HTTPException, Depends, status
2+
from fastapi.responses import JSONResponse
3+
from fastapi.encoders import jsonable_encoder
4+
5+
from .schemas.user import UserCreate, User, UserLogin, Token
6+
from services.user import user_service
7+
from dependencies.auth import create_access_token, get_current_user
8+
9+
router = APIRouter(prefix="/api/v1/users", tags=["Users"])
10+
11+
@router.post("/register", response_model=User)
12+
async def register_user(request: UserCreate):
13+
"""
14+
Registers a new user.
15+
"""
16+
try:
17+
user = await user_service.create_user(request)
18+
return JSONResponse(status_code=status.HTTP_201_CREATED, content=jsonable_encoder(user))
19+
except Exception as e:
20+
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=f"Error registering user: {str(e)}")
21+
22+
@router.post("/login", response_model=Token)
23+
async def login_user(request: UserLogin):
24+
"""
25+
Logs in a user and generates an access token.
26+
"""
27+
try:
28+
user = await user_service.authenticate_user(request)
29+
access_token = create_access_token(data={"sub": user.id})
30+
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder({"access_token": access_token, "token_type": "bearer"}))
31+
except Exception as e:
32+
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail=f"Invalid credentials: {str(e)}")
33+
34+
@router.get("/me", response_model=User)
35+
async def get_current_user(current_user: User = Depends(get_current_user)):
36+
"""
37+
Retrieves the current user's information.
38+
"""
39+
try:
40+
user = await user_service.get_user_by_id(current_user.id)
41+
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder(user))
42+
except Exception as e:
43+
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Error retrieving user: {str(e)}")

0 commit comments

Comments
 (0)