init
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { getDashboard, getNextSmokeTime } from '@/api/smoke'
|
||||
|
||||
export const useDashboardStore = defineStore('dashboard', {
|
||||
state: () => ({
|
||||
todayCount: 0,
|
||||
minutesSinceLast: 0,
|
||||
weekly: [],
|
||||
nextSmokeTime: null,
|
||||
lastFetchTime: 0,
|
||||
cacheExpiry: 30 * 1000,
|
||||
loading: false
|
||||
}),
|
||||
|
||||
getters: {
|
||||
isCacheValid: (state) => {
|
||||
return Date.now() - state.lastFetchTime < state.cacheExpiry
|
||||
}
|
||||
},
|
||||
|
||||
actions: {
|
||||
async fetchDashboard(forceRefresh = false) {
|
||||
if (!forceRefresh && this.isCacheValid) {
|
||||
return
|
||||
}
|
||||
|
||||
this.loading = true
|
||||
try {
|
||||
const res = await getDashboard()
|
||||
this.todayCount = res.data.today_count || 0
|
||||
this.minutesSinceLast = res.data.minutes_since_last || 0
|
||||
this.weekly = res.data.weekly || []
|
||||
this.lastFetchTime = Date.now()
|
||||
} catch (e) {
|
||||
console.error('fetchDashboard error:', e)
|
||||
throw e
|
||||
} finally {
|
||||
this.loading = false
|
||||
}
|
||||
},
|
||||
|
||||
async fetchNextSmokeTime() {
|
||||
try {
|
||||
const res = await getNextSmokeTime()
|
||||
this.nextSmokeTime = res.data
|
||||
return res.data
|
||||
} catch (e) {
|
||||
console.error('fetchNextSmokeTime error:', e)
|
||||
throw e
|
||||
}
|
||||
},
|
||||
|
||||
setDashboard(data) {
|
||||
this.todayCount = data.today_count || 0
|
||||
this.minutesSinceLast = data.minutes_since_last || 0
|
||||
this.weekly = data.weekly || []
|
||||
this.lastFetchTime = Date.now()
|
||||
},
|
||||
|
||||
setNextSmokeTime(data) {
|
||||
this.nextSmokeTime = data
|
||||
},
|
||||
|
||||
incrementTodayCount() {
|
||||
this.todayCount++
|
||||
},
|
||||
|
||||
resetTimer() {
|
||||
this.minutesSinceLast = 0
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,9 @@
|
||||
import { createPinia } from 'pinia'
|
||||
|
||||
const pinia = createPinia()
|
||||
|
||||
export default pinia
|
||||
|
||||
export * from './user'
|
||||
export * from './dashboard'
|
||||
export * from './profile'
|
||||
@@ -0,0 +1,53 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { storage, PROFILE_KEY } from '@/utils/storage'
|
||||
import { getProfile, updateProfile } from '@/api/profile'
|
||||
|
||||
export const useProfileStore = defineStore('profile', {
|
||||
state: () => ({
|
||||
exists: false,
|
||||
isCompleted: false,
|
||||
profile: storage.get(PROFILE_KEY),
|
||||
awakeMinutes: 960,
|
||||
baselineIntervalMinutes: 60
|
||||
}),
|
||||
|
||||
getters: {
|
||||
needOnboarding: (state) => !state.exists || !state.isCompleted
|
||||
},
|
||||
|
||||
actions: {
|
||||
async fetchProfile() {
|
||||
try {
|
||||
const res = await getProfile()
|
||||
this.exists = res.data.exists
|
||||
this.isCompleted = res.data.is_completed
|
||||
this.awakeMinutes = res.data.awake_minutes || 960
|
||||
this.baselineIntervalMinutes = res.data.baseline_interval_minutes || 60
|
||||
|
||||
if (res.data.profile) {
|
||||
this.profile = res.data.profile
|
||||
storage.set(PROFILE_KEY, res.data.profile)
|
||||
}
|
||||
|
||||
return res.data
|
||||
} catch (e) {
|
||||
console.error('fetchProfile error:', e)
|
||||
throw e
|
||||
}
|
||||
},
|
||||
|
||||
async saveProfile(data) {
|
||||
try {
|
||||
const res = await updateProfile(data)
|
||||
this.exists = res.data.exists
|
||||
this.isCompleted = res.data.is_completed
|
||||
this.profile = res.data.profile
|
||||
storage.set(PROFILE_KEY, res.data.profile)
|
||||
return res.data
|
||||
} catch (e) {
|
||||
console.error('saveProfile error:', e)
|
||||
throw e
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,28 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import { storage, USER_KEY, SESSION_KEY } from '@/utils/storage'
|
||||
|
||||
export const useUserStore = defineStore('user', {
|
||||
state: () => ({
|
||||
user: storage.get(USER_KEY),
|
||||
sessionKey: storage.get(SESSION_KEY),
|
||||
isLoggedIn: !!storage.get(SESSION_KEY)
|
||||
}),
|
||||
|
||||
actions: {
|
||||
setUser(user, sessionKey) {
|
||||
this.user = user
|
||||
this.sessionKey = sessionKey
|
||||
this.isLoggedIn = true
|
||||
storage.set(USER_KEY, user)
|
||||
storage.set(SESSION_KEY, sessionKey)
|
||||
},
|
||||
|
||||
logout() {
|
||||
this.user = null
|
||||
this.sessionKey = null
|
||||
this.isLoggedIn = false
|
||||
storage.remove(USER_KEY)
|
||||
storage.remove(SESSION_KEY)
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user