/**
* @file
* File : authUsersApiSlice.js\
* Defines RTK Query endpoints for managing authentication users \
* Extends the base API slice from `apiSlice.js`
*
* @author Pierre-Yves Léglise <contact@axialdata.net>
* @name authUsersApiSlice
*/
import { apiSlice } from './apiSlice'
/**
* RTK Query API slice for authentication users.
* Defines query and mutation endpoints for user management.
*
* @category ApiSlice
* @function
* @author Pierre-Yves Léglise <contact@axialdata.net>
* @constant {Object} authUsersApiSlice
* @property {Function} useGetAuthUsersQuery - Hook for querying authentication users.
* @property {Function} useDeleteAuthUserMutation - Hook for deleting an authentication user.
* @property {Function} useUpdateProfileMutation - Hook for updating user profile.
* @property {Function} useChangePasswordMutation - Hook for changing user password.
* @property {Function} useCheckPasswordMutation - Hook for checking user password.
* @property {Function} useMfaQrCodeQuery - Hook for querying MFA QR code.
* @property {Function} useResetPasswordMutation - Hook for resetting user password.
* @property {Function} useSignUpMutation - Hook for signing up new users.
* @property {Function} useVerifyMutation - Hook for verifying user email.
* @property {Function} useUploadFileMutation - Hook for uploading files.
* @property {Function} useProfilePictureQuery - Hook for querying user profile picture.
* @example
* const { useGetAuthUsersQuery } = authUsersApiSlice
* @returns {Object} The RTK Query API slice for authentication users.
*/
export const authUsersApiSlice = apiSlice.injectEndpoints({
endpoints: (builder) => ({
// Query endpoints ____________________________________________
getAuthUsers: builder.query({
query: (params) => ({
url: '/authusers',
method: 'get',
params: { ...params },
}),
}),
mfaQrCode: builder.query({
query: ({ userId, params }) => ({
url: `/authusers/${userId}/mfa-qr-code`,
method: 'get',
params: { ...params },
}),
keepUnusedDataFor: 0,
}),
profilePicture: builder.query({
query: ({ userId, params }) => ({
url: `/authusers/${userId}/profile-picture`,
method: 'get',
params: { ...params },
headers: {
'Content-Type': 'image/jpeg',
},
}),
keepUnusedDataFor: 20,
}),
// Mutation endpoints ____________________________________________
signUp: builder.mutation({
query: ({ language, credentials }) => ({
url: `/authusers/new/${language}`,
method: 'put',
data: { ...credentials },
}),
}),
verify: builder.mutation({
query: (data) => ({
url: '/authusers/email-valid',
method: 'patch',
data: data,
}),
keepUnusedDataFor: 0,
}),
verifyNewUser: builder.mutation({
query: (data) => ({
url: '/authusers/new-user-email-valid',
method: 'patch',
data: data,
}),
keepUnusedDataFor: 0,
}),
resetPassword: builder.mutation({
query: (credentials) => ({
url: '/authusers/password-reset',
method: 'patch',
data: { ...credentials },
}),
keepUnusedDataFor: 0,
}),
newUserResetPassword: builder.mutation({
query: ({ credentials }) => ({
url: '/authusers/new-user-password-reset',
method: 'patch',
data: { ...credentials },
}),
keepUnusedDataFor: 0,
}),
changePassword: builder.mutation({
query: ({ userId, credentials, params }) => ({
url: `/authusers/${userId}/password-new`,
method: 'patch',
data: { ...credentials },
params: { ...params },
}),
keepUnusedDataFor: 0,
}),
checkPassword: builder.mutation({
query: ({ userId, credentials, params }) => ({
url: `/authusers/${userId}/password-check`,
method: 'post',
data: { ...credentials },
params: { ...params },
}),
keepUnusedDataFor: 0,
}),
updateProfile: builder.mutation({
query: ({ userData, params }) => ({
url: `/authusers/${userData._id}`,
method: 'patch',
data: { ...userData },
withCredentials: true,
params: { ...params },
}),
keepUnusedDataFor: 0,
}),
uploadFile: builder.mutation({
query: ({ userData, formData, headers }) => ({
url: `/authusers/${userData._id}`,
method: 'patch',
headers: {
'content-type': 'multipart/form-data',
},
data: formData,
}),
keepUnusedDataFor: 0,
}),
deleteAuthUser: builder.mutation({
query: ({ userId, params }) => ({
url: `/authusers/${userId}`,
method: 'delete',
params: { ...params },
}),
keepUnusedDataFor: 0,
}),
}),
overrideExisting: true,
})
// Export hooks for usage in functional components
export const {
useGetAuthUsersQuery,
useDeleteAuthUserMutation,
useUpdateProfileMutation,
useChangePasswordMutation,
useCheckPasswordMutation,
useMfaQrCodeQuery,
useResetPasswordMutation,
useNewUserResetPasswordMutation,
useSignUpMutation,
useVerifyMutation,
useVerifyNewUserMutation,
useUploadFileMutation,
useProfilePictureQuery,
} = authUsersApiSlice