fix
This commit is contained in:
@@ -7,17 +7,20 @@ export const apiShowAdminAssignment = (id) => http.get(buildUrl(endpoints.showAs
|
||||
|
||||
export const apiAddAdminAssignment = (payload) => http.post(endpoints.addNewAssignment, payload)
|
||||
|
||||
// Backend uses PATCH /homeworks/:id (not PUT).
|
||||
export const apiUpdateAdminAssignment = (id, payload) =>
|
||||
http.put(buildUrl(endpoints.updateAssignment, { id }), payload)
|
||||
http.patch(buildUrl(endpoints.updateAssignment, { id }), payload)
|
||||
|
||||
export const apiDeleteAdminAssignment = (id) =>
|
||||
http.delete(buildUrl(endpoints.deleteAssignment, { id }))
|
||||
|
||||
export const apiGetAdminAssignmentSubmissions = (assignmentId, params) =>
|
||||
http.get(buildUrl(endpoints.getAssignmentSubmissions, { assignmentId }), { params })
|
||||
export const apiGetAdminAssignmentSubmissions = (homeworkId, params) =>
|
||||
http.get(buildUrl(endpoints.getAssignmentSubmissions, { homeworkId }), { params })
|
||||
|
||||
export const apiShowAdminAssignmentSubmission = (assignmentId, submissionId) =>
|
||||
http.get(buildUrl(endpoints.showAssignmentSubmission, { assignmentId, submissionId }))
|
||||
// Backend exposes submissions flat under /homework-submissions/:submissionId —
|
||||
// the parent `homeworkId` is not part of the URL, so we ignore it here.
|
||||
export const apiShowAdminAssignmentSubmission = (_homeworkId, submissionId) =>
|
||||
http.get(buildUrl(endpoints.showAssignmentSubmission, { submissionId }))
|
||||
|
||||
export const apiReviewAdminAssignmentSubmission = (assignmentId, submissionId, payload) =>
|
||||
http.post(buildUrl(endpoints.reviewAssignmentSubmission, { assignmentId, submissionId }), payload)
|
||||
export const apiReviewAdminAssignmentSubmission = (_homeworkId, submissionId, payload) =>
|
||||
http.patch(buildUrl(endpoints.reviewAssignmentSubmission, { submissionId }), payload)
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
import { http } from '@/services/api/http'
|
||||
import { buildUrl, endpoints } from '@/services/api/endpoints'
|
||||
|
||||
export const apiGetAdminCourseTemplates = (params) => http.get(endpoints.getCoursesList, { params })
|
||||
|
||||
export const apiShowAdminCourseTemplate = (id) => http.get(buildUrl(endpoints.showCourse, { id }))
|
||||
|
||||
export const apiAddAdminCourseTemplate = (payload) => http.post(endpoints.addNewCourse, payload)
|
||||
|
||||
export const apiUpdateAdminCourseTemplate = (id, payload) =>
|
||||
http.put(buildUrl(endpoints.updateCourseTemplate, { id }), payload)
|
||||
|
||||
export const apiDeleteAdminCourseTemplate = (id) =>
|
||||
http.delete(buildUrl(endpoints.deleteCourseTemplate, { id }))
|
||||
|
||||
export const apiChangeAdminCourseTemplateStatus = (id, payload) =>
|
||||
http.post(buildUrl(endpoints.changeStatusCourseTemplate, { id }), payload)
|
||||
|
||||
export const apiGetAdminTemplateStudents = (templateId, params) =>
|
||||
http.get(buildUrl(endpoints.listTemplateStudents, { templateId }), { params })
|
||||
|
||||
export const apiAddAdminTemplateStudent = (templateId, payload) =>
|
||||
http.post(buildUrl(endpoints.addTemplateStudent, { templateId }), payload)
|
||||
|
||||
export const apiRemoveAdminTemplateStudent = (templateId, userId) =>
|
||||
http.delete(buildUrl(endpoints.removeTemplateStudent, { templateId, userId }))
|
||||
|
||||
export const apiGetAdminTemplateSessions = (templateId, params) =>
|
||||
http.get(buildUrl(endpoints.listTemplateSessions, { templateId }), { params })
|
||||
|
||||
export const apiAttachAdminTemplateSession = (templateId, payload) =>
|
||||
http.post(buildUrl(endpoints.attachTemplateSession, { templateId }), payload)
|
||||
|
||||
export const apiDetachAdminTemplateSession = (templateId, sessionId) =>
|
||||
http.delete(buildUrl(endpoints.detachTemplateSession, { templateId, sessionId }))
|
||||
@@ -12,5 +12,20 @@ export const apiUpdateAdminCourse = (id, payload) =>
|
||||
|
||||
export const apiDeleteAdminCourse = (id) => http.delete(buildUrl(endpoints.deleteCourse, { id }))
|
||||
|
||||
export const apiChangeAdminCourseStatus = (id, payload) =>
|
||||
http.post(buildUrl(endpoints.changeStatusCourse, { id }), payload)
|
||||
export const apiGetAdminCourseStudents = (courseId, params) =>
|
||||
http.get(buildUrl(endpoints.listCourseStudents, { courseId }), { params })
|
||||
|
||||
export const apiAddAdminCourseStudent = (courseId, payload) =>
|
||||
http.post(buildUrl(endpoints.addCourseStudent, { courseId }), payload)
|
||||
|
||||
export const apiRemoveAdminCourseStudent = (courseId, userId) =>
|
||||
http.delete(buildUrl(endpoints.removeCourseStudent, { courseId, userId }))
|
||||
|
||||
export const apiGetAdminCourseSessions = (courseId, params) =>
|
||||
http.get(buildUrl(endpoints.listCourseSessions, { courseId }), { params })
|
||||
|
||||
export const apiAttachAdminCourseSession = (courseId, payload) =>
|
||||
http.post(buildUrl(endpoints.attachCourseSession, { courseId }), payload)
|
||||
|
||||
export const apiDetachAdminCourseSession = (courseId, sessionId) =>
|
||||
http.delete(buildUrl(endpoints.detachCourseSession, { courseId, sessionId }))
|
||||
|
||||
@@ -7,11 +7,22 @@ export const apiShowAdminExam = (id) => http.get(buildUrl(endpoints.showExam, {
|
||||
|
||||
export const apiAddAdminExam = (payload) => http.post(endpoints.addNewExam, payload)
|
||||
|
||||
// Backend uses PATCH /exams/:id (not PUT).
|
||||
export const apiUpdateAdminExam = (id, payload) =>
|
||||
http.put(buildUrl(endpoints.updateExam, { id }), payload)
|
||||
http.patch(buildUrl(endpoints.updateExam, { id }), payload)
|
||||
|
||||
export const apiDeleteAdminExam = (id) => http.delete(buildUrl(endpoints.deleteExam, { id }))
|
||||
|
||||
// POST /exams/:examId/questions — payload: { questionText, position, options: [{ optionText, isCorrect }] }
|
||||
// Must include ≥2 options; question + options created atomically.
|
||||
export const apiAddAdminExamQuestion = (examId, payload) =>
|
||||
http.post(buildUrl(endpoints.addExamQuestion, { examId }), payload)
|
||||
|
||||
// POST /questions/:questionId/options — payload: { optionText, isCorrect }
|
||||
export const apiAddAdminQuestionOption = (questionId, payload) =>
|
||||
http.post(buildUrl(endpoints.addQuestionOption, { questionId }), payload)
|
||||
|
||||
// Mock-only — backend has no /exams/:id/participants endpoint yet.
|
||||
export const apiGetAdminExamParticipants = (examId, params) =>
|
||||
http.get(buildUrl(endpoints.getExamParticipants, { examId }), { params })
|
||||
|
||||
|
||||
@@ -12,8 +12,5 @@ export const apiUpdateAdminSession = (id, payload) =>
|
||||
|
||||
export const apiDeleteAdminSession = (id) => http.delete(buildUrl(endpoints.deleteSession, { id }))
|
||||
|
||||
export const apiChangeAdminSessionStatus = (id, payload) =>
|
||||
http.post(buildUrl(endpoints.changeStatusSession, { id }), payload)
|
||||
|
||||
export const apiGetSessionAttendance = (sessionId, params) =>
|
||||
http.get(buildUrl(endpoints.getSessionsAttendance, { sessionId }), { params })
|
||||
|
||||
@@ -14,9 +14,6 @@ export const apiDeleteAdminTerm = (id) => http.delete(buildUrl(endpoints.deleteT
|
||||
|
||||
export const apiCloneAdminTerm = (id) => http.post(buildUrl(endpoints.cloneTerm, { id }))
|
||||
|
||||
export const apiChangeAdminTermStatus = (id, payload) =>
|
||||
http.post(buildUrl(endpoints.changeStatusTerm, { id }), payload)
|
||||
|
||||
export const apiGetAdminTermStudents = (termId, params) =>
|
||||
http.get(buildUrl(endpoints.listUserTerm, { termId }), { params })
|
||||
|
||||
|
||||
@@ -8,5 +8,6 @@ export const apiShowAdminTicket = (id) => http.get(buildUrl(endpoints.showTicket
|
||||
export const apiSendAdminTicketMessage = (id, payload) =>
|
||||
http.post(buildUrl(endpoints.sendTicketMessage, { id }), payload)
|
||||
|
||||
// Backend uses PATCH (not POST).
|
||||
export const apiChangeAdminTicketStatus = (id, payload) =>
|
||||
http.post(buildUrl(endpoints.changeTicketStatus, { id }), payload)
|
||||
http.patch(buildUrl(endpoints.changeTicketStatus, { id }), payload)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
export const endpoints = {
|
||||
// ─── Auth & profile ────────────────────────────────────────────────────────
|
||||
register: '/register',
|
||||
resendVerificationCodeForRegister: '/resend-verification-code',
|
||||
verifyCode: '/verify-code',
|
||||
@@ -10,13 +11,14 @@ export const endpoints = {
|
||||
verifyForgotPasswordCode: '/verify-forgot-password-code',
|
||||
resetPassword: '/reset-password',
|
||||
logout: '/logout',
|
||||
uploadMedia: '/media',
|
||||
me: '/auth/me',
|
||||
updateProfile: '/profile',
|
||||
|
||||
// ─── Geo ───────────────────────────────────────────────────────────────────
|
||||
provinceList: '/provinces',
|
||||
citiesList: '/provinces/:provinceId/cities',
|
||||
|
||||
me: '/auth/me',
|
||||
updateProfile: '/profile',
|
||||
// ─── Student-facing ────────────────────────────────────────────────────────
|
||||
getStudentCourses: '/student/courses',
|
||||
showStudentCourse: '/student/courses/:id',
|
||||
getStudentTerms: '/student/terms',
|
||||
@@ -45,12 +47,12 @@ export const endpoints = {
|
||||
getStudentCertificates: '/student/certificates',
|
||||
downloadStudentCertificate: '/student/certificates/:id/download',
|
||||
|
||||
// ─── Admin: users (out of scope of the Terms/Courses backend doc) ──────────
|
||||
getPendingStudents: '/admin/pending-students',
|
||||
showPendingStudent: '/admin/pending-students/:id',
|
||||
changeStatusPendingStudent: '/admin/pending-students/:id/status',
|
||||
downloadPdfPendingStudentInfo: '/admin/pending-students/:id/pdf',
|
||||
getApprovedUsers: '/admin/users',
|
||||
|
||||
showUserDetails: '/admin/users/:id',
|
||||
addNewUser: '/admin/users',
|
||||
updateUser: '/admin/users/:id',
|
||||
@@ -59,63 +61,92 @@ export const endpoints = {
|
||||
changeUserStatus: '/admin/users/:id/status',
|
||||
deleteUser: '/admin/users/:id',
|
||||
|
||||
// ─── Backend-aligned: Terms ────────────────────────────────────────────────
|
||||
getTermsList: '/terms',
|
||||
addNewTerm: '/terms',
|
||||
showTerm: '/terms/:id',
|
||||
updateTerm: '/terms/:id',
|
||||
deleteTerm: '/terms/:id',
|
||||
cloneTerm: '/admin/terms/:id/clone',
|
||||
changeStatusTerm: '/admin/terms/:id/status',
|
||||
|
||||
listUserTerm: '/admin/terms/:termId/students',
|
||||
addUserTerm: '/admin/terms/:termId/students',
|
||||
removeUserTerm: '/admin/terms/:termId/students/:userId',
|
||||
changeLeaveStatus: '/admin/terms/:termId/students/:userId/toggle-leave',
|
||||
|
||||
listCourseTerm: '/admin/terms/:termId/courses',
|
||||
addCourseTerm: '/admin/terms/:termId/courses',
|
||||
removeCourseTerm: '/admin/terms/:termId/courses/:courseId',
|
||||
|
||||
// ─── Backend-aligned: Courses ──────────────────────────────────────────────
|
||||
getCoursesList: '/courses',
|
||||
addNewCourse: '/courses',
|
||||
showCourse: '/courses/:id',
|
||||
updateCourse: '/courses/:id',
|
||||
deleteCourse: '/courses/:id',
|
||||
changeStatusCourse: '/admin/courses/:id/toggle-status',
|
||||
|
||||
getCourseTemplatesList: '/admin/courses',
|
||||
addNewCourseTemplate: '/admin/courses',
|
||||
showCourseTemplate: '/admin/courses/:id',
|
||||
updateCourseTemplate: '/admin/courses/:id',
|
||||
deleteCourseTemplate: '/admin/courses/:id',
|
||||
changeStatusCourseTemplate: '/admin/course-templates/:id/status',
|
||||
|
||||
listTemplateStudents: '/admin/course-templates/:templateId/students',
|
||||
addTemplateStudent: '/admin/course-templates/:templateId/students',
|
||||
removeTemplateStudent: '/admin/course-templates/:templateId/students/:userId',
|
||||
|
||||
listTemplateSessions: '/admin/course-templates/:templateId/sessions',
|
||||
attachTemplateSession: '/admin/course-templates/:templateId/sessions',
|
||||
detachTemplateSession: '/admin/course-templates/:templateId/sessions/:sessionId',
|
||||
|
||||
// ─── Backend-aligned: Sessions ─────────────────────────────────────────────
|
||||
getSessionsList: '/sessions',
|
||||
addNewSession: '/sessions',
|
||||
showSession: '/sessions/:id',
|
||||
updateSession: '/sessions/:id',
|
||||
deleteSession: '/sessions/:id',
|
||||
changeStatusSession: '/admin/sessions/:id/toggle-status',
|
||||
|
||||
// ─── Backend-aligned: Exams ────────────────────────────────────────────────
|
||||
// `getExamsList` is not yet in the backend Postman doc, but per the user
|
||||
// the backend will add it at /exams — wired up now so the FE doesn't need
|
||||
// to change when the endpoint lands.
|
||||
getExamsList: '/exams',
|
||||
showExam: '/exams/:id',
|
||||
addNewExam: '/exams',
|
||||
updateExam: '/exams/:id',
|
||||
deleteExam: '/exams/:id',
|
||||
addExamQuestion: '/exams/:examId/questions',
|
||||
addQuestionOption: '/questions/:questionId/options',
|
||||
submitExam: '/exams/:examId/submit',
|
||||
|
||||
// ─── Backend-aligned: Homeworks (FE calls them "assignments") ──────────────
|
||||
addNewAssignment: '/homeworks',
|
||||
updateAssignment: '/homeworks/:id',
|
||||
deleteAssignment: '/homeworks/:id',
|
||||
submitHomework: '/homeworks/:homeworkId/submit',
|
||||
reviewAssignmentSubmission: '/homework-submissions/:submissionId/review',
|
||||
|
||||
// ─── Backend-aligned: Media ────────────────────────────────────────────────
|
||||
uploadMedia: '/media',
|
||||
downloadMedia: '/media/:id/download',
|
||||
deleteMedia: '/media/:id',
|
||||
|
||||
// ─── FE mock-only — NOT in backend Postman doc ─────────────────────────────
|
||||
// Kept so existing UI screens continue to work against the mock layer.
|
||||
// See docs/backend-vs-ui-gaps.md for the list of decisions pending.
|
||||
|
||||
// Terms — clone + status + students-in-term + courses-in-term
|
||||
cloneTerm: '/admin/terms/:id/clone',
|
||||
listUserTerm: '/admin/terms/:termId/students',
|
||||
addUserTerm: '/admin/terms/:termId/students',
|
||||
removeUserTerm: '/admin/terms/:termId/students/:userId',
|
||||
changeLeaveStatus: '/admin/terms/:termId/students/:userId/toggle-leave',
|
||||
listCourseTerm: '/admin/terms/:termId/courses',
|
||||
addCourseTerm: '/admin/terms/:termId/courses',
|
||||
removeCourseTerm: '/admin/terms/:termId/courses/:courseId',
|
||||
|
||||
// Courses — students-in-course + attach/detach sessions (backend uses 1:N via session.course_id)
|
||||
listCourseStudents: '/admin/courses/:courseId/students',
|
||||
addCourseStudent: '/admin/courses/:courseId/students',
|
||||
removeCourseStudent: '/admin/courses/:courseId/students/:userId',
|
||||
listCourseSessions: '/admin/courses/:courseId/sessions',
|
||||
attachCourseSession: '/admin/courses/:courseId/sessions',
|
||||
detachCourseSession: '/admin/courses/:courseId/sessions/:sessionId',
|
||||
|
||||
// Sessions — attendance roster
|
||||
getSessionsAttendance: '/admin/sessions/:sessionId/attendances',
|
||||
|
||||
getAssignmentsList: '/admin/assignments',
|
||||
addNewAssignment: '/admin/assignments',
|
||||
showAssignment: '/admin/assignments/:id',
|
||||
updateAssignment: '/admin/assignments/:id',
|
||||
deleteAssignment: '/admin/assignments/:id',
|
||||
getAssignmentSubmissions: '/admin/assignments/:assignmentId/submissions',
|
||||
showAssignmentSubmission: '/admin/assignments/:assignmentId/submissions/:submissionId',
|
||||
reviewAssignmentSubmission: '/admin/assignments/:assignmentId/submissions/:submissionId/review',
|
||||
// Exams — participants only (backend has /exams/:id but no participants endpoints)
|
||||
getExamParticipants: '/admin/exams/:examId/participants',
|
||||
showExamParticipant: '/admin/exams/:examId/participants/:participantId',
|
||||
|
||||
// Homeworks — list, show, submissions list, show submission
|
||||
// Paths aligned to backend `/homeworks` and `/homework-submissions`. The
|
||||
// backend Postman doc currently exposes only create/update/delete/submit/review;
|
||||
// list + show + submissions list + show-submission stay mock-only until backend
|
||||
// adds them, but URL shape is locked in.
|
||||
getAssignmentsList: '/homeworks',
|
||||
showAssignment: '/homeworks/:id',
|
||||
getAssignmentSubmissions: '/homeworks/:homeworkId/submissions',
|
||||
showAssignmentSubmission: '/homework-submissions/:submissionId',
|
||||
|
||||
// ─── Tickets / Consultations (out of scope of Terms/Courses backend doc) ───
|
||||
getTicketsList: '/admin/tickets',
|
||||
showTicket: '/admin/tickets/:id',
|
||||
sendTicketMessage: '/admin/tickets/:id/messages',
|
||||
@@ -125,14 +156,6 @@ export const endpoints = {
|
||||
showConsultation: '/admin/consultations/:id',
|
||||
sendConsultationMessage: '/admin/consultations/:id/messages',
|
||||
changeConsultationStatus: '/admin/consultations/:id/status',
|
||||
|
||||
getExamsList: '/admin/exams',
|
||||
addNewExam: '/admin/exams',
|
||||
showExam: '/admin/exams/:id',
|
||||
updateExam: '/admin/exams/:id',
|
||||
deleteExam: '/admin/exams/:id',
|
||||
getExamParticipants: '/admin/exams/:examId/participants',
|
||||
showExamParticipant: '/admin/exams/:examId/participants/:participantId',
|
||||
}
|
||||
|
||||
export const buildUrl = (template, params = {}) =>
|
||||
|
||||
Reference in New Issue
Block a user