11<?php
22namespace PH7 \ApiSimpleMenu \Service ;
33
4+ use Firebase \JWT \JWT ;
45use PH7 \ApiSimpleMenu \Dal \UserDal ;
56use PH7 \ApiSimpleMenu \Service \Exception \EmailExistsException ;
7+ use PH7 \ApiSimpleMenu \Service \Exception \CredentialsInvalidException ;
68use PH7 \ApiSimpleMenu \Validation \Exception \InvalidValidationException ;
79use PH7 \ApiSimpleMenu \Validation \UserValidation ;
810use PH7 \JustHttp \StatusCode ;
@@ -15,6 +17,42 @@ class User
1517{
1618 public const DATE_TIME_FORMAT = 'Y-m-d H:i:s ' ;
1719
20+ public function login (mixed $ data )
21+ {
22+ $ userValidation = new UserValidation ($ data );
23+ if ($ userValidation ->isLoginSchemaValid ()) {
24+ if (UserDal::doesEmailExist ($ data ->email )) {
25+ $ user = UserDal::getByEmail ($ data ->email );
26+
27+ if ($ user && password_verify ($ data ->password , $ user ['password ' ])) {
28+ $ userName = "{$ user ['first_name ' ]} {$ user ['last_name ' ]}" ;
29+
30+ $ currentTime = time ();
31+ $ jwtToken = JWT ::encode (
32+ [
33+ 'iss ' => $ _ENV ['APP_URL ' ],
34+ 'iat ' => $ currentTime ,
35+ 'exp ' => $ currentTime + (60 * 60 ), // valid for an hour
36+ 'data ' => [
37+ 'email ' => $ data ->email ,
38+ 'name ' => $ userName
39+ ]
40+ ],
41+ $ _ENV ['JWT_KEY ' ],
42+ $ _ENV ['JWT_ALGO_ENCRYPTION ' ]
43+ );
44+
45+ return [
46+ 'message ' => sprintf ('%s successfully logged in ' , $ userName ),
47+ 'token ' => $ jwtToken
48+ ];
49+ }
50+ }
51+ throw new CredentialsInvalidException ('Credentials invalid ' );
52+ }
53+ throw new InvalidValidationException ('Payload invalid ' );
54+ }
55+
1856 public function create (mixed $ data ): array |object
1957 {
2058 $ userValidation = new UserValidation ($ data );
@@ -102,7 +140,7 @@ public function retrieveAll(): array
102140 public function retrieve (string $ userUuid ): array
103141 {
104142 if (v::uuid ()->validate ($ userUuid )) {
105- if ($ user = UserDal::get ($ userUuid )) {
143+ if ($ user = UserDal::getById ($ userUuid )) {
106144 // Removing fields we don't want to expose
107145 unset($ user ['id ' ]);
108146
0 commit comments