Coverage for routes\users.py: 89%

27 statements  

« prev     ^ index     » next       coverage.py v7.1.0, created at 2023-02-05 19:00 +0800

1from auth.hash_password import HashPassword 

2from auth.jwt_handler import create_access_token 

3from database.connection import Database 

4from fastapi import APIRouter, Depends, HTTPException, status 

5from fastapi.security import OAuth2PasswordRequestForm 

6from models.users import User, TokenResponse 

7 

8user_router = APIRouter( 

9 tags=["User"], 

10) 

11 

12user_database = Database(User) 

13hash_password = HashPassword() 

14 

15 

16@user_router.post("/signup") 

17async def sign_user_up(user: User) -> dict: 

18 user_exist = await User.find_one(User.email == user.email) 

19 

20 if user_exist: 

21 raise HTTPException( 

22 status_code=status.HTTP_409_CONFLICT, 

23 detail="User with email provided exists already." 

24 ) 

25 hashed_password = hash_password.create_hash(user.password) 

26 user.password = hashed_password 

27 await user_database.save(user) 

28 return { 

29 "message": "User created successfully" 

30 } 

31 

32 

33@user_router.post("/signin", response_model=TokenResponse) 

34async def sign_user_in(user: OAuth2PasswordRequestForm = Depends()) -> dict: 

35 user_exist = await User.find_one(User.email == user.username) 

36 if not user_exist: 

37 raise HTTPException( 

38 status_code=status.HTTP_404_NOT_FOUND, 

39 detail="User with email does not exist." 

40 ) 

41 if hash_password.verify_hash(user.password, user_exist.password): 

42 access_token = create_access_token(user_exist.email) 

43 return { 

44 "access_token": access_token, 

45 "token_type": "Bearer" 

46 } 

47 

48 raise HTTPException( 

49 status_code=status.HTTP_401_UNAUTHORIZED, 

50 detail="Invalid details passed." 

51 )