Snai3i-MarketPlace / frontend / src / app / backend / endpoints / accounts.ts
accounts.ts
Raw
import api from '..';
const ACCOUNTS_API = 'users';

export const accountsApi = api.injectEndpoints({
  endpoints: (build) => ({
    getStatistics: build.query<ResponseI<StatI>, void>({
      query: () => ({
        url: `${ACCOUNTS_API}/statistics`,
        method: 'GET',
      }),
      providesTags: ['users', 'teachers', 'courses', 'orders'],
    }),
    getUsersByAdmin: build.query<ResponseI<UserI[]>, void>({
      query: () => ({
        url: `${ACCOUNTS_API}`,
        method: 'GET',
      }),
      providesTags: ['users'],
    }),
    getTachersBySchool: build.query<ResponseI<TeacherI[]>, number>({
      query: (school_id) => ({
        url: `${ACCOUNTS_API}/teachers/${school_id}`,
        method: 'GET',
      }),
      providesTags: ['teachers', 'users'],
    }),
    getSchools: build.query<ResponseI<UserI[]>, void>({
      query: () => ({
        url: `${ACCOUNTS_API}/schools`,
        method: 'GET',
      }),
      providesTags: ['users'],
    }),
    getTeachers: build.query<ResponseI<UserI[]>, void>({
      query: () => ({
        url: `${ACCOUNTS_API}/teachers`,
        method: 'GET',
      }),
      providesTags: ['users', 'teachers'],
    }),
    getInstDesigners: build.query<
      ResponseI<
        {
          user_id: number;
          firstName: string;
          lastName: string;
          inst_designer_id: number;
        }[]
      >,
      void
    >({
      query: () => ({
        url: `${ACCOUNTS_API}/instDesigners`,
        method: 'GET',
      }),
      providesTags: ['users'],
    }),
    deleteUser: build.mutation<
      ResponseI<null>,
      {
        user_id: number;
      }
    >({
      query: ({ user_id }) => ({
        url: `${ACCOUNTS_API}/${user_id}`,
        method: 'DELETE',
      }),
      invalidatesTags: ['users'],
    }),
    deleteTeacher: build.mutation<
      ResponseI<null>,
      {
        teacherId: number;
      }
    >({
      query: ({ teacherId }) => ({
        url: `${ACCOUNTS_API}/teacher/${teacherId}`,
        method: 'DELETE',
      }),
      invalidatesTags: ['users', 'teachers'],
    }),
    bulkDeleteUser: build.mutation<
      ResponseI<null>,
      {
        user_ids: number[];
      }
    >({
      query: ({ user_ids }) => ({
        url: `${ACCOUNTS_API}/bulkDelete`,
        method: 'POST',
        body: { userIds: user_ids },
      }),
      invalidatesTags: ['users'],
    }),
    bulkDeleteTeachers: build.mutation<
      ResponseI<null>,
      {
        teacherIds: number[];
      }
    >({
      query: ({ teacherIds }) => ({
        url: `${ACCOUNTS_API}/bulkDelete/teachers`,
        method: 'POST',
        body: { teacherIds: teacherIds },
      }),
      invalidatesTags: ['users', 'teachers'],
    }),
    getUserById: build.query<ResponseI<UserI>, number>({
      query: (user_id) => ({
        url: `${ACCOUNTS_API}/${user_id}`,
        method: 'GET',
      }),
      providesTags: ['users'],
    }),
    getTeacherById: build.query<ResponseI<UserI>, number>({
      query: (teacher_id) => ({
        url: `${ACCOUNTS_API}/teacher/${teacher_id}`,
        method: 'GET',
      }),
      providesTags: ['users', 'teachers'],
    }),
    updateUser: build.mutation<
      ResponseI<null>,
      {
        userId: number;
        body: UserI;
      }
    >({
      query: ({ userId, body }) => ({
        url: `${ACCOUNTS_API}/${userId}`,
        method: 'PUT',
        body: body,
      }),
      invalidatesTags: ['users', 'teachers'],
    }),
    updateTeacher: build.mutation<
      ResponseI<null>,
      {
        teacherId: number;
        body: UserI;
      }
    >({
      query: ({ teacherId, body }) => ({
        url: `${ACCOUNTS_API}/teacher/${teacherId}`,
        method: 'PUT',
        body: body,
      }),
      invalidatesTags: ['users', 'teachers'],
    }),
  }),
});

export const {
  useGetUsersByAdminQuery,
  useGetTachersBySchoolQuery,
  useBulkDeleteUserMutation,
  useDeleteUserMutation,
  useGetSchoolsQuery,
  useGetUserByIdQuery,
  useUpdateUserMutation,
  useUpdateTeacherMutation,
  useGetTeachersQuery,
  useGetTeacherByIdQuery,
  useDeleteTeacherMutation,
  useBulkDeleteTeachersMutation,
  useGetInstDesignersQuery,
  useGetStatisticsQuery,
} = accountsApi;