refactor: натравил форматтер на весь фронт

This commit is contained in:
2026-05-25 02:06:11 +03:00
parent 24df65a13c
commit 98aaa86ec4
43 changed files with 1947 additions and 657 deletions
+2 -1
View File
@@ -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
+25 -14
View File
@@ -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
View File
@@ -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,