167 lines
5.8 KiB
JavaScript
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 }),
|
|
}))
|