Files
oneuptime/Common/Server/API/WorkspaceNotificationSummaryAPI.ts

68 lines
2.3 KiB
TypeScript

import UserMiddleware from "../Middleware/UserAuthorization";
import WorkspaceNotificationSummaryService, {
Service as WorkspaceNotificationSummaryServiceType,
} from "../Services/WorkspaceNotificationSummaryService";
import {
ExpressRequest,
ExpressResponse,
NextFunction,
} from "../Utils/Express";
import Response from "../Utils/Response";
import BaseAPI from "./BaseAPI";
import CommonAPI from "./CommonAPI";
import DatabaseCommonInteractionProps from "../../Types/BaseDatabase/DatabaseCommonInteractionProps";
import WorkspaceNotificationSummary from "../../Models/DatabaseModels/WorkspaceNotificationSummary";
import ObjectID from "../../Types/ObjectID";
import BadDataException from "../../Types/Exception/BadDataException";
export default class WorkspaceNotificationSummaryAPI extends BaseAPI<
WorkspaceNotificationSummary,
WorkspaceNotificationSummaryServiceType
> {
public constructor() {
super(WorkspaceNotificationSummary, WorkspaceNotificationSummaryService);
this.router.post(
`${new this.entityType().getCrudApiPath()?.toString()}/test/:workspaceNotificationSummaryId`,
UserMiddleware.getUserMiddleware,
async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
try {
const databaseProps: DatabaseCommonInteractionProps =
await CommonAPI.getDatabaseCommonInteractionProps(req);
const summaryId: ObjectID = new ObjectID(
req.params["workspaceNotificationSummaryId"] as string,
);
// Verify the summary belongs to the user's project
const summary: WorkspaceNotificationSummary | null =
await this.service.findOneById({
id: summaryId,
select: { projectId: true },
props: databaseProps,
});
if (!summary) {
return Response.sendErrorResponse(
req,
res,
new BadDataException("Summary not found or access denied"),
);
}
await this.service.testSummary({
summaryId: summaryId,
props: databaseProps,
projectId: databaseProps.tenantId!,
testByUserId: databaseProps.userId!,
});
return Response.sendEmptySuccessResponse(req, res);
} catch (e) {
next(e);
}
},
);
}
}