diff options
| author | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2017-08-16 22:55:16 +0300 |
|---|---|---|
| committer | Georgios Andreadis <g.andreadis@student.tudelft.nl> | 2017-09-23 10:05:42 +0200 |
| commit | 07195f3762b6a8a7dfb44c2231db58c5be13c43f (patch) | |
| tree | 2b4640457f70b55a97aff22fbe617e4b8538464a /src/api | |
| parent | 91c8088e1d7def9242f60c708cd34f25dcb77d76 (diff) | |
Rename project to sim and enable sim-adding
Diffstat (limited to 'src/api')
| -rw-r--r-- | src/api/sagas/index.js | 9 | ||||
| -rw-r--r-- | src/api/sagas/objects.js | 24 | ||||
| -rw-r--r-- | src/api/sagas/simulations.js | 21 | ||||
| -rw-r--r-- | src/api/sagas/users.js | 17 |
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 => ( |
