summaryrefslogtreecommitdiff
path: root/frontend/src/sagas/users.js
blob: 3825443ae8db69f5c07b1172c19d02d8fff39654 (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
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, getAuthorizationsByUser } 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
    );
    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 authorizations = yield call(getAuthorizationsByUser, action.userId);

    for (const authorization of authorizations) {
      yield put(addToStore("authorization", authorization));

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

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

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