Преглед изворни кода

:sparkles: Finished refactor so less network calls and OnboardingView.vue cleaner

tags/0.0.3^2
tomit4 пре 2 година
родитељ
комит
a5c1050efb

+ 0
- 2
backend/lib/plugins/user.js Прегледај датотеку

@@ -16,7 +16,6 @@ const UserEmailRoute = require('../routes/user/email.js')
16 16
 const UserVerifyActiveRoute = require('../routes/user/verifyactivesession.js')
17 17
 const UserGetAccessRoute = require('../routes/user/getaccess.js')
18 18
 const UserValidateSessionRoute = require('../routes/user/validatesession.js')
19
-const UserByEmail = require('../routes/user/user-by-email.js')
20 19
 const UserPassword = require('../routes/user/authentication')
21 20
 
22 21
 const UserService = require('../services/user')
@@ -58,7 +57,6 @@ module.exports = {
58 57
         await server.route(UserVerifyActiveRoute)
59 58
         await server.route(UserGetAccessRoute)
60 59
         await server.route(UserValidateSessionRoute)
61
-        await server.route(UserByEmail)
62 60
         await server.route(UserPassword)
63 61
     },
64 62
 }

+ 0
- 55
backend/lib/routes/user/user-by-email.js Прегледај датотеку

@@ -1,55 +0,0 @@
1
-'use strict'
2
-
3
-const Joi = require('joi')
4
-
5
-const pluginConfig = {
6
-    handlerType: 'email',
7
-    docs: {
8
-        get: {
9
-            description: 'Fetches User Data by Email',
10
-            notes: 'Grabs the User Data by Email for use in survey validation',
11
-        },
12
-    },
13
-}
14
-
15
-module.exports = {
16
-    method: 'GET',
17
-    path: '/fetchbymail/{email}',
18
-    options: {
19
-        ...pluginConfig.docs.get,
20
-        tags: ['api'],
21
-        auth: 'default_jwt',
22
-        cors: true,
23
-        handler: async function (request, h) {
24
-            const email = request.params.email
25
-            const { userService } = request.server.services()
26
-            const data = await userService.findByUserEmail(email)
27
-            try {
28
-                return {
29
-                    ok: true,
30
-                    handler: pluginConfig.handlerType,
31
-                    data: data,
32
-                }
33
-            } catch (err) {
34
-                return {
35
-                    ok: false,
36
-                    handler: pluginConfig.handlerType,
37
-                    data: {
38
-                        error: err,
39
-                    },
40
-                }
41
-            }
42
-        },
43
-        validate: {
44
-            failAction: 'log',
45
-        },
46
-        response: {
47
-            schema: Joi.object({
48
-                ok: Joi.bool(),
49
-                handler: Joi.string(),
50
-                data: Joi.object(),
51
-            }).label('fetchbymail'),
52
-            failAction: 'log',
53
-        },
54
-    },
55
-}

+ 23
- 2
backend/lib/routes/user/validatesession.js Прегледај датотеку

@@ -26,14 +26,35 @@ module.exports = {
26 26
         },
27 27
         handler: async function (request, h) {
28 28
             const hashedAccessToken = request.payload
29
-            const { userService } = request.server.services()
29
+            const { userService, profileService } = request.server.services()
30 30
             try {
31 31
                 const validatedSessionToken =
32 32
                     userService.validateSession(hashedAccessToken)
33
+                const user = await userService.findByUserEmail(
34
+                    validatedSessionToken.email,
35
+                )
36
+                const type = user.is_poster == 1 ? 'poster' : 'seeker'
37
+                const profiles = await profileService.getCompleteProfilesFor(
38
+                    user.user_id,
39
+                    type,
40
+                )
41
+                // TODO: handle user with multiple profiles...
42
+                const profileId = profiles[0].profile_id
43
+                const responses = []
44
+                profiles[0].responses.forEach(response => {
45
+                    responses.push({
46
+                        response_key_id: response.response_key_id,
47
+                        val: response.val,
48
+                    })
49
+                })
33 50
                 return {
34 51
                     ok: true,
35 52
                     handler: pluginConfig.handlerType,
36
-                    data: validatedSessionToken,
53
+                    data: {
54
+                        ...validatedSessionToken,
55
+                        profileId: profileId,
56
+                        responses: responses,
57
+                    },
37 58
                 }
38 59
             } catch (err) {
39 60
                 return {

+ 1
- 5
frontend/src/services/user.service.js Прегледај датотеку

@@ -14,8 +14,4 @@ const signupUser = async user => {
14 14
     return await db.post(`/user/signup`, payload)
15 15
 }
16 16
 
17
-const fetchUserByEmail = async (userEmail, sessionToken) => {
18
-    return await db.get(`/user/fetchbymail/${userEmail}`, sessionToken)
19
-}
20
-
21
-export { signupUser, fetchUserByEmail }
17
+export { signupUser }

+ 4
- 76
frontend/src/views/OnboardingView.vue Прегледај датотеку

@@ -35,11 +35,6 @@ main.view--onboarding
35 35
 
36 36
 <script>
37 37
 import { Authenticator } from '../services/auth.service.js'
38
-import { fetchUserByEmail } from '../services/user.service.js'
39
-import {
40
-    fetchProfilesByUserId,
41
-    fetchProfileByProfileId,
42
-} from '../services/profile.service.js'
43 38
 import { surveyFactory } from '@/utils'
44 39
 import stepViews from '@/components/onboarding'
45 40
 import SurveyCompleteView from './SurveyCompleteView.vue'
@@ -67,21 +62,8 @@ export default {
67 62
         hashedAccessToken = this.grabStoredCookie('siimee_access')
68 63
         try {
69 64
             const sessionData = await this.verifySession(hashedAccessToken)
70
-            console.log('sessionData :=>', sessionData)
71
-            // TODO: Move this logic onto the backend and have it
72
-            // returned in verifySession(hashedSessionToken)
73
-            const userId = await this.grabUserIdByEmail(
74
-                sessionData.email,
75
-                sessionData.accessToken,
76
-            )
77
-            currentProfileId = await this.grabProfileIdByUserId(
78
-                userId,
79
-                sessionData.accessToken,
80
-            )
81
-            this.responses = await this.grabResponsesByProfileId(
82
-                currentProfileId,
83
-                sessionData.accessToken,
84
-            )
65
+            currentProfileId = sessionData.profileId
66
+            this.responses = sessionData.responses
85 67
             this.currentStep = this.responses.length + 3
86 68
             this.goToStep(this.currentStep)
87 69
         } catch (err) {
@@ -108,11 +90,9 @@ export default {
108 90
                 cookieKey in cookies ? cookies[`${cookieKey}`] : undefined
109 91
             return cookieVal
110 92
         },
111
-        // TODO: sessionToken is flying around far too often,
112
-        // see above TODO regarding moving most of this logic to the backend
113 93
         async verifySession(hashedAccessToken) {
114 94
             if (!hashedAccessToken)
115
-                return console.warn('WARNING :=> sessionToken is not defined')
95
+                return console.warn('WARNING :=> accessToken is not defined')
116 96
             const validatedToken = await this.authenticator.validateSession(
117 97
                 hashedAccessToken,
118 98
             )
@@ -122,58 +102,6 @@ export default {
122 102
                 return validatedToken
123 103
             }
124 104
         },
125
-        async grabUserIdByEmail(email, accessToken) {
126
-            const user = await fetchUserByEmail(email, accessToken)
127
-            if (!user) {
128
-                throw new Error('User NOT found by email')
129
-            } else return user.user_id
130
-        },
131
-        async grabProfileIdByUserId(userId, accessToken) {
132
-            const profilesFromUserId = await fetchProfilesByUserId(
133
-                userId,
134
-                accessToken,
135
-            )
136
-            if (
137
-                profilesFromUserId.length === 1 &&
138
-                profilesFromUserId.status !== 401
139
-            ) {
140
-                return profilesFromUserId[0].profile_id
141
-            } else if (profilesFromUserId.length > 1) {
142
-                // TODO: Refactor once more is known on users with multiple profiles
143
-                throw new Error('Multiple Profiles for this User ID')
144
-            } else {
145
-                throw new Error('No Profile for User ID found')
146
-            }
147
-        },
148
-        async grabProfileByProfileId(profileId, accessToken) {
149
-            const profile = await fetchProfileByProfileId(
150
-                profileId,
151
-                accessToken,
152
-            )
153
-            if (!profile || profile.status === 401) {
154
-                throw new Error(`No Profile Found for profileId ${profileId}`)
155
-            } else {
156
-                return profile
157
-            }
158
-        },
159
-        async grabResponsesByProfileId(profileId, accessToken) {
160
-            const responses = []
161
-            const profile = await this.grabProfileByProfileId(
162
-                profileId,
163
-                accessToken,
164
-            )
165
-            if (!profile.responses.length || profile.responses.status === 401) {
166
-                throw new Error(`No Responses Found for profileId ${profileId}`)
167
-            } else {
168
-                profile.responses.forEach(response => {
169
-                    responses.push({
170
-                        response_key_id: response.response_key_id,
171
-                        val: response.val,
172
-                    })
173
-                })
174
-                return responses
175
-            }
176
-        },
177 105
         async updateAnswers(payload) {
178 106
             if (payload) {
179 107
                 const k = payload.question.survey_stage
@@ -192,7 +120,7 @@ export default {
192 120
                 this.responses.push(response)
193 121
                 if (k === 'aspects') return
194 122
             }
195
-            // If user has finished minimum profile creation,
123
+            // NOTE: If user has finished minimum profile creation,
196 124
             // Adds survey answers to responses table and verifies tokens on each step
197 125
             if (currentProfileId) {
198 126
                 await surveyFactory.addNewSurveyAnswer(

Loading…
Откажи
Сачувај