summaryrefslogtreecommitdiff
path: root/frontend/src/sagas/users.js
blob: fb5197d15b3861d439742db154358188fb139d9e (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
45
46
47
48
49
50
51
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 { fetchAndStoreSimulation, fetchAndStoreUser } from './objects'

export function* onFetchLoggedInUser(action) {
    try {
        const tokenResponse = yield call(
            performTokenSignIn,
            action.payload.authToken,
        )
        console.log(tokenResponse)
        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) {
            yield put(addToStore('authorization', authorization))

            yield fetchAndStoreSimulation(authorization.simulationId)
            yield fetchAndStoreUser(authorization.userId)
        }

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

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