Scalable IoT solution for real-time body position data
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

151 lines
3.8 KiB

import {Action, Module, Mutation, VuexModule} from 'vuex-module-decorators'
import axios, {AxiosResponse} from "axios";
import qs from "qs";
export interface UserInterface {
_id: string,
username: string,
email: string,
password: string,
registered: Date,
lastLogin: Date,
}
@Module
export default class User extends VuexModule {
private user = <UserInterface>{};
private userStatus = false;
private err = <Error>{};
get user_current() {
return this.user;
}
get user_loggedIn() {
return this.userStatus;
}
get user_err() {
return this.err;
}
@Mutation
private auth_success(user: UserInterface) {
this.user = user;
this.userStatus = true;
}
@Mutation
private auth_error(err: Error) {
this.userStatus = false;
this.err = err;
}
@Mutation
private auth_logout() {
this.user = <UserInterface>{};
this.userStatus = false;
}
@Mutation
private update_err(err: Error) {
this.err = err;
}
@Mutation
private update_user(user: UserInterface) {
this.user = user;
}
@Action
private user_login(user: UserInterface) {
return new Promise((resolve, reject) => {
axios({
method: 'POST',
url: '/auth/login',
data: qs.stringify({...user})
})
.then((resp: AxiosResponse) => {
this.context.commit('auth_success', resp.data.user);
resolve(resp);
})
.catch((err: Error) => {
this.context.commit('auth_error', err);
reject(err);
});
});
}
@Action
private user_logout() {
return new Promise((resolve, reject) => {
axios({
method: 'POST',
url: '/auth/logout'
})
.then((resp: AxiosResponse) => {
this.context.commit('auth_logout');
this.context.commit('athlete_logout');
resolve(resp);
})
.catch((err: Error) => {
reject(err);
});
});
}
@Action
private user_currentSession() {
return new Promise((resolve, reject) => {
axios({
method: 'GET',
url: '/auth/current_user'
})
.then((resp: AxiosResponse) => {
this.context.commit('auth_success', resp.data);
resolve(resp);
})
.catch((err: Error) => {
this.context.commit('auth_error')
reject(err);
});
});
}
@Action
private user_update(user: UserInterface) {
return new Promise((resolve, reject) => {
axios({
method: 'PUT',
url: `/api/user/${user._id}`,
data: {...user}
})
.then((resp: AxiosResponse) => {
this.context.commit('update_user', resp.data);
resolve(resp);
})
.catch((err: Error) => {
this.context.commit('update_err', err)
reject(err);
});
});
}
@Action
private user_getOne(id: string) {
return new Promise((resolve, reject) => {
axios({
method: 'GET',
url: `/api/user/${id}`
})
.then((resp: AxiosResponse) => {
resolve(resp);
})
.catch((err: Error) => {
reject(err);
});
});
}
}