TASK22102: slice1 api contract helper + email/admin pilot

This commit is contained in:
2026-03-17 12:50:54 +00:00
parent 7d06bc7bfa
commit 9ae8ce7136
7 changed files with 98 additions and 9 deletions
+7 -2
View File
@@ -22,6 +22,7 @@ import { azureHeadersPagedCustom } from "../../../actions/core/headers";
import { consoleLogger } from "../../../actions/core/logger";
import { getToken } from "../../../actions/core/token";
import { hashAPIPath } from "../../../actions/core/hash";
import { respondError, respondSuccess } from "../middleware/apiResponse";
const WORDKEY = process.env.HASHKEY;
const WEBAPI_URL =
@@ -154,11 +155,15 @@ export default async function ApiProxy(req, res) {
_.has(data, "@odata.nextLink") == true &&
((dataStr = JSON.stringify(data["@odata.nextLink"])),
(data["@odata.nextLink"] = dataStr.split("/v8.2/")[1]));
res.status(200).json(data);
return respondSuccess(res, data);
})
.catch((error) => {
consoleLogger(error);
res.status(400).json(error);
return respondError(res, {
status: 400,
code: "ADMIN_LATEST_DOCS_FETCH_FAILED",
message: "Failed to fetch latest documents"
});
});
return apiResponse;
+7 -2
View File
@@ -22,6 +22,7 @@ import { azureHeadersPagedCustom } from "../../../actions/core/headers";
import { getToken } from "../../../actions/core/token";
import { consoleLogger } from "../../../actions/core/logger";
import { hashAPIPath } from "../../../actions/core/hash";
import { respondError, respondSuccess } from "../middleware/apiResponse";
const WEBAPI_URL =
process.env.RELAY_ROOT ||
@@ -64,11 +65,15 @@ export default async function ApiProxy(req, res) {
_.has(data, "@odata.nextLink") == true &&
((dataStr = JSON.stringify(data["@odata.nextLink"])),
(data["@odata.nextLink"] = dataStr.split("/v8.2/")[1]));
res.status(200).json(data);
return respondSuccess(res, data);
})
.catch((error) => {
consoleLogger(error);
res.status(400).json(error);
return respondError(res, {
status: 400,
code: "ADMIN_NEW_APPEALS_FETCH_FAILED",
message: "Failed to fetch new appeals"
});
});
return apiResponse;
+7 -2
View File
@@ -5,6 +5,7 @@ import { azureHeaders } from "../../../actions/core/headers";
import { consoleLogger } from "../../../actions/core/logger";
import { getToken } from "../../../actions/core/token";
import { hashAPIPath } from "../../../actions/core/hash";
import { respondError, respondSuccess } from "../middleware/apiResponse";
const WORDKEY = process.env.HASHKEY;
@@ -40,10 +41,14 @@ export default async function ApiProxy(req, res) {
const flattenedResults = data.value.map(flattenWatchlistEntry);
res.status(200).json(flattenedResults);
return respondSuccess(res, flattenedResults);
})
.catch((error) => {
consoleLogger(error);
res.status(400).json(error);
return respondError(res, {
status: 400,
code: "MAILING_LIST_FETCH_FAILED",
message: "Failed to fetch mailing list"
});
});
}
+12 -3
View File
@@ -28,13 +28,18 @@
import { consoleLogger, redactSensitive } from "../../../actions/core/logger";
import { isNonEmptyString, sanitizeString } from "../../../actions/core/guards";
import { getPreferredLanguage } from "../../../actions/services/accountService";
import { respondError, respondSuccess } from "../middleware/apiResponse";
export default async function ApiProxy(req, res) {
var data = req.body;
const emailAddress = sanitizeString(data?.emailAddress);
if (!isNonEmptyString(emailAddress)) {
return res.status(400).json({ error: "emailAddress is required" });
return respondError(res, {
status: 400,
code: "EMAIL_ADDRESS_REQUIRED",
message: "emailAddress is required"
});
}
data.emailAddress = emailAddress;
@@ -71,11 +76,15 @@ export default async function ApiProxy(req, res) {
})
.then((response) => {
//console.log("thisis the response", response);
return res.status(200).json(data);
return respondSuccess(res, data);
})
.catch((error) => {
consoleLogger(error);
return res.status(400).json(error);
return respondError(res, {
status: 400,
code: "EMAIL_NOTIFY_FAILED",
message: "Failed to send notify email"
});
});
//return res.status(200).json(data);
}
+27
View File
@@ -0,0 +1,27 @@
export const respondSuccess = (res, data, status = 200) => {
return res.status(status).json(data);
};
export const respondError = (
res,
{
status = 500,
code = "INTERNAL_SERVER_ERROR",
message = "Request failed",
details
} = {}
) => {
const payload = {
success: false,
error: {
code,
message
}
};
if (typeof details !== "undefined") {
payload.error.details = details;
}
return res.status(status).json(payload);
};