Snai3i-MarketPlace / frontend / src / app / backend / endpoints / courses.ts
courses.ts
Raw
import api from '..';
const COURSES_API = '/course';

export const coursesApi = api.injectEndpoints({
  endpoints: (build) => ({
    getTags: build.query<ResponseI<string[]>, void>({
      query: () => ({
        url: `${COURSES_API}/tags`,
        method: 'GET',
      }),
      providesTags: ['courses'],
    }),
    getMarketCourses: build.query<ResponseI<CEMarketCourseI[]>, void>({
      query: () => ({
        url: `${COURSES_API}/market`,
        method: 'GET',
      }),
      providesTags: ['courses'],
    }),
    getCoursesBySchool: build.query<ResponseI<CEMarketCourseI[]>, number>({
      query: (school_id) => ({
        url: `${COURSES_API}/school/${school_id}`,
        method: 'GET',
      }),
      providesTags: ['courses'],
    }),
    getCoursesByTeacher: build.query<ResponseI<CEMarketCourseI[]>, number>({
      query: (teacher_id) => ({
        url: `${COURSES_API}/teacher/${teacher_id}`,
        method: 'GET',
      }),
      providesTags: ['courses'],
    }),
    getAllMarketCourses: build.query<ResponseI<CEMarketCourseI[]>, void>({
      query: () => ({
        url: `${COURSES_API}/market/all`,
        method: 'GET',
      }),
      providesTags: ['courses'],
    }),
    getAllSnai3iCourses: build.query<ResponseI<Snai3iCourseI[]>, void>({
      query: () => ({
        url: `${COURSES_API}/snai3i/all`,
        method: 'GET',
      }),
      providesTags: ['courses'],
    }),
    getActiveSnai3iCourses: build.query<ResponseI<Snai3iCourseI[]>, void>({
      query: () => ({
        url: `${COURSES_API}/snai3i`,
        method: 'GET',
      }),
      providesTags: ['courses'],
    }),
    getSnai3iCourseById: build.query<ResponseI<Snai3iCourseI>, number>({
      query: (courseId) => ({
        url: `${COURSES_API}/snai3i/${courseId}`,
        method: 'GET',
      }),
      providesTags: ['courses'],
    }),
    getMarketCourseById: build.query<ResponseI<CEMarketCourseI>, number>({
      query: (courseId) => ({
        url: `${COURSES_API}/market/${courseId}`,
        method: 'GET',
      }),
      providesTags: ['courses'],
    }),
    getCourseByInstructor: build.query<ResponseI<CEMarketCourseI[]>, number>({
      query: (inst_designer_id) => ({
        url: `${COURSES_API}/instructor/${inst_designer_id}`,
        method: 'GET',
      }),
      providesTags: ['courses'],
    }),
    createSnai3iCourse: build.mutation<ResponseI<Snai3iCourseI>, Snai3iCourseI>(
      {
        query: (body) => ({
          url: `${COURSES_API}/create/snai3i`,
          method: 'POST',
          body: body,
        }),
        invalidatesTags: ['courses'],
      }
    ),
    createMarketCourse: build.mutation<
      ResponseI<CEMarketCourseI>,
      CEMarketCourseI
    >({
      query: (body) => ({
        url: `${COURSES_API}/create/market`,
        method: 'POST',
        body: body,
      }),
      invalidatesTags: ['courses'],
    }),
    updateSnai3iCourse: build.mutation<ResponseI<null>, Snai3iCourseI>({
      query: (body) => ({
        url: `${COURSES_API}/update/snai3i/${body.course_id}`,
        method: 'PUT',
        body: body,
      }),
      invalidatesTags: ['courses'],
    }),
    updateMarketCourse: build.mutation<ResponseI<null>, CEMarketCourseI>({
      query: (body) => ({
        url: `${COURSES_API}/update/market/${body.course_id}`,
        method: 'PUT',
        body: body,
      }),
      invalidatesTags: ['courses'],
    }),
    updateCourseStatus: build.mutation<
      ResponseI<null>,
      {
        course_id: number;
        status: string;
      }
    >({
      query: ({ course_id, status }) => ({
        url: `${COURSES_API}/update/status/${course_id}`,
        method: 'PUT',
        body: { status },
      }),
      invalidatesTags: ['courses'],
    }),
    deleteCourse: build.mutation<
      ResponseI<null>,
      {
        course_id: number;
      }
    >({
      query: ({ course_id }) => ({
        url: `${COURSES_API}/delete/${course_id}`,
        method: 'DELETE',
      }),
      invalidatesTags: ['courses'],
    }),
  }),
});
// update/status/:meeting_id
export const {
  useGetMarketCoursesQuery,
  useCreateSnai3iCourseMutation,
  useGetSnai3iCourseByIdQuery,
  useUpdateSnai3iCourseMutation,
  useCreateMarketCourseMutation,
  useGetMarketCourseByIdQuery,
  useUpdateMarketCourseMutation,
  useGetTagsQuery,
  useGetAllMarketCoursesQuery,
  useUpdateCourseStatusMutation,
  useDeleteCourseMutation,
  useGetCoursesBySchoolQuery,
  useGetCoursesByTeacherQuery,
  useGetActiveSnai3iCoursesQuery,
  useGetAllSnai3iCoursesQuery,
  useGetCourseByInstructorQuery,
} = coursesApi;