Improve reminders router

This commit is contained in:
Carlos Monastyrski
2025-07-11 15:26:09 -03:00
parent 0af00ce82d
commit 0e680e366b
5 changed files with 44 additions and 18 deletions

View File

@@ -42,7 +42,7 @@ import { registerProjectEnvRouter } from "./project-env-router";
import { registerProjectKeyRouter } from "./project-key-router";
import { registerProjectMembershipRouter } from "./project-membership-router";
import { registerProjectRouter } from "./project-router";
import { registerReminderRouter } from "./reminder-router";
import { SECRET_REMINDER_REGISTER_ROUTER_MAP } from "./reminder-routers";
import { registerSecretFolderRouter } from "./secret-folder-router";
import { registerSecretImportRouter } from "./secret-import-router";
import { registerSecretRequestsRouter } from "./secret-requests-router";
@@ -85,7 +85,6 @@ export const registerV1Routes = async (server: FastifyZodProvider) => {
await server.register(registerInviteOrgRouter, { prefix: "/invite-org" });
await server.register(registerUserActionRouter, { prefix: "/user-action" });
await server.register(registerSecretImportRouter, { prefix: "/secret-imports" });
await server.register(registerReminderRouter, { prefix: "/reminders" });
await server.register(registerSecretFolderRouter, { prefix: "/folders" });
await server.register(
@@ -174,4 +173,14 @@ export const registerV1Routes = async (server: FastifyZodProvider) => {
},
{ prefix: "/secret-syncs" }
);
await server.register(
async (reminderRouter) => {
// register service specific reminder endpoints (reminders/secret)
for await (const [reminderType, router] of Object.entries(SECRET_REMINDER_REGISTER_ROUTER_MAP)) {
await reminderRouter.register(router, { prefix: `/${reminderType}` });
}
},
{ prefix: "/reminders" }
);
};

View File

@@ -0,0 +1,8 @@
import { ReminderType } from "@app/services/reminder/reminder-enums";
import { registerSecretReminderRouter } from "./secret-reminder-router";
export const SECRET_REMINDER_REGISTER_ROUTER_MAP: Record<ReminderType, (server: FastifyZodProvider) => Promise<void>> =
{
[ReminderType.SECRETS]: registerSecretReminderRouter
};

View File

@@ -6,18 +6,20 @@ import { readLimit, writeLimit } from "@app/server/config/rateLimiter";
import { verifyAuth } from "@app/server/plugins/auth/verify-auth";
import { AuthMode } from "@app/services/auth/auth-type";
export const registerReminderRouter = async (server: FastifyZodProvider) => {
export const registerSecretReminderRouter = async (server: FastifyZodProvider) => {
server.route({
url: "/:projectId/reminder/:secretId",
url: "/:secretId",
method: "POST",
config: {
rateLimit: writeLimit
},
schema: {
params: z.object({
projectId: z.string().uuid(),
secretId: z.string().uuid()
}),
querystring: z.object({
projectId: z.string().uuid()
}),
body: z
.object({
message: z.string().trim().max(1024).optional(),
@@ -41,7 +43,7 @@ export const registerReminderRouter = async (server: FastifyZodProvider) => {
actor: req.permission.type,
actorOrgId: req.permission.orgId,
actorAuthMethod: req.permission.authMethod,
projectId: req.params.projectId,
projectId: req.query.projectId,
reminder: {
secretId: req.params.secretId,
message: req.body.message,
@@ -54,7 +56,7 @@ export const registerReminderRouter = async (server: FastifyZodProvider) => {
await server.services.auditLog.createAuditLog({
...req.auditLogInfo,
orgId: req.permission.orgId,
projectId: req.params.projectId,
projectId: req.query.projectId,
event: {
type: EventType.CREATE_SECRET_REMINDER,
metadata: {
@@ -72,16 +74,18 @@ export const registerReminderRouter = async (server: FastifyZodProvider) => {
});
server.route({
url: "/:projectId/reminder/:secretId",
url: "/:secretId",
method: "GET",
config: {
rateLimit: readLimit
},
schema: {
params: z.object({
projectId: z.string().uuid(),
secretId: z.string().uuid()
}),
querystring: z.object({
projectId: z.string().uuid()
}),
response: {
200: z.object({
reminder: RemindersSchema.extend({
@@ -100,13 +104,13 @@ export const registerReminderRouter = async (server: FastifyZodProvider) => {
actorOrgId: req.permission.orgId,
actorAuthMethod: req.permission.authMethod,
secretId: req.params.secretId,
projectId: req.params.projectId
projectId: req.query.projectId
});
await server.services.auditLog.createAuditLog({
...req.auditLogInfo,
orgId: req.permission.orgId,
projectId: req.params.projectId,
projectId: req.query.projectId,
event: {
type: EventType.GET_SECRET_REMINDER,
metadata: {
@@ -119,16 +123,18 @@ export const registerReminderRouter = async (server: FastifyZodProvider) => {
});
server.route({
url: "/:projectId/reminder/:secretId",
url: "/:secretId",
method: "DELETE",
config: {
rateLimit: writeLimit
},
schema: {
params: z.object({
projectId: z.string().uuid(),
secretId: z.string().uuid()
}),
querystring: z.object({
projectId: z.string().uuid()
}),
response: {
200: z.object({
message: z.string()
@@ -143,13 +149,13 @@ export const registerReminderRouter = async (server: FastifyZodProvider) => {
actorOrgId: req.permission.orgId,
actorAuthMethod: req.permission.authMethod,
secretId: req.params.secretId,
projectId: req.params.projectId
projectId: req.query.projectId
});
await server.services.auditLog.createAuditLog({
...req.auditLogInfo,
orgId: req.permission.orgId,
projectId: req.params.projectId,
projectId: req.query.projectId,
event: {
type: EventType.DELETE_SECRET_REMINDER,
metadata: {

View File

@@ -0,0 +1,3 @@
export enum ReminderType {
SECRETS = "secrets"
}

View File

@@ -15,7 +15,7 @@ export const useCreateReminder = (secretId: string, projectId: string) => {
return useMutation<Reminder, object, CreateReminderDTO>({
mutationFn: async ({ message, repeatDays, nextReminderDate, recipients }) => {
const { data } = await apiRequest.post<{ reminder: Reminder }>(
`/api/v1/reminders/${projectId}/reminder/${secretId}`,
`/api/v1/reminders/secrets/${secretId}?projectId=${projectId}`,
{
message,
repeatDays,
@@ -37,7 +37,7 @@ export const useDeleteReminder = (secretId: string, projectId: string) => {
return useMutation<Reminder, object, DeleteReminderDTO>({
mutationFn: async () => {
const { data } = await apiRequest.delete<{ reminder: Reminder }>(
`/api/v1/reminders/${projectId}/reminder/${secretId}`
`/api/v1/reminders/secrets/${secretId}?projectId=${projectId}`
);
return data.reminder;
},
@@ -52,7 +52,7 @@ export const useGetReminder = (secretId: string, projectId: string) => {
queryKey: reminderKeys.getReminder(secretId, projectId),
queryFn: async () => {
const { data } = await apiRequest.get<{ reminder: Reminder }>(
`/api/v1/reminders/${projectId}/reminder/${secretId}`
`/api/v1/reminders/secrets/${secretId}?projectId=${projectId}`
);
return data.reminder;
},