drinkingvideogames/mixer

View on GitHub
src/sagas/user.js

Summary

Maintainability
A
3 hrs
Test Coverage
import { put } from 'redux-saga/effects'
import { userActions, errorActions } from '../actions'
 
Function `makeUserSagas` has 58 lines of code (exceeds 25 allowed). Consider refactoring.
Function `makeUserSagas` has a Cognitive Complexity of 10 (exceeds 5 allowed). Consider refactoring.
export default function makeUserSagas (app) {
function performLogin (app, action) {
if (!action.payload.strategy) {
action.payload.strategy = 'local'
}
return app.authenticate(action.payload)
.then(response => app.passport.verifyJWT(response.accessToken))
.then(payload => app.service('users').get(payload.userId))
}
 
function* login (action) {
try {
const user = yield performLogin(app, action)
yield put(userActions.login(user))
} catch (e) {
console.error(e)
yield put(errorActions.userLogin(e))
}
}
 
function* register (action) {
try {
const loginAction = yield app.service('users').create(action.payload)
.then((data) => {
return { payload: { email: data.email, password: action.payload.password } }
})
const loggedInUser = yield performLogin(app, loginAction)
yield put(userActions.login(loggedInUser))
} catch (e) {
console.error(e)
yield put(errorActions.userRegister(e))
}
}
 
function* logout (action) {
try {
yield app.logout()
yield put(userActions.logout())
} catch (e) {
console.error(e)
yield put(errorActions.userLogout(e))
}
}
 
function* loadAll (action) {
try {
const users = yield app.service('users').find().then((users) => {
return users.data.map((user) => (
{ email: user.email, verified: user.verified }
))
})
yield put(userActions.loadAll(users))
} catch (e) {
console.error(e)
yield put(errorActions.usersLoad(e))
}
}
 
return {
login,
register,
logout,
loadAll
}
}