Files
banu-front/src/services/mock/routes/admin-courses.js
T
sajjadtalkhabi d2a577f254 first commit
2026-05-13 01:43:05 +03:30

167 lines
5.8 KiB
JavaScript

import { register } from '@/services/mock/registry'
import { endpoints } from '@/services/api/endpoints'
import { adminCourseTemplates, adminOfferedCourses } from '@/services/mock/fixtures/admin-courses'
import { adminTerms } from '@/services/mock/fixtures/admin-terms'
import { adminUsers } from '@/services/mock/fixtures/admin-users'
import {
filterDateRange,
filterItems,
findOrThrow,
isoNow,
makeId,
paginate,
removeById,
updateById,
} from '@/services/mock/helpers'
register('GET', endpoints.getCourseTemplatesList, ({ query }) => {
let list = filterItems(adminCourseTemplates, query, {
title: 'includes',
status: (item, v) => String(item.isActiveByDefault ? 1 : 0) === String(v),
})
list = filterDateRange(list, query)
return paginate(list, query)
})
register('GET', endpoints.showCourseTemplate, ({ params }) => ({
data: findOrThrow(adminCourseTemplates, params.id),
}))
register('POST', endpoints.addNewCourseTemplate, ({ data }) => {
const teacher = adminUsers.find((u) => u.id === Number(data.defaultTeacherId))
const item = {
id: makeId(),
title: data.title || '',
description: data.description || '',
image: data.imageId ? `https://picsum.photos/seed/course-${data.imageId}/200/200` : '',
defaultTeacher: teacher
? {
id: teacher.id,
firstName: teacher.firstName,
lastName: teacher.lastName,
fullName: `${teacher.firstName} ${teacher.lastName}`,
}
: null,
defaultCapacity: Number(data.defaultCapacity) || 0,
isActiveByDefault: !!data.isActiveByDefault,
prerequisitesCount: (data.prerequisites || []).length,
prerequisites: (data.prerequisites || []).map((id) => ({
courseId: id,
course: adminCourseTemplates.find((c) => c.id === Number(id)) || { id },
})),
createdAt: isoNow(),
}
adminCourseTemplates.unshift(item)
return { data: item }
})
register('PUT', endpoints.updateCourseTemplate, ({ params, data }) => {
const teacher = adminUsers.find((u) => u.id === Number(data.defaultTeacherId))
return {
data: updateById(adminCourseTemplates, params.id, {
title: data.title,
description: data.description,
image: data.imageId ? `https://picsum.photos/seed/course-${data.imageId}/200/200` : undefined,
defaultTeacher: teacher
? {
id: teacher.id,
firstName: teacher.firstName,
lastName: teacher.lastName,
fullName: `${teacher.firstName} ${teacher.lastName}`,
}
: undefined,
defaultCapacity: Number(data.defaultCapacity) || 0,
isActiveByDefault: !!data.isActiveByDefault,
prerequisites: (data.prerequisites || []).map((id) => ({
courseId: id,
course: adminCourseTemplates.find((c) => c.id === Number(id)) || { id },
})),
prerequisitesCount: (data.prerequisites || []).length,
}),
}
})
register('DELETE', endpoints.deleteCourseTemplate, ({ params }) => {
removeById(adminCourseTemplates, params.id)
return { data: { message: 'حذف موفق' } }
})
register('POST', endpoints.changeStatusCourseTemplate, ({ params, data }) => ({
data: updateById(adminCourseTemplates, params.id, {
isActiveByDefault: !!data.isActiveByDefault,
}),
}))
register('GET', endpoints.getCoursesList, ({ query }) => {
let list = filterItems(adminOfferedCourses, query, {
title: 'includes',
termId: 'eq',
status: (item, v) => String(item.isActive ? 1 : 0) === String(v),
})
list = filterDateRange(list, query, 'startDate')
return paginate(list, query)
})
register('GET', endpoints.showCourse, ({ params }) => ({
data: findOrThrow(adminOfferedCourses, params.id),
}))
register('POST', endpoints.addNewCourse, ({ data }) => {
const template = adminCourseTemplates.find((t) => t.id === Number(data.templateId))
const term = adminTerms.find((t) => t.id === Number(data.termId))
const teacher = adminUsers.find((u) => u.id === Number(data.teacherId))
const item = {
id: makeId(),
title: data.title || template?.title || '',
image: data.imageId ? `https://picsum.photos/seed/offered-${data.imageId}/200/200` : '',
template: template ? { id: template.id, title: template.title } : null,
templateId: template?.id,
term: term ? { id: term.id, title: term.title } : null,
termId: term?.id,
teacher: teacher
? {
id: teacher.id,
firstName: teacher.firstName,
lastName: teacher.lastName,
fullName: `${teacher.firstName} ${teacher.lastName}`,
}
: null,
capacity: Number(data.capacity) || 0,
isActive: !!data.isActive,
prerequisitesCount: 0,
startDate: term?.startDate || '',
endDate: term?.endDate || '',
createdAt: isoNow(),
}
adminOfferedCourses.unshift(item)
return { data: item }
})
register('PUT', endpoints.updateCourse, ({ params, data }) => {
const template = adminCourseTemplates.find((t) => t.id === Number(data.templateId))
const term = adminTerms.find((t) => t.id === Number(data.termId))
return {
data: updateById(adminOfferedCourses, params.id, {
title: data.title,
image: data.imageId
? `https://picsum.photos/seed/offered-${data.imageId}/200/200`
: undefined,
template: template ? { id: template.id, title: template.title } : undefined,
templateId: template?.id,
term: term ? { id: term.id, title: term.title } : undefined,
termId: term?.id,
capacity: Number(data.capacity) || 0,
isActive: !!data.isActive,
}),
}
})
register('DELETE', endpoints.deleteCourse, ({ params }) => {
removeById(adminOfferedCourses, params.id)
return { data: { message: 'حذف موفق' } }
})
register('POST', endpoints.changeStatusCourse, ({ params, data }) => ({
data: updateById(adminOfferedCourses, params.id, { isActive: !!data.isActive }),
}))