modified: serv_nginx/bbvue/src/stores/user.js

add export useStore
This commit is contained in:
2025-10-20 21:25:46 +05:00
parent ca22f1cbcb
commit d1d6361c91
+37 -34
View File
@@ -16,11 +16,11 @@ export const useUserStore = defineStore('user', () => {
const error = ref('') const error = ref('')
// Getters // Getters
const completedAchievements = computed(() => const completedAchievements = computed(() =>
userAchievements.value.filter(achievement => achievement.verified || achievement.achieved) userAchievements.value.filter(achievement => achievement.verified || achievement.achieved)
) )
const pendingAchievements = computed(() => const pendingAchievements = computed(() =>
userAchievements.value.filter(achievement => !(achievement.verified || achievement.achieved)) userAchievements.value.filter(achievement => !(achievement.verified || achievement.achieved))
) )
@@ -29,19 +29,19 @@ export const useUserStore = defineStore('user', () => {
return Math.round((completedAchievements.value.length / userAchievements.value.length) * 100) return Math.round((completedAchievements.value.length / userAchievements.value.length) * 100)
}) })
const verifiedPersonalBests = computed(() => const verifiedPersonalBests = computed(() =>
personalBests.value.filter(best => best.verified) personalBests.value.filter(best => best.verified)
) )
const confirmedEvents = computed(() => const confirmedEvents = computed(() =>
upcomingEvents.value.filter(event => event.registrationStatus === 'confirmed') upcomingEvents.value.filter(event => event.registrationStatus === 'confirmed')
) )
const totalWorkouts = computed(() => const totalWorkouts = computed(() =>
userStats.value?.workoutsCount || workoutHistory.value.length userStats.value?.workoutsCount || workoutHistory.value.length
) )
const totalCalories = computed(() => const totalCalories = computed(() =>
workoutHistory.value.reduce((sum, workout) => sum + (workout.calories || 0), 0) workoutHistory.value.reduce((sum, workout) => sum + (workout.calories || 0), 0)
) )
@@ -102,46 +102,46 @@ export const useUserStore = defineStore('user', () => {
} catch (error) { } catch (error) {
console.warn('Achievements endpoint not available, using mock data', error) console.warn('Achievements endpoint not available, using mock data', error)
userAchievements.value = [ userAchievements.value = [
{ {
id: 1, id: 1,
type: 'distance', type: 'distance',
title: 'Первый забег', title: 'Первый забег',
description: 'Пробежать первую 5км', description: 'Пробежать первую 5км',
verified: true, verified: true,
date: '2024-01-20', date: '2024-01-20',
badgeImage: '/badges/first-run.png' badgeImage: '/badges/first-run.png'
}, },
{ {
id: 2, id: 2,
type: 'consistency', type: 'consistency',
title: 'Неделя тренировок', title: 'Неделя тренировок',
description: 'Тренироваться 7 дней подряд', description: 'Тренироваться 7 дней подряд',
verified: true, verified: true,
date: '2024-02-15', date: '2024-02-15',
badgeImage: '/badges/week-streak.png' badgeImage: '/badges/week-streak.png'
}, },
{ {
id: 3, id: 3,
type: 'distance', type: 'distance',
title: '100 км', title: '100 км',
description: 'Пробежать 100 км', description: 'Пробежать 100 км',
verified: true, verified: true,
date: '2024-03-01', date: '2024-03-01',
badgeImage: '/badges/100km.png' badgeImage: '/badges/100km.png'
}, },
{ {
id: 4, id: 4,
type: 'distance', type: 'distance',
title: 'Полумарафон', title: 'Полумарафон',
description: 'Пробежать 21.1 км', description: 'Пробежать 21.1 км',
verified: false, verified: false,
badgeImage: '/badges/half-marathon.png' badgeImage: '/badges/half-marathon.png'
}, },
{ {
id: 5, id: 5,
type: 'speed', type: 'speed',
title: 'Скорость', title: 'Скорость',
description: 'Пробежать 5км быстрее 25 минут', description: 'Пробежать 5км быстрее 25 минут',
verified: false, verified: false,
badgeImage: '/badges/speedster.png' badgeImage: '/badges/speedster.png'
} }
@@ -152,7 +152,7 @@ export const useUserStore = defineStore('user', () => {
} }
// Новые actions для дополнительных данных // Новые actions для дополнительных данных
const fetchPersonalBests = async () => { const fetchPersonalBests = async () => {
return withStoreLoading(async () => { return withStoreLoading(async () => {
try { try {
const response = await apiClient.get('/user/personal-bests') const response = await apiClient.get('/user/personal-bests')
@@ -353,7 +353,7 @@ export const useUserStore = defineStore('user', () => {
workoutHistory, workoutHistory,
loading, loading,
error, error,
// Getters // Getters
completedAchievements, completedAchievements,
pendingAchievements, pendingAchievements,
@@ -362,7 +362,7 @@ export const useUserStore = defineStore('user', () => {
confirmedEvents, confirmedEvents,
totalWorkouts, totalWorkouts,
totalCalories, totalCalories,
// Actions // Actions
fetchUserStats, fetchUserStats,
fetchUserAchievements, fetchUserAchievements,
@@ -376,4 +376,7 @@ export const useUserStore = defineStore('user', () => {
completeWorkout, completeWorkout,
resetUserStore resetUserStore
} }
}) })
export const userStore = useUserStore