summaryrefslogtreecommitdiff
path: root/src/api
diff options
context:
space:
mode:
authorGeorgios Andreadis <g.andreadis@student.tudelft.nl>2017-08-16 22:55:16 +0300
committerGeorgios Andreadis <g.andreadis@student.tudelft.nl>2017-09-23 10:05:42 +0200
commit07195f3762b6a8a7dfb44c2231db58c5be13c43f (patch)
tree2b4640457f70b55a97aff22fbe617e4b8538464a /src/api
parent91c8088e1d7def9242f60c708cd34f25dcb77d76 (diff)
Rename project to sim and enable sim-adding
Diffstat (limited to 'src/api')
-rw-r--r--src/api/sagas/index.js9
-rw-r--r--src/api/sagas/objects.js24
-rw-r--r--src/api/sagas/simulations.js21
-rw-r--r--src/api/sagas/users.js17
4 files changed, 58 insertions, 13 deletions
diff --git a/src/api/sagas/index.js b/src/api/sagas/index.js
index ea92533a..f315f377 100644
--- a/src/api/sagas/index.js
+++ b/src/api/sagas/index.js
@@ -1,9 +1,12 @@
import {takeEvery} from "redux-saga/effects";
import {LOG_IN} from "../../actions/auth";
+import {ADD_SIMULATION} from "../../actions/simulations";
import {FETCH_AUTHORIZATIONS_OF_CURRENT_USER} from "../../actions/users";
-import {fetchAuthorizationsOfCurrentUser, fetchLoggedInUser} from "./users";
+import {onSimulationAdd} from "./simulations";
+import {onFetchAuthorizationsOfCurrentUser, onFetchLoggedInUser} from "./users";
export default function* rootSaga() {
- yield takeEvery(LOG_IN, fetchLoggedInUser);
- yield takeEvery(FETCH_AUTHORIZATIONS_OF_CURRENT_USER, fetchAuthorizationsOfCurrentUser);
+ yield takeEvery(LOG_IN, onFetchLoggedInUser);
+ yield takeEvery(FETCH_AUTHORIZATIONS_OF_CURRENT_USER, onFetchAuthorizationsOfCurrentUser);
+ yield takeEvery(ADD_SIMULATION, onSimulationAdd);
}
diff --git a/src/api/sagas/objects.js b/src/api/sagas/objects.js
new file mode 100644
index 00000000..9bc98e6f
--- /dev/null
+++ b/src/api/sagas/objects.js
@@ -0,0 +1,24 @@
+import {call, put, select} from "redux-saga/effects";
+import {addToSimulationStore, addToUserStore} from "../../actions/objects";
+import {getSimulation} from "../routes/simulations";
+import {getUser} from "../routes/users";
+
+const selectors = {
+ simulation: state => state.objects.simulations,
+ user: state => state.objects.users,
+ authorization: state => state.objects.authorizations,
+};
+
+function* fetchAndStoreObject(objectType, id, apiCall, addToStore) {
+ const objectStore = yield select(selectors[objectType]);
+ if (!objectStore[id]) {
+ const object = yield apiCall;
+ yield put(addToStore(object));
+ }
+}
+
+export const fetchAndStoreSimulation = (id) =>
+ fetchAndStoreObject("simulation", id, call(getSimulation, id), addToSimulationStore);
+
+export const fetchAndStoreUser = (id) =>
+ fetchAndStoreObject("user", id, call(getUser, id), addToUserStore);
diff --git a/src/api/sagas/simulations.js b/src/api/sagas/simulations.js
new file mode 100644
index 00000000..b824d8d5
--- /dev/null
+++ b/src/api/sagas/simulations.js
@@ -0,0 +1,21 @@
+import {call, put} from "redux-saga/effects";
+import {addToAuthorizationStore, addToSimulationStore} from "../../actions/objects";
+import {addSimulationSucceeded} from "../../actions/simulations";
+import {addSimulation} from "../routes/simulations";
+
+export function* onSimulationAdd(action) {
+ try {
+ const simulation = yield call(addSimulation, {name: action.name});
+ yield put(addToSimulationStore(simulation));
+
+ const authorization = {
+ simulationId: simulation.id,
+ userId: action.userId,
+ authorizationLevel: "OWN"
+ };
+ yield put(addToAuthorizationStore(authorization));
+ yield put(addSimulationSucceeded([authorization.userId, authorization.simulationId]));
+ } catch (error) {
+ console.log(error);
+ }
+}
diff --git a/src/api/sagas/users.js b/src/api/sagas/users.js
index b999b693..d3ef32a6 100644
--- a/src/api/sagas/users.js
+++ b/src/api/sagas/users.js
@@ -1,12 +1,12 @@
import {call, put} from "redux-saga/effects";
import {logInSucceeded} from "../../actions/auth";
-import {addToAuthorizationStore, addToSimulationStore, addToUserStore} from "../../actions/object-stores";
+import {addToAuthorizationStore} from "../../actions/objects";
import {fetchAuthorizationsOfCurrentUserSucceeded} from "../../actions/users";
import {performTokenSignIn} from "../routes/auth";
-import {getSimulation} from "../routes/simulations";
-import {addUser, getAuthorizationsByUser, getUser} from "../routes/users";
+import {addUser, getAuthorizationsByUser} from "../routes/users";
+import {fetchAndStoreSimulation, fetchAndStoreUser} from "./objects";
-export function* fetchLoggedInUser(action) {
+export function* onFetchLoggedInUser(action) {
try {
const tokenResponse = yield call(performTokenSignIn, action.payload.authToken);
let userId = tokenResponse.userId;
@@ -22,18 +22,15 @@ export function* fetchLoggedInUser(action) {
}
}
-export function* fetchAuthorizationsOfCurrentUser(action) {
+export function* onFetchAuthorizationsOfCurrentUser(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));
+ yield fetchAndStoreSimulation(authorization.simulationId);
+ yield fetchAndStoreUser(authorization.userId);
}
const authorizationIds = authorizations.map(authorization => (