summaryrefslogtreecommitdiff
path: root/src/api/sagas/users.js
blob: b999b6935b6c38fe986a781665c8d729f4ae4187 (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
import {call, put} from "redux-saga/effects";
import {logInSucceeded} from "../../actions/auth";
import {addToAuthorizationStore, addToSimulationStore, addToUserStore} from "../../actions/object-stores";
import {fetchAuthorizationsOfCurrentUserSucceeded} from "../../actions/users";
import {performTokenSignIn} from "../routes/auth";
import {getSimulation} from "../routes/simulations";
import {addUser, getAuthorizationsByUser, getUser} from "../routes/users";

export function* fetchLoggedInUser(action) {
    try {
        const tokenResponse = yield call(performTokenSignIn, action.payload.authToken);
        let userId = tokenResponse.userId;

        if (tokenResponse.isNewUser) {
            const newUser = yield call(addUser, action.payload);
            userId = newUser.id;
        }

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

export function* fetchAuthorizationsOfCurrentUser(action) {
    try {
        const authorizations = yield call(getAuthorizationsByUser, action.userId);

        for (const authorization of authorizations) {
            yield put(addToAuthorizationStore(authorization));

            const simulation = yield call(getSimulation, authorization.simulationId);
            yield put(addToSimulationStore(simulation));

            const user = yield call(getUser, authorization.userId);
            yield put(addToUserStore(user));
        }

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

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