buster/packages/database/src/queries/shortcuts/update-shortcut.ts

44 lines
1.2 KiB
TypeScript
Raw Normal View History

import { and, eq, isNull } from 'drizzle-orm';
import { z } from 'zod';
import { db } from '../../connection';
import { shortcuts } from '../../schema';
export const UpdateShortcutInputSchema = z.object({
id: z.string().uuid(),
name: z.string().min(1).max(255).optional(),
instructions: z.string().min(1).optional(),
2025-09-13 01:25:43 +08:00
shareWithWorkspace: z.boolean().optional(),
updatedBy: z.string().uuid(),
});
export type UpdateShortcutInput = z.infer<typeof UpdateShortcutInputSchema>;
export async function updateShortcut(input: UpdateShortcutInput) {
const validated = UpdateShortcutInputSchema.parse(input);
2025-09-22 22:59:25 +08:00
const updateData: Record<string, unknown> = {
updatedBy: validated.updatedBy,
updatedAt: new Date().toISOString(),
};
if (validated.name !== undefined) {
updateData.name = validated.name;
}
if (validated.instructions !== undefined) {
updateData.instructions = validated.instructions;
}
2025-09-13 01:25:43 +08:00
if (validated.shareWithWorkspace !== undefined) {
updateData.shareWithWorkspace = validated.shareWithWorkspace;
}
const [updated] = await db
.update(shortcuts)
.set(updateData)
.where(and(eq(shortcuts.id, validated.id), isNull(shortcuts.deletedAt)))
.returning();
return updated;
}