import { OK, CREATED, UNPROCESSABLE_ENTITY } from '../util'
const state = {
user: null,
apiStatus: null,
loginErrorMessages: null,
registerErrorMessages: null
}
/**
* ゲッターの定義
* storeを参照できる
*/
const getters = {
check: state => !!state.user,
username: state => state.user ? state.user.name : '',
}
/**
* ミューテーションの登録
* Vuex のストアの状態を変更できる唯一の方法は、
* ミューテーションをコミットすること
*/
const mutations = {
setUser(state, user) {
state.user = user
},
setApiStatus(state, status) {
state.apiStatus = status
},
setLoginErrorMessages(state, messages) {
state.loginErrorMessages = messages
},
setRegisterErrorMessages(state, messages) {
state.registerErrorMessages = messages
}
}
/**
* アクションの登録
*/
const actions = {
// 会員登録系
async register(context, data) {
// context.commit('setApiStatus', null):引数はtypeと値
context.commit('setApiStatus', null)
// サーバに対してAPI要求
const response = await axios.post('/api/register', data)
// サーバのレスポンス情報で処理を分けている
if (response.status === CREATED) {
context.commit('setApiStatus', true)
context.commit('setUser', response.data)
return false
}
context.commit('setApiStatus', false)
if (response.status === UNPROCESSABLE_ENTITY) {
context.commit('setRegisterErrorMessages', response.data.errors)
} else {
context.commit('error/setCode', response.status, { root: true })
}
},
// ログイン系
async login(context, data) {
context.commit('setApiStatus', null)
const response = await axios.post('/api/login', data)
if (response.status === OK) {
context.commit('setApiStatus', true)
context.commit('setUser', response.data)
return false
}
context.commit('setApiStatus', false)
if (response.status === UNPROCESSABLE_ENTITY) {
context.commit('setLoginErrorMessages', response.data.errors)
} else {
context.commit('error/setCode', response.status, { root: true })
}
},
// ログアウト
async logout(context) {
context.commit('setApiStatus', null)
const response = await axios.post('/api/logout')
if (response.status === OK) {
context.commit('setApiStatus', true)
context.commit('setUser', null)
return false
}
context.commit('setApiStatus', false)
context.commit('error/setCode', response.status, { root: true })
},
// ログインユーザーチェック
async currentUser(context) {
context.commit('setApiStatus', null)
const response = await axios.get('/api/user')
const user = response.data || null
if (response.status === OK) {
context.commit('setApiStatus', true)
context.commit('setUser', user)
return false
}
context.commit('setApiStatus', false)
context.commit('error/setCode', response.status, { root: true })
}
}
export default {
namespaced: true,
state,
getters,
mutations,
actions
}
// ログイン系
async login(context, data) {
context.commit('setApiStatus', null)
const response = await axios.post('/api/login', data)
if (response.status === OK) {
context.commit('setApiStatus', true)
context.commit('setUser', response.data)
return false
}
context.commit('setApiStatus', false)
if (response.status === UNPROCESSABLE_ENTITY) {
context.commit('setLoginErrorMessages', response.data.errors)
} else {
context.commit('error/setCode', response.status, { root: true })
}
},