Files
HiveGrid-Wireframes/hivegrid-cloud/apps/web/app/modules/helpDesk/services/Feedback.server.ts
T

61 lines
1.5 KiB
TypeScript

import { TFunction } from "i18next";
import { db } from "~/utils/db.server";
import { createFeedback } from "../db/feedback.db.server";
import NotificationService from "~/modules/notifications/services/.server/NotificationService";
import { redactFeedbackText } from "./FeedbackRedaction.server";
const MAX_FEEDBACK_PER_DAY = 3;
async function send({
t,
tenantId,
userId,
message,
fromUrl,
}: {
t: TFunction;
tenantId: string | null;
userId: string | null;
message: string;
fromUrl: string;
}) {
const redactedMessage = redactFeedbackText(message);
const redactedFromUrl = redactFeedbackText(fromUrl);
if (!redactedMessage) {
throw Error("Message is required");
}
if (tenantId) {
const feedbackToday = await db.feedback.count({ where: { tenantId } });
if (feedbackToday >= MAX_FEEDBACK_PER_DAY) {
throw Error(t("feedback.limitReached"));
}
} else if (userId) {
const feedbackToday = await db.feedback.count({ where: { userId } });
if (feedbackToday >= MAX_FEEDBACK_PER_DAY) {
throw Error(t("feedback.limitReached"));
}
}
await NotificationService.sendToRoles({
channel: "admin-users",
tenantId: null,
notification: {
message: "[New Feedback] " + redactedMessage,
},
});
return await createFeedback({ tenantId, userId, message: redactedMessage, fromUrl: redactedFromUrl });
}
async function deleteMany({ ids }: { ids: string[] }) {
return await db.feedback.deleteMany({
where: {
id: { in: ids },
},
});
}
export default {
send,
deleteMany,
};