summaryrefslogtreecommitdiff
path: root/src/api/sagas/users.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/sagas/users.js')
-rw-r--r--src/api/sagas/users.js47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/api/sagas/users.js b/src/api/sagas/users.js
new file mode 100644
index 00000000..b999b693
--- /dev/null
+++ b/src/api/sagas/users.js
@@ -0,0 +1,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);
+ }
+}