129 lines
3.5 KiB
JavaScript
129 lines
3.5 KiB
JavaScript
import axios from "axios";
|
|
|
|
const API_URL =
|
|
// process.env.NODE_ENV === "production"
|
|
"https://imkapi.oblak.solutions";
|
|
// "http://localhost:3000";
|
|
|
|
const api = axios.create({
|
|
baseURL: API_URL,
|
|
withCredentials: true,
|
|
headers: {
|
|
Accept: "application/json, text/plain, */*",
|
|
"Content-Type": "application/json",
|
|
},
|
|
});
|
|
|
|
// Add authorization header to all requests
|
|
api.interceptors.request.use(
|
|
(config) => {
|
|
const token = localStorage.getItem("token");
|
|
if (token) {
|
|
config.headers["Authorization"] = `Bearer ${token}`;
|
|
}
|
|
return config;
|
|
},
|
|
(error) => {
|
|
return Promise.reject(error);
|
|
},
|
|
);
|
|
|
|
export const getSharedDocuments = (userId) => {
|
|
return api.get(`/documents/shared/${userId}`);
|
|
};
|
|
|
|
const getToken = () => localStorage.getItem("token");
|
|
export const downloadDocument = async (key) => {
|
|
try {
|
|
const response = await api.get(
|
|
`/documents/download/${encodeURIComponent(key)}`,
|
|
{
|
|
responseType: "blob",
|
|
headers: {
|
|
Accept: "application/octet-stream",
|
|
},
|
|
},
|
|
);
|
|
|
|
// Create blob URL and trigger download
|
|
const blob = new Blob([response.data]);
|
|
const url = window.URL.createObjectURL(blob);
|
|
const link = document.createElement("a");
|
|
link.href = url;
|
|
|
|
// Extract filename from key
|
|
const fileName = key.split("/").pop();
|
|
link.download = fileName;
|
|
|
|
document.body.appendChild(link);
|
|
link.click();
|
|
document.body.removeChild(link);
|
|
window.URL.revokeObjectURL(url);
|
|
|
|
return response;
|
|
} catch (error) {
|
|
console.error("Download error:", error);
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
export const createUser = (userData) => {
|
|
return api.post("/admin/users", {
|
|
name: userData.name,
|
|
email: userData.email,
|
|
password: userData.password,
|
|
isAdmin: userData.isAdmin,
|
|
});
|
|
};
|
|
export const login = (username, password) =>
|
|
api.post("/auth/login", { username, password });
|
|
export const shareDocument = (documentId, userId) =>
|
|
api.post(`/admin/documents/${documentId}/share`, { userId });
|
|
export const updateDocumentStatus = (documentId, status) =>
|
|
api.put(`/admin/documents/${documentId}/status`, { status });
|
|
|
|
export const uploadDocument = async (formData) => {
|
|
try {
|
|
// Debug log
|
|
console.log("Sending to server:", {
|
|
title: formData.get("title"),
|
|
sharedWithId: formData.get("sharedWithId"),
|
|
uploadedById: formData.get("uploadedById"),
|
|
});
|
|
|
|
const response = await api.post("/admin/documents", formData, {
|
|
headers: {
|
|
"Content-Type": "multipart/form-data",
|
|
},
|
|
});
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error("API Error:", error.response?.data);
|
|
throw error;
|
|
}
|
|
};
|
|
export const getUserInfo = () => api.get("/auth/user-info");
|
|
|
|
export const getAllDocuments = () => api.get("/admin/documents");
|
|
// export const getSharedDocuments = (userId) => api.get(`/documents/shared/${userId}`);
|
|
export const getAllUsers = () => api.get("/admin/users");
|
|
export const resetUserPassword = (userId, newPassword) =>
|
|
api.post(`/admin/users/${userId}/reset-password`, { password: newPassword });
|
|
|
|
// Password reset endpoints
|
|
export const forgotPassword = (email) =>
|
|
api.post("/auth/forgot-password", { email });
|
|
export const resetPassword = (token, newPassword) =>
|
|
api.post("/auth/reset-password", { token, newPassword });
|
|
api.interceptors.response.use(
|
|
(response) => response,
|
|
(error) => {
|
|
if (error.response?.status === 401) {
|
|
localStorage.removeItem("token");
|
|
window.location.href = "/login";
|
|
}
|
|
return Promise.reject(error);
|
|
},
|
|
);
|
|
export default api;
|