5
5
from fastapi import APIRouter
6
6
from fastapi .responses import JSONResponse
7
7
from sqlmodel import Session , select
8
+ from app .schemas .token import TokenResponse
9
+ from fastapi .security import OAuth2PasswordRequestForm
10
+ from datetime import timedelta
11
+ from fastapi import Depends
12
+ from fastapi import HTTPException , status
13
+
14
+ from backend .app .internal .config import Settings , get_settings
8
15
9
16
router = APIRouter (prefix = "/users" , tags = ["Users" ])
10
17
@@ -16,7 +23,7 @@ def get_users():
16
23
return result
17
24
18
25
19
- @router .post ("/signup " )
26
+ @router .post ("/" )
20
27
def signup_user (new_user : UserCreate ) -> UserResponse :
21
28
with Session (engine ) as session :
22
29
existing_user : User | None = session .exec (select (User ).where (User .email == new_user .email )).first ()
@@ -39,76 +46,27 @@ def signup_user(new_user: UserCreate) -> UserResponse:
39
46
created_at = user .created_at ,
40
47
updated_at = user .updated_at ,
41
48
)
49
+
50
+ def authenticate_user ():
51
+ return {}
42
52
53
+ def create_access_token ():
54
+ return {}
43
55
44
-
45
- # @router.put("/{user_id}", response_model=schemas.User)
46
- # def update_user(
47
- # *,
48
- # db: Session = Depends(deps.get_db),
49
- # user_id: UUID4,
50
- # user_in: schemas.UserUpdate,
51
- # current_user: models.User = Security(
52
- # deps.get_current_active_user,
53
- # scopes=[Role.ADMIN["name"], Role.SUPER_ADMIN["name"]],
54
- # ),
55
- # ) -> Any:
56
- # """
57
- # Update a user.
58
- # """
59
- # user = crud.user.get(db, id=user_id)
60
- # if not user:
61
- # raise HTTPException(
62
- # status_code=404,
63
- # detail="The user with this username does not exist in the system",
64
- # )
65
- # user = crud.user.update(db, db_obj=user, obj_in=user_in)
66
- # return user
67
-
68
-
69
- # @router.get("/me", response_model=schemas.User)
70
- # def read_user_me(
71
- # db: Session = Depends(deps.get_db),
72
- # current_user: models.User = Depends(deps.get_current_active_user),
73
- # ) -> Any:
74
- # """
75
- # Get current user.
76
- # """
77
- # if not current_user.user_role:
78
- # role = None
79
- # else:
80
- # role = current_user.user_role.role.name
81
- # user_data = schemas.User(
82
- # id=current_user.id,
83
- # email=current_user.email,
84
- # is_active=current_user.is_active,
85
- # full_name=current_user.full_name,
86
- # created_at=current_user.created_at,
87
- # updated_at=current_user.updated_at,
88
- # role=role,
89
- # )
90
- # return user_data
91
-
92
-
93
- # @router.put("/me", response_model=schemas.User)
94
- # def update_user_me(
95
- # # *,
96
- # db: Session = Depends(deps.get_db),
97
- # full_name: str = Body(None),
98
- # phone_number: str = Body(None),
99
- # email: EmailStr = Body(None),
100
- # current_user: models.User = Depends(deps.get_current_active_user),
101
- # ) -> Any:
102
- # """
103
- # Update own user.
104
- # """
105
- # current_user_data = jsonable_encoder(current_user)
106
- # user_in = schemas.UserUpdate(**current_user_data)
107
- # if phone_number is not None:
108
- # user_in.phone_number = phone_number
109
- # if full_name is not None:
110
- # user_in.full_name = full_name
111
- # if email is not None:
112
- # user_in.email = email
113
- # user = crud.user.update(db, db_obj=current_user, obj_in=user_in)
114
- # return user
56
+ @router .post ("/token" , response_model = TokenResponse )
57
+ async def login_for_access_token (
58
+ form_data : OAuth2PasswordRequestForm = Depends (),
59
+ settings : Settings = Depends (get_settings )
60
+ ):
61
+ user = authenticate_user (form_data .username , form_data .password )
62
+ if not user :
63
+ raise HTTPException (
64
+ status_code = status .HTTP_401_UNAUTHORIZED ,
65
+ detail = "Incorrect username or password" ,
66
+ headers = {"WWW-Authenticate" : "Bearer" },
67
+ )
68
+ access_token_expires = timedelta (minutes = settings .ACCESS_TOKEN_EXPIRE_MINUTES )
69
+ access_token = create_access_token (
70
+ user .email , expires_delta = access_token_expires
71
+ )
72
+ return {"access_token" : access_token , "token_type" : "bearer" }
0 commit comments