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.
 
 
 
 
 

82 lines
2.0 KiB

import {Action, Module, Mutation, VuexModule} from 'vuex-module-decorators'
import axios, {AxiosResponse} from "axios";
export interface AthleteData {
measurement: Date,
pointName: string,
}
@Module
export default class Backend extends VuexModule {
private serverStatus = false;
private liveAthData: AthleteData[] = [];
get server_status() {
return this.serverStatus;
}
get server_liveData() {
return this.liveAthData;
}
@Mutation
private socket_connection(status: boolean) {
this.serverStatus = status;
}
@Mutation
private server_queueData(data: AthleteData) {
this.liveAthData.push(data);
}
@Mutation
private server_dequeueData() {
this.liveAthData.shift();
}
@Mutation
private server_logout() {
this.liveAthData = []
}
@Action
private server_saveLiveData(data: AthleteData) {
console.log(this.liveAthData);
this.context.commit('server_queueData', data);
if (this.liveAthData.length > 15)
this.context.commit('server_dequeueData');
} //Too "expensive" of an action? To be refactored.
@Action
private server_getAll() {
return new Promise((resolve, reject) => {
axios({
method: 'GET',
url: `/api/data/`
})
.then((resp: AxiosResponse) => {
resolve(resp)
})
.catch((err: Error) => {
reject(err)
});
});
}
@Action
private server_getOne(id: string) {
return new Promise((resolve, reject) => {
axios({
method: 'GET',
url: `/api/data/${id}`
})
.then((resp: AxiosResponse) => {
resolve(resp)
})
.catch((err: Error) => {
reject(err)
});
});
}
}