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