bullpen/app/src/store/auth.ts

103 lines
3.1 KiB
TypeScript

import AuthService from '@/services/AuthService'
import User from "@/types/User";
import {ActionContext, Module} from 'vuex';
import {RootState} from './index';
import TokenService from "@/services/TokenService";
import UserService from "@/services/UserService";
import PlayerService from "@/services/PlayerService";
import UserInfo from '@/types/UserInfo';
import Player from '@/types/Player';
export interface AuthState {
isAuthenticated: boolean;
user: User | null;
}
const user = JSON.parse(localStorage.getItem('auth') || '""');
const initialState = user
? {isAuthenticated: true, user}
: {isAuthenticated: false, user: null};
type AuthActionContext = ActionContext<AuthState, RootState>;
const auth: Module<AuthState, RootState> = {
namespaced: true,
state: initialState,
actions: {
login({commit}: AuthActionContext, user) {
return AuthService
.login(user.email, user.password)
.then(auth => {
return UserService
.fetchById(auth.id)
.then((user: User) => {
commit('loginSuccess', user);
return Promise.resolve(user);
}, error => {
commit('loginFailure');
return Promise.reject(error);
}
);
}, error => {
commit('loginFailure');
return Promise.reject(error);
}
);
},
logout({commit}: AuthActionContext) {
return AuthService.logout().then(() => {
commit('logout');
return Promise.resolve();
})
},
register({commit}: AuthActionContext, user) {
return AuthService.register(user.email, user.password).then(
response => {
commit('registerSuccess');
return Promise.resolve(response.data);
},
error => {
commit('registerFailure');
return Promise.reject(error);
}
);
},
refreshToken({commit}: AuthActionContext, accessToken) {
commit('refreshToken', accessToken);
}
},
mutations: {
loginSuccess(state, user) {
state.isAuthenticated = true;
state.user = user;
},
loginFailure(state) {
state.isAuthenticated = false;
state.user = null;
},
logout(state) {
state.isAuthenticated = false;
state.user = null;
TokenService.removeUser();
},
registerSuccess(state) {
state.isAuthenticated = false;
},
registerFailure(state) {
state.isAuthenticated = false;
},
refreshToken(state, accessToken: string) {
state.isAuthenticated = true;
TokenService.updateLocalAccessToken(accessToken);
}
},
getters: {
getUser: (state) => state.user
}
};
export default auth;