Client - init statistics store
This commit is contained in:
		@@ -3,6 +3,11 @@ import {
 | 
			
		||||
  RootGetters,
 | 
			
		||||
  RootMutations,
 | 
			
		||||
} from '@/store/modules/root/enums'
 | 
			
		||||
import {
 | 
			
		||||
  StatisticsActions,
 | 
			
		||||
  StatisticsGetters,
 | 
			
		||||
  StatisticsMutations,
 | 
			
		||||
} from '@/store/modules/statistics/enums'
 | 
			
		||||
import {
 | 
			
		||||
  UserActions,
 | 
			
		||||
  UserGetters,
 | 
			
		||||
@@ -15,6 +20,12 @@ export const ROOT_STORE = {
 | 
			
		||||
  MUTATIONS: RootMutations,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const STATS_STORE = {
 | 
			
		||||
  ACTIONS: StatisticsActions,
 | 
			
		||||
  GETTERS: StatisticsGetters,
 | 
			
		||||
  MUTATIONS: StatisticsMutations,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const USER_STORE = {
 | 
			
		||||
  ACTIONS: UserActions,
 | 
			
		||||
  GETTERS: UserGetters,
 | 
			
		||||
 
 | 
			
		||||
@@ -5,9 +5,11 @@ import { getters } from '@/store/modules/root/getters'
 | 
			
		||||
import { IRootState } from '@/store/modules/root/interfaces'
 | 
			
		||||
import { mutations } from '@/store/modules/root/mutations'
 | 
			
		||||
import { state } from '@/store/modules/root/state.ts'
 | 
			
		||||
import statsModule from '@/store/modules/statistics'
 | 
			
		||||
import userModule from '@/store/modules/user'
 | 
			
		||||
 | 
			
		||||
const modules: ModuleTree<IRootState> = {
 | 
			
		||||
  statsModule,
 | 
			
		||||
  userModule,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								fittrackee_client/src/store/modules/statistics/actions.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								fittrackee_client/src/store/modules/statistics/actions.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
import { ActionContext, ActionTree } from 'vuex'
 | 
			
		||||
 | 
			
		||||
import authApi from '@/api/authApi'
 | 
			
		||||
import { STATS_STORE, ROOT_STORE } from '@/store/constants'
 | 
			
		||||
import { IRootState } from '@/store/modules/root/interfaces'
 | 
			
		||||
import {
 | 
			
		||||
  IStatisticsActions,
 | 
			
		||||
  IStatisticsState,
 | 
			
		||||
} from '@/store/modules/statistics/interfaces'
 | 
			
		||||
import { IUserStatisticsPayload } from '@/types/statistics'
 | 
			
		||||
import { handleError } from '@/utils'
 | 
			
		||||
 | 
			
		||||
export const actions: ActionTree<IStatisticsState, IRootState> &
 | 
			
		||||
  IStatisticsActions = {
 | 
			
		||||
  [STATS_STORE.ACTIONS.GET_USER_STATS](
 | 
			
		||||
    context: ActionContext<IStatisticsState, IRootState>,
 | 
			
		||||
    payload: IUserStatisticsPayload
 | 
			
		||||
  ): void {
 | 
			
		||||
    context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)
 | 
			
		||||
    authApi
 | 
			
		||||
      .get(`stats/${payload.username}/${payload.filterType}`, {
 | 
			
		||||
        params: payload.params,
 | 
			
		||||
      })
 | 
			
		||||
      .then((res) => {
 | 
			
		||||
        if (res.data.status === 'success') {
 | 
			
		||||
          context.commit(
 | 
			
		||||
            STATS_STORE.MUTATIONS.UPDATE_USER_STATS,
 | 
			
		||||
            res.data.data.statistics
 | 
			
		||||
          )
 | 
			
		||||
        } else {
 | 
			
		||||
          handleError(context, null)
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      .catch((error) => handleError(context, error))
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								fittrackee_client/src/store/modules/statistics/enums.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								fittrackee_client/src/store/modules/statistics/enums.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
export enum StatisticsActions {
 | 
			
		||||
  GET_USER_STATS = 'GET_USER_STATS',
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export enum StatisticsGetters {
 | 
			
		||||
  USER_STATS = 'USER_STATS',
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export enum StatisticsMutations {
 | 
			
		||||
  UPDATE_USER_STATS = 'UPDATE_USER_STATS',
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								fittrackee_client/src/store/modules/statistics/getters.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								fittrackee_client/src/store/modules/statistics/getters.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
import { GetterTree } from 'vuex'
 | 
			
		||||
 | 
			
		||||
import { STATS_STORE } from '@/store/constants'
 | 
			
		||||
import { IRootState } from '@/store/modules/root/interfaces'
 | 
			
		||||
import {
 | 
			
		||||
  IStatisticsGetters,
 | 
			
		||||
  IStatisticsState,
 | 
			
		||||
} from '@/store/modules/statistics/interfaces'
 | 
			
		||||
 | 
			
		||||
export const getters: GetterTree<IStatisticsState, IRootState> &
 | 
			
		||||
  IStatisticsGetters = {
 | 
			
		||||
  [STATS_STORE.GETTERS.USER_STATS]: (state: IStatisticsState) => {
 | 
			
		||||
    return state.statistics
 | 
			
		||||
  },
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										17
									
								
								fittrackee_client/src/store/modules/statistics/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								fittrackee_client/src/store/modules/statistics/index.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
import { Module } from 'vuex'
 | 
			
		||||
 | 
			
		||||
import { IRootState } from '@/store/modules/root/interfaces'
 | 
			
		||||
import { actions } from '@/store/modules/statistics/actions'
 | 
			
		||||
import { getters } from '@/store/modules/statistics/getters'
 | 
			
		||||
import { IStatisticsState } from '@/store/modules/statistics/interfaces'
 | 
			
		||||
import { mutations } from '@/store/modules/statistics/mutations'
 | 
			
		||||
import { statisticsState } from '@/store/modules/statistics/state'
 | 
			
		||||
 | 
			
		||||
const statistics: Module<IStatisticsState, IRootState> = {
 | 
			
		||||
  state: statisticsState,
 | 
			
		||||
  actions,
 | 
			
		||||
  getters,
 | 
			
		||||
  mutations,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default statistics
 | 
			
		||||
							
								
								
									
										20
									
								
								fittrackee_client/src/store/modules/statistics/interfaces.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								fittrackee_client/src/store/modules/statistics/interfaces.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
import { ActionContext } from 'vuex'
 | 
			
		||||
 | 
			
		||||
import { STATS_STORE } from '@/store/constants'
 | 
			
		||||
import { IRootState } from '@/store/modules/root/interfaces'
 | 
			
		||||
import { IUserStatisticsPayload, TStatistics } from '@/types/statistics'
 | 
			
		||||
 | 
			
		||||
export interface IStatisticsState {
 | 
			
		||||
  statistics: TStatistics
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface IStatisticsActions {
 | 
			
		||||
  [STATS_STORE.ACTIONS.GET_USER_STATS](
 | 
			
		||||
    context: ActionContext<IStatisticsState, IRootState>,
 | 
			
		||||
    payload: IUserStatisticsPayload
 | 
			
		||||
  ): void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface IStatisticsGetters {
 | 
			
		||||
  [STATS_STORE.GETTERS.USER_STATS](state: IStatisticsState): TStatistics
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								fittrackee_client/src/store/modules/statistics/mutations.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								fittrackee_client/src/store/modules/statistics/mutations.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
import { MutationTree } from 'vuex'
 | 
			
		||||
 | 
			
		||||
import { STATS_STORE } from '@/store/constants'
 | 
			
		||||
import { IStatisticsState } from '@/store/modules/statistics/interfaces'
 | 
			
		||||
import { TStatisticsMutations } from '@/store/modules/statistics/types'
 | 
			
		||||
import { TStatistics } from '@/types/statistics'
 | 
			
		||||
 | 
			
		||||
export const mutations: MutationTree<IStatisticsState> & TStatisticsMutations =
 | 
			
		||||
  {
 | 
			
		||||
    [STATS_STORE.MUTATIONS.UPDATE_USER_STATS](
 | 
			
		||||
      state: IStatisticsState,
 | 
			
		||||
      statistics: TStatistics
 | 
			
		||||
    ) {
 | 
			
		||||
      state.statistics = statistics
 | 
			
		||||
    },
 | 
			
		||||
  }
 | 
			
		||||
							
								
								
									
										6
									
								
								fittrackee_client/src/store/modules/statistics/state.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								fittrackee_client/src/store/modules/statistics/state.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
import { IStatisticsState } from '@/store/modules/statistics/interfaces'
 | 
			
		||||
import { TStatistics } from '@/types/statistics'
 | 
			
		||||
 | 
			
		||||
export const statisticsState: IStatisticsState = {
 | 
			
		||||
  statistics: <TStatistics>{},
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								fittrackee_client/src/store/modules/statistics/types.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								fittrackee_client/src/store/modules/statistics/types.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
import { Store as VuexStore, CommitOptions, DispatchOptions } from 'vuex'
 | 
			
		||||
 | 
			
		||||
import { STATS_STORE } from '@/store/constants'
 | 
			
		||||
import {
 | 
			
		||||
  IStatisticsState,
 | 
			
		||||
  IStatisticsActions,
 | 
			
		||||
  IStatisticsGetters,
 | 
			
		||||
} from '@/store/modules/statistics/interfaces'
 | 
			
		||||
import { TStatistics } from '@/types/statistics'
 | 
			
		||||
 | 
			
		||||
export type TStatisticsMutations<S = IStatisticsState> = {
 | 
			
		||||
  [STATS_STORE.MUTATIONS.UPDATE_USER_STATS](
 | 
			
		||||
    state: S,
 | 
			
		||||
    statistics: TStatistics
 | 
			
		||||
  ): void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export type TStatisticsStoreModule<S = IStatisticsState> = Omit<
 | 
			
		||||
  VuexStore<S>,
 | 
			
		||||
  'commit' | 'getters' | 'dispatch'
 | 
			
		||||
> & {
 | 
			
		||||
  dispatch<K extends keyof IStatisticsActions>(
 | 
			
		||||
    key: K,
 | 
			
		||||
    payload?: Parameters<IStatisticsActions[K]>[1],
 | 
			
		||||
    options?: DispatchOptions
 | 
			
		||||
  ): ReturnType<IStatisticsActions[K]>
 | 
			
		||||
} & {
 | 
			
		||||
  getters: {
 | 
			
		||||
    [K in keyof IStatisticsGetters]: ReturnType<IStatisticsGetters[K]>
 | 
			
		||||
  }
 | 
			
		||||
} & {
 | 
			
		||||
  commit<
 | 
			
		||||
    K extends keyof TStatisticsMutations,
 | 
			
		||||
    P extends Parameters<TStatisticsMutations[K]>[1]
 | 
			
		||||
  >(
 | 
			
		||||
    key: K,
 | 
			
		||||
    payload?: P,
 | 
			
		||||
    options?: CommitOptions
 | 
			
		||||
  ): ReturnType<TStatisticsMutations[K]>
 | 
			
		||||
}
 | 
			
		||||
@@ -4,7 +4,6 @@ import { USER_STORE } from '@/store/constants'
 | 
			
		||||
import { IRootState } from '@/store/modules/root/interfaces'
 | 
			
		||||
import { IAuthUserProfile, ILoginOrRegisterData } from '@/types/user'
 | 
			
		||||
 | 
			
		||||
// STORE
 | 
			
		||||
export interface IUserState {
 | 
			
		||||
  authToken: string | null
 | 
			
		||||
  authUserProfile: IAuthUserProfile
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,13 @@
 | 
			
		||||
import { TRootStoreModule } from '@/store/modules/root/types'
 | 
			
		||||
import { TStatisticsStoreModule } from '@/store/modules/statistics/types'
 | 
			
		||||
import { TUserStoreModule } from '@/store/modules/user/types'
 | 
			
		||||
 | 
			
		||||
type StoreModules = {
 | 
			
		||||
  rootModule: TRootStoreModule
 | 
			
		||||
  statsModule: TStatisticsStoreModule
 | 
			
		||||
  userModule: TUserStoreModule
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export type Store = TUserStoreModule<Pick<StoreModules, 'userModule'>> &
 | 
			
		||||
  TStatisticsStoreModule<Pick<StoreModules, 'statsModule'>> &
 | 
			
		||||
  TRootStoreModule<Pick<StoreModules, 'rootModule'>>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								fittrackee_client/src/types/statistics.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								fittrackee_client/src/types/statistics.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
export interface IStatistics {
 | 
			
		||||
  nb_workouts: number
 | 
			
		||||
  total_distance: number
 | 
			
		||||
  total_duration: number
 | 
			
		||||
}
 | 
			
		||||
export type TStatistics = {
 | 
			
		||||
  [key in string | number]: IStatistics
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface IStatisticsParams {
 | 
			
		||||
  from: string
 | 
			
		||||
  to: string
 | 
			
		||||
  time: string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface IUserStatisticsPayload {
 | 
			
		||||
  username: string
 | 
			
		||||
  filterType: string
 | 
			
		||||
  params: IStatisticsParams
 | 
			
		||||
}
 | 
			
		||||
@@ -3,6 +3,7 @@ import { ActionContext } from 'vuex'
 | 
			
		||||
 | 
			
		||||
import { ROOT_STORE } from '@/store/constants'
 | 
			
		||||
import { IRootState } from '@/store/modules/root/interfaces'
 | 
			
		||||
import { IStatisticsState } from '@/store/modules/statistics/interfaces'
 | 
			
		||||
import { IUserState } from '@/store/modules/user/interfaces'
 | 
			
		||||
 | 
			
		||||
export const getApiUrl = (): string => {
 | 
			
		||||
@@ -17,7 +18,8 @@ const removeLastDot = (text: string): string => text.replace(/\.$/gm, '')
 | 
			
		||||
export const handleError = (
 | 
			
		||||
  context:
 | 
			
		||||
    | ActionContext<IRootState, IRootState>
 | 
			
		||||
    | ActionContext<IUserState, IRootState>,
 | 
			
		||||
    | ActionContext<IUserState, IRootState>
 | 
			
		||||
    | ActionContext<IStatisticsState, IRootState>,
 | 
			
		||||
  error: AxiosError | null,
 | 
			
		||||
  msg = 'UNKNOWN'
 | 
			
		||||
): void => {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user