Skip to content
Extraits de code Groupes Projets
Valider a53694c6 rédigé par hamza.elbakkouri's avatar hamza.elbakkouri
Parcourir les fichiers

VSN-917/integrate all the driver absence features

parent 176bd2a5
Branches
Étiquettes
1 requête de fusion!241VSN-917/integrate all the driver absence features
import axiosInstance from "@/utils/axios";
import { create } from "zustand";
import { DocumentDTO } from "@/shared/types/document";
import { documentEndpoints } from "@/shared/api/endpoints/document-service";
type DocumentStore = {
documents: DocumentDTO[];
document: DocumentDTO | null;
loading: boolean;
error: string | null;
upload: (file: File, userId: string) => Promise<number>;
getUserDocuments: (userId: number) => Promise<void>;
deleteDocument: (ownerId: number, documentId: number) => Promise<void>;
getDocumentById: (docId: number, userId: number) => Promise<DocumentDTO | null>;
};
export const useDocumentStore = create<DocumentStore>((set) => ({
documents: [],
document: null,
loading: false,
error: null,
upload: async (file: File, userId: string) => {
set({ loading: true, error: null });
try {
const formData = new FormData();
formData.append('file', file);
formData.append('ownerId', userId);
const response = await axiosInstance.post<number>(
documentEndpoints.Document.upload,
formData,
{
headers: {
'Content-Type': 'multipart/form-data',
},
}
);
set((state) => ({
documents: [...state.documents],
loading: false,
}));
return response.data;
} catch (error: any) {
set({
error: error.message || 'Erreur lors du téléchargement du document',
loading: false,
});
throw error;
}
},
getDocumentById: async (docId: number, userId: number) => {
set({ loading: true, error: null });
try {
const response = await axiosInstance.get<DocumentDTO>(
documentEndpoints.Document.getByIdAbDriver(docId, userId)
);
set({
document: response.data,
loading: false,
});
console.log("Document retrieved:", response.data);
return response.data;
} catch (error: any) {
set({
error: error.message || 'Erreur lors de la récupération du document',
loading: false,
});
throw error;
}
},
getUserDocuments: async (userId: number) => {
set({ loading: true, error: null });
try {
const response = await axiosInstance.get<DocumentDTO[]>(
documentEndpoints.Document.getUserDocuments(userId)
);
set({
documents: response.data,
loading: false,
});
} catch (error: any) {
set({
error: error.message || 'Erreur lors de la récupération des documents',
loading: false,
});
throw error
}
},
deleteDocument: async (ownerId: number, documentId: number) => {
set({ loading: true, error: null })
try {
await axiosInstance.delete(documentEndpoints.Document.delete(ownerId, documentId))
set((state) => ({
documents: state.documents.filter((doc) => doc.id !== documentId),
loading: false,
}))
} catch (error: any) {
set({
error: error.message || "Erreur lors de la suppression du document",
loading: false,
})
throw error
}
},
}))
0% ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter