File tree Expand file tree Collapse file tree 5 files changed +54
-7
lines changed Expand file tree Collapse file tree 5 files changed +54
-7
lines changed Original file line number Diff line number Diff line change @@ -14,11 +14,53 @@ def user_count() -> int:
14
14
15
15
16
16
def create_account (name : str , email : str , password : str ) -> User :
17
- return User (name , email , 'abc' )
17
+ session = db_session .create_session ()
18
+
19
+ try :
20
+ user = User ()
21
+ user .email = email
22
+ user .name = name
23
+ # TODO: Set proper password
24
+ user .hash_password = "TBD"
25
+
26
+ session .add (user )
27
+ session .commit ()
28
+
29
+ return user
30
+ finally :
31
+ session .close ()
18
32
19
33
20
34
def login_user (email : str , password : str ) -> Optional [User ]:
21
- if password == 'abc' :
22
- return User ("test user" , email , 'abc' )
35
+ session = db_session .create_session ()
36
+
37
+ try :
38
+ user = session .query (User ).filter (User .email == email ).first ()
39
+ if not user :
40
+ return user
41
+
42
+ # TODO: Verify password
43
+ if False :
44
+ return None
45
+
46
+ return user
47
+ finally :
48
+ session .close ()
23
49
24
- return None
50
+
51
+ def get_user_by_id (user_id : int ) -> Optional [User ]:
52
+ session = db_session .create_session ()
53
+
54
+ try :
55
+ return session .query (User ).filter (User .id == user_id ).first ()
56
+ finally :
57
+ session .close ()
58
+
59
+
60
+ def get_user_by_email (email : str ) -> Optional [User ]:
61
+ session = db_session .create_session ()
62
+
63
+ try :
64
+ return session .query (User ).filter (User .email == email ).first ()
65
+ finally :
66
+ session .close ()
Original file line number Diff line number Diff line change 1
1
from starlette .requests import Request
2
2
3
3
from data .user import User
4
+ from services import user_service
4
5
from viewmodels .shared .viewmodel import ViewModelBase
5
6
6
7
7
8
class AccountViewModel (ViewModelBase ):
8
9
def __init__ (self , request : Request ):
9
10
super ().__init__ (request )
10
- self .user = User ('Michael' , 'michael@talkpython.fm' , '9hsdhhsy74s' )
11
+
12
+ self .user = user_service .get_user_by_id (self .user_id )
Original file line number Diff line number Diff line change 2
2
3
3
from starlette .requests import Request
4
4
5
+ from services import user_service
5
6
from viewmodels .shared .viewmodel import ViewModelBase
6
7
7
8
@@ -25,3 +26,5 @@ async def load(self):
25
26
self .error = "Your email is required."
26
27
elif not self .password or len (self .password ) < 5 :
27
28
self .error = "Your password is required and must be at 5 characters."
29
+ elif user_service .get_user_by_email (self .email ):
30
+ self .error = "That email is already taken. Log in instead?"
Original file line number Diff line number Diff line change @@ -10,10 +10,10 @@ class ViewModelBase:
10
10
def __init__ (self , request : Request ):
11
11
self .request : Request = request
12
12
self .error : Optional [str ] = None
13
- self .user_id : Optional [int ] = None
13
+ self .user_id : Optional [int ] = cookie_auth . get_user_id_via_auth_cookie ( self . request )
14
14
15
15
# We'll get this once we have users from the cookies.
16
- self .is_logged_in = cookie_auth . get_user_id_via_auth_cookie ( self .request )
16
+ self .is_logged_in = self .user_id is not None
17
17
18
18
def to_dict (self ) -> dict :
19
19
return self .__dict__
You can’t perform that action at this time.
0 commit comments