341 lines
9.7 KiB
TypeScript
341 lines
9.7 KiB
TypeScript
import { type AxiosError, type AxiosResponse } from "axios";
|
|
import Report from "@/ApiClasses/Repport";
|
|
import ProjectDecision from "@/ApiClasses/ProjectDecision";
|
|
//import UserAdmin from "@/ApiClasses/UserAdmin";
|
|
import {
|
|
axiosInstance,
|
|
defaultApiErrorHandler,
|
|
defaultApiSuccessHandler,
|
|
} from "@/services/api";
|
|
|
|
// Admin API
|
|
function getPendingAccounts(
|
|
onSuccessHandler?: (response: AxiosResponse) => void,
|
|
onErrorHandler?: (error: AxiosError) => void
|
|
): void {
|
|
axiosInstance
|
|
.get("/admin/pending-accounts")
|
|
.then((response) => {
|
|
if (onSuccessHandler) {
|
|
onSuccessHandler(response);
|
|
} else {
|
|
defaultApiSuccessHandler(response);
|
|
}
|
|
})
|
|
.catch((error: AxiosError) => {
|
|
if (onErrorHandler) {
|
|
onErrorHandler(error);
|
|
} else {
|
|
defaultApiErrorHandler(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
function validateUserAccount(
|
|
userId: number,
|
|
onSuccessHandler?: (response: AxiosResponse) => void,
|
|
onErrorHandler?: (error: AxiosError) => void
|
|
): void {
|
|
axiosInstance
|
|
.post(`/admin/accounts/validate/${userId}`)
|
|
.then((response) => {
|
|
if (onSuccessHandler) {
|
|
onSuccessHandler(response);
|
|
} else {
|
|
defaultApiSuccessHandler(response);
|
|
}
|
|
})
|
|
.catch((error: AxiosError) => {
|
|
if (onErrorHandler) {
|
|
onErrorHandler(error);
|
|
} else {
|
|
defaultApiErrorHandler(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
function getPendingProjectJoinRequests( // Not yet implemented
|
|
onSuccessHandler?: (response: AxiosResponse) => void,
|
|
onErrorHandler?: (error: AxiosError) => void
|
|
): void {
|
|
axiosInstance
|
|
.get("/admin/request-join")
|
|
.then((response) => {
|
|
if (onSuccessHandler) {
|
|
onSuccessHandler(response);
|
|
} else {
|
|
defaultApiSuccessHandler(response);
|
|
}
|
|
})
|
|
.catch((error: AxiosError) => {
|
|
if (onErrorHandler) {
|
|
onErrorHandler(error);
|
|
} else {
|
|
defaultApiErrorHandler(error);
|
|
}
|
|
});
|
|
}
|
|
function decideProjectJoinRequest( // Not yet implemented
|
|
joinRequestId: number,
|
|
decision: { isAccepted: boolean },
|
|
onSuccessHandler?: (response: AxiosResponse) => void,
|
|
onErrorHandler?: (error: AxiosError) => void
|
|
): void {
|
|
axiosInstance
|
|
.post(`/admin/request-join/decision/${joinRequestId}`, decision)
|
|
.then((response) => {
|
|
if (onSuccessHandler) {
|
|
onSuccessHandler(response);
|
|
} else {
|
|
defaultApiSuccessHandler(response);
|
|
}
|
|
})
|
|
.catch((error: AxiosError) => {
|
|
if (onErrorHandler) {
|
|
onErrorHandler(error);
|
|
} else {
|
|
defaultApiErrorHandler(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
function getAdminProjects(
|
|
onSuccessHandler?: (response: AxiosResponse) => void,
|
|
onErrorHandler?: (error: AxiosError) => void
|
|
): void {
|
|
axiosInstance
|
|
.get("/admin/projects")
|
|
.then((response) => {
|
|
if (onSuccessHandler) {
|
|
onSuccessHandler(response);
|
|
} else {
|
|
defaultApiSuccessHandler(response);
|
|
}
|
|
})
|
|
.catch((error: AxiosError) => {
|
|
if (onErrorHandler) {
|
|
onErrorHandler(error);
|
|
} else {
|
|
defaultApiErrorHandler(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
type ProjectCreatePayload = {
|
|
projectName: string;
|
|
logo?: string;
|
|
};
|
|
|
|
function addProjectManually(
|
|
payload: ProjectCreatePayload,
|
|
onSuccess?: (response: AxiosResponse) => void,
|
|
onError?: (error: AxiosError) => void
|
|
): void {
|
|
axiosInstance
|
|
.post("/admin/projects", payload)
|
|
.then((response) => onSuccess?.(response))
|
|
.catch((error: AxiosError) => onError?.(error));
|
|
}
|
|
|
|
function getPendingProjects(
|
|
onSuccessHandler?: (response: AxiosResponse) => void,
|
|
onErrorHandler?: (error: AxiosError) => void
|
|
): void {
|
|
axiosInstance
|
|
.get("/admin/projects/pending")
|
|
.then((response) => {
|
|
if (onSuccessHandler) {
|
|
onSuccessHandler(response);
|
|
} else {
|
|
defaultApiSuccessHandler(response);
|
|
}
|
|
})
|
|
.catch((error: AxiosError) => {
|
|
if (onErrorHandler) {
|
|
onErrorHandler(error);
|
|
} else {
|
|
defaultApiErrorHandler(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
function decidePendingProject(
|
|
decision: ProjectDecision,
|
|
onSuccessHandler?: (response: AxiosResponse) => void,
|
|
onErrorHandler?: (error: AxiosError) => void
|
|
): void {
|
|
axiosInstance
|
|
.post(`/admin/projects/pending/decision`, decision.toObject())
|
|
.then((response) => {
|
|
if (onSuccessHandler) {
|
|
onSuccessHandler(response);
|
|
} else {
|
|
defaultApiSuccessHandler(response);
|
|
}
|
|
})
|
|
.catch((error: AxiosError) => {
|
|
if (onErrorHandler) {
|
|
onErrorHandler(error);
|
|
} else {
|
|
defaultApiErrorHandler(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
function createAppointmentReport(
|
|
appointmentId: number,
|
|
reportContent: Report, // Replace 'any' with a proper type for report content if available
|
|
onSuccessHandler?: (response: AxiosResponse) => void,
|
|
onErrorHandler?: (error: AxiosError) => void
|
|
): void {
|
|
axiosInstance
|
|
.post(`/admin/appointments/report/${appointmentId}`, reportContent)
|
|
.then((response) => {
|
|
if (onSuccessHandler) {
|
|
onSuccessHandler(response);
|
|
} else {
|
|
defaultApiSuccessHandler(response);
|
|
}
|
|
})
|
|
.catch((error: AxiosError) => {
|
|
if (onErrorHandler) {
|
|
onErrorHandler(error);
|
|
} else {
|
|
defaultApiErrorHandler(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
function updateAppointmentReport(
|
|
appointmentId: number,
|
|
reportContent: Report, // Replace 'any' with a proper type for report content if available
|
|
onSuccessHandler?: (response: AxiosResponse) => void,
|
|
onErrorHandler?: (error: AxiosError) => void
|
|
): void {
|
|
axiosInstance
|
|
.put(`/admin/appointments/report/${appointmentId}`, reportContent)
|
|
.then((response) => {
|
|
if (onSuccessHandler) {
|
|
onSuccessHandler(response);
|
|
} else {
|
|
defaultApiSuccessHandler(response);
|
|
}
|
|
})
|
|
.catch((error: AxiosError) => {
|
|
if (onErrorHandler) {
|
|
onErrorHandler(error);
|
|
} else {
|
|
defaultApiErrorHandler(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
function getUpcomingAppointments(
|
|
onSuccessHandler?: (response: AxiosResponse) => void,
|
|
onErrorHandler?: (error: AxiosError) => void
|
|
): void {
|
|
axiosInstance
|
|
.get("/admin/appointments/upcoming")
|
|
.then((response) => {
|
|
if (onSuccessHandler) {
|
|
onSuccessHandler(response);
|
|
} else {
|
|
defaultApiSuccessHandler(response);
|
|
}
|
|
})
|
|
.catch((error: AxiosError) => {
|
|
if (onErrorHandler) {
|
|
onErrorHandler(error);
|
|
} else {
|
|
defaultApiErrorHandler(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
function removeProject(
|
|
projectId: number,
|
|
onSuccessHandler?: (response: AxiosResponse) => void,
|
|
onErrorHandler?: (error: AxiosError) => void
|
|
): void {
|
|
axiosInstance
|
|
.delete(`/admin/projects/${projectId}`)
|
|
.then((response) => {
|
|
if (onSuccessHandler) {
|
|
onSuccessHandler(response);
|
|
} else {
|
|
defaultApiSuccessHandler(response);
|
|
}
|
|
})
|
|
.catch((error: AxiosError) => {
|
|
if (onErrorHandler) {
|
|
onErrorHandler(error);
|
|
} else {
|
|
defaultApiErrorHandler(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
function grantAdminRights(
|
|
userId: number,
|
|
onSuccessHandler?: (response: AxiosResponse) => void,
|
|
onErrorHandler?: (error: AxiosError) => void
|
|
): void {
|
|
axiosInstance
|
|
.post(`/admin/make-admin/${userId}`)
|
|
.then((response) => {
|
|
if (onSuccessHandler) {
|
|
onSuccessHandler(response);
|
|
} else {
|
|
defaultApiSuccessHandler(response);
|
|
}
|
|
})
|
|
.catch((error: AxiosError) => {
|
|
if (onErrorHandler) {
|
|
onErrorHandler(error);
|
|
} else {
|
|
defaultApiErrorHandler(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
function createAdmin(
|
|
onSuccessHandler?: (response: AxiosResponse) => void,
|
|
onErrorHandler?: (error: AxiosError) => void
|
|
): void {
|
|
axiosInstance
|
|
.post("/admin/create-account")
|
|
.then((response) => {
|
|
if (onSuccessHandler) {
|
|
onSuccessHandler(response);
|
|
} else {
|
|
defaultApiSuccessHandler(response);
|
|
}
|
|
})
|
|
.catch((error: AxiosError) => {
|
|
if (onErrorHandler) {
|
|
onErrorHandler(error);
|
|
} else {
|
|
defaultApiErrorHandler(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
export {
|
|
axiosInstance,
|
|
//requestJoinProject, // Not yet implemented [cite: 4]
|
|
getPendingAccounts,
|
|
validateUserAccount,
|
|
getPendingProjectJoinRequests, // Not yet implemented [cite: 3]
|
|
decideProjectJoinRequest, // Not yet implemented [cite: 3]
|
|
getAdminProjects,
|
|
addProjectManually,
|
|
getPendingProjects,
|
|
decidePendingProject,
|
|
createAppointmentReport,
|
|
updateAppointmentReport,
|
|
getUpcomingAppointments,
|
|
removeProject,
|
|
grantAdminRights,
|
|
createAdmin,
|
|
};
|