summaryrefslogtreecommitdiff
path: root/frontend/src/sagas/users.js
blob: 74e652f621735f844b5a5f678ac7c0ae92261ba9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import { call, put } from 'redux-saga/effects'
import { logInSucceeded } from '../actions/auth'
import { addToStore } from '../actions/objects'
import { fetchAuthorizationsOfCurrentUserSucceeded } from '../actions/users'
import { performTokenSignIn } from '../api/routes/token-signin'
import { addUser } from '../api/routes/users'
import { saveAuthLocalStorage } from '../auth/index'
import { fetchAndStoreProject, fetchAndStoreUser } from './objects'

export function* onFetchLoggedInUser(action) {
    try {
        const tokenResponse = yield call(performTokenSignIn, action.payload.authToken)

        let userId = tokenResponse.userId

        if (tokenResponse.isNewUser) {
            saveAuthLocalStorage({ authToken: action.payload.authToken })
            const newUser = yield call(addUser, action.payload)
            userId = newUser._id
        }

        yield put(logInSucceeded(Object.assign({ userId }, action.payload)))
    } catch (error) {
        console.error(error)
    }
}

export function* onFetchAuthorizationsOfCurrentUser(action) {
    try {
        const user = yield call(fetchAndStoreUser, action.userId)

        for (const authorization of user.authorizations) {
            authorization.userId = action.userId
            yield put(addToStore('authorization', authorization))
            yield fetchAndStoreProject(authorization.projectId)
        }

        const authorizationIds = user.authorizations.map((authorization) => [action.userId, authorization.projectId])

        yield put(fetchAuthorizationsOfCurrentUserSucceeded(authorizationIds))
    } catch (error) {
        console.error(error)
    }
}