export interface UserInfo { userId: string; userName: string; userEmail: string; userAvatarPath: string; userAmount: string; userBirthday: string; } export class ExampleUserInfo implements UserInfo { userId = ''; userName = ''; userEmail = ''; userAvatarPath = ''; userAmount = '0'; userBirthday = ''; } export interface UserState extends UserInfo { lastGetTime: Date; usernameOrEmail: string; userAvatarUrl: string; } export const useUserStore = defineStore('User', { state: (): UserState => ({ userId: '', userName: '', userEmail: '', userAvatarPath: '', userAmount: '', userBirthday: '', lastGetTime: new Date(), usernameOrEmail: '', userAvatarUrl: '', }), actions: { async getUserInfo() { const { $http } = useNuxtApp(); try { const res = await $http.GET('/user/info'); this.userId = res.data.userId; this.userName = res.data.userName; this.userEmail = res.data.userEmail; this.userAvatarPath = res.data.userAvatarPath; this.userAmount = res.data.userAmount; this.userBirthday = res.data.userBirthday; this.lastGetTime = new Date(); } catch (error) { console.error('Error fetching user info:', error); } }, async getAvatarURL() { const now = new Date(); console.log('Current time:', now); if ( this.userAvatarUrl !== '' && now.getTime() - this.lastGetTime.getTime() < 1000 * 60 * 9 ) { console.log('Using cached avatar URL'); console.log('Cached avatar URL:', this.userAvatarUrl); return this.userAvatarUrl; } console.log('Fetching new avatar URL'); this.lastGetTime = now; const { $http } = useNuxtApp(); try { const res = await $http.GET('/user/avatar'); this.userAvatarUrl = res.data; console.log('User avatar URL:', this.userAvatarUrl); return this.userAvatarUrl; } catch (error) { console.error('Error fetching user avatar:', error); } }, }, });