refactor: натравил форматтер на весь фронт
This commit is contained in:
@@ -114,7 +114,8 @@ export const useAuthStore = defineStore('auth', () => {
|
||||
return true
|
||||
} catch (err) {
|
||||
clearSession()
|
||||
error.value = err instanceof Error ? err.message : 'Не удалось получить пользователя после входа.'
|
||||
error.value =
|
||||
err instanceof Error ? err.message : 'Не удалось получить пользователя после входа.'
|
||||
throw err
|
||||
} finally {
|
||||
loading.value = false
|
||||
|
||||
@@ -15,7 +15,7 @@ export const useLecturesStore = defineStore('lectures', () => {
|
||||
const all = computed(() => lectures.value)
|
||||
const registeredIds = computed(() => registered.value)
|
||||
const registeredLectures = computed(() =>
|
||||
lectures.value.filter(l => registered.value.includes(l.id) || l.registered),
|
||||
lectures.value.filter((l) => registered.value.includes(l.id) || l.registered),
|
||||
)
|
||||
|
||||
async function fetchLectures(query: LectureQuery = {}) {
|
||||
@@ -24,7 +24,7 @@ export const useLecturesStore = defineStore('lectures', () => {
|
||||
try {
|
||||
const payload = await lecturesApi.list({ PageSize: 100, ...query })
|
||||
lectures.value = payload.map(mapApiLecture)
|
||||
registered.value = lectures.value.filter(l => l.registered).map(l => l.id)
|
||||
registered.value = lectures.value.filter((l) => l.registered).map((l) => l.id)
|
||||
} catch (err) {
|
||||
error.value = err instanceof Error ? err.message : 'Не удалось загрузить лекции.'
|
||||
} finally {
|
||||
@@ -36,14 +36,15 @@ export const useLecturesStore = defineStore('lectures', () => {
|
||||
error.value = null
|
||||
try {
|
||||
const lecture = mapApiLecture(await lecturesApi.get(id))
|
||||
const index = lectures.value.findIndex(item => item.id === lecture.id)
|
||||
const index = lectures.value.findIndex((item) => item.id === lecture.id)
|
||||
if (index >= 0) lectures.value[index] = lecture
|
||||
else lectures.value.push(lecture)
|
||||
if (lecture.registered && !registered.value.includes(lecture.id)) registered.value.push(lecture.id)
|
||||
if (lecture.registered && !registered.value.includes(lecture.id))
|
||||
registered.value.push(lecture.id)
|
||||
return lecture
|
||||
} catch (err) {
|
||||
error.value = err instanceof Error ? err.message : 'Не удалось загрузить лекцию.'
|
||||
return lectures.value.find(item => item.id === id)
|
||||
return lectures.value.find((item) => item.id === id)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,11 +52,12 @@ export const useLecturesStore = defineStore('lectures', () => {
|
||||
try {
|
||||
const enrollments = await usersApi.myEnrollments()
|
||||
const mapped = enrollments.map(mapApiLecture)
|
||||
registered.value = mapped.map(lecture => lecture.id)
|
||||
registered.value = mapped.map((lecture) => lecture.id)
|
||||
if (mapped.length) {
|
||||
mapped.forEach(lecture => {
|
||||
const index = lectures.value.findIndex(item => item.id === lecture.id)
|
||||
if (index >= 0) lectures.value[index] = { ...lectures.value[index], ...lecture, registered: true }
|
||||
mapped.forEach((lecture) => {
|
||||
const index = lectures.value.findIndex((item) => item.id === lecture.id)
|
||||
if (index >= 0)
|
||||
lectures.value[index] = { ...lectures.value[index], ...lecture, registered: true }
|
||||
else lectures.value.push({ ...lecture, registered: true })
|
||||
})
|
||||
}
|
||||
@@ -65,8 +67,14 @@ export const useLecturesStore = defineStore('lectures', () => {
|
||||
}
|
||||
|
||||
async function register(lectureId: string) {
|
||||
const lecture = lectures.value.find(item => item.id === lectureId)
|
||||
if (!lecture || lecture.freeSeats === 0 || lecture.registrationClosed || registered.value.includes(lectureId)) return
|
||||
const lecture = lectures.value.find((item) => item.id === lectureId)
|
||||
if (
|
||||
!lecture ||
|
||||
lecture.freeSeats === 0 ||
|
||||
lecture.registrationClosed ||
|
||||
registered.value.includes(lectureId)
|
||||
)
|
||||
return
|
||||
const userStore = useUserStore()
|
||||
if (!userStore.hasEnrollmentSlotAvailable) {
|
||||
throw new Error('Лимит записей достигнут. Отмените одну из записей или повысьте уровень.')
|
||||
@@ -84,8 +92,8 @@ export const useLecturesStore = defineStore('lectures', () => {
|
||||
async function unregister(lectureId: string) {
|
||||
await lecturesApi.unenroll(lectureId)
|
||||
const userStore = useUserStore()
|
||||
registered.value = registered.value.filter(id => id !== lectureId)
|
||||
const lecture = lectures.value.find(item => item.id === lectureId)
|
||||
registered.value = registered.value.filter((id) => id !== lectureId)
|
||||
const lecture = lectures.value.find((item) => item.id === lectureId)
|
||||
if (lecture) {
|
||||
lecture.freeSeats = Math.min(lecture.freeSeats + 1, lecture.totalSeats)
|
||||
lecture.enrolledSeats = Math.max(lecture.enrolledSeats - 1, 0)
|
||||
@@ -96,7 +104,10 @@ export const useLecturesStore = defineStore('lectures', () => {
|
||||
}
|
||||
|
||||
function isRegistered(lectureId: string) {
|
||||
return registered.value.includes(lectureId) || Boolean(lectures.value.find(item => item.id === lectureId)?.registered)
|
||||
return (
|
||||
registered.value.includes(lectureId) ||
|
||||
Boolean(lectures.value.find((item) => item.id === lectureId)?.registered)
|
||||
)
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
+16
-12
@@ -14,8 +14,8 @@ export const useUserStore = defineStore('user', () => {
|
||||
const error = ref<string | null>(null)
|
||||
const activeEnrollments = computed(() => useAuthStore().user?.activeEnrollments ?? 0)
|
||||
const enrollmentSlotLimit = computed(() => useAuthStore().user?.enrollmentSlotLimit ?? 0)
|
||||
const hasEnrollmentSlotAvailable = computed(() =>
|
||||
enrollmentSlotLimit.value === 0 || activeEnrollments.value < enrollmentSlotLimit.value
|
||||
const hasEnrollmentSlotAvailable = computed(
|
||||
() => enrollmentSlotLimit.value === 0 || activeEnrollments.value < enrollmentSlotLimit.value,
|
||||
)
|
||||
|
||||
function applyStats(stats: UserStatsDto) {
|
||||
@@ -31,7 +31,9 @@ export const useUserStore = defineStore('user', () => {
|
||||
nextLevelXp: stats.nextLevelXp,
|
||||
lecturesAttended: stats.attendedLectures,
|
||||
hoursLearned: Math.round(stats.attendedLectures * 1.5 * 10) / 10,
|
||||
achievements: Array.from({ length: stats.achievementsCount }, (_, index) => String(index + 1)),
|
||||
achievements: Array.from({ length: stats.achievementsCount }, (_, index) =>
|
||||
String(index + 1),
|
||||
),
|
||||
activeEnrollments: stats.activeEnrollments,
|
||||
enrollmentSlotLimit: stats.enrollmentSlotLimit,
|
||||
enrollmentSlotRules: stats.enrollmentSlotRules,
|
||||
@@ -78,18 +80,20 @@ export const useUserStore = defineStore('user', () => {
|
||||
])
|
||||
|
||||
applyStats(stats)
|
||||
const unlocked = new Map(achievementPayload.map(item => {
|
||||
const achievement = mapApiAchievement(item)
|
||||
return [achievement.id, achievement]
|
||||
}))
|
||||
const catalogIds = new Set(achievementCatalog.map(item => String(item.id)))
|
||||
const lockedAndUnlocked = achievementCatalog.map(item => {
|
||||
const unlocked = new Map(
|
||||
achievementPayload.map((item) => {
|
||||
const achievement = mapApiAchievement(item)
|
||||
return [achievement.id, achievement]
|
||||
}),
|
||||
)
|
||||
const catalogIds = new Set(achievementCatalog.map((item) => String(item.id)))
|
||||
const lockedAndUnlocked = achievementCatalog.map((item) => {
|
||||
const achievement = mapApiAchievement(item)
|
||||
return unlocked.get(achievement.id) ?? achievement
|
||||
})
|
||||
const unlockedOutsideCatalog = achievementPayload
|
||||
.map(mapApiAchievement)
|
||||
.filter(item => !catalogIds.has(item.id))
|
||||
.filter((item) => !catalogIds.has(item.id))
|
||||
|
||||
achievements.value = [...lockedAndUnlocked, ...unlockedOutsideCatalog].sort(
|
||||
(a, b) => Number(a.id) - Number(b.id),
|
||||
@@ -110,10 +114,10 @@ export const useUserStore = defineStore('user', () => {
|
||||
|
||||
async function markAllRead() {
|
||||
await notificationsApi.markAllRead()
|
||||
notifications.value.forEach(n => (n.read = true))
|
||||
notifications.value.forEach((n) => (n.read = true))
|
||||
}
|
||||
|
||||
const unreadCount = () => notifications.value.filter(n => !n.read).length
|
||||
const unreadCount = () => notifications.value.filter((n) => !n.read).length
|
||||
|
||||
return {
|
||||
achievements,
|
||||
|
||||
Reference in New Issue
Block a user