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;