import { TRPCError } from "@trpc/server"; import { eq } from "drizzle-orm"; import type { z } from "zod"; import { db } from "../db"; import { type createVolumeBackupSchema, type updateVolumeBackupSchema, volumeBackups, } from "../db/schema"; export const findVolumeBackupById = async (volumeBackupId: string) => { const volumeBackup = await db.query.volumeBackups.findFirst({ where: eq(volumeBackups.volumeBackupId, volumeBackupId), with: { application: { with: { environment: { with: { project: true, }, }, }, }, postgres: { with: { environment: { with: { project: true, }, }, }, }, mysql: { with: { environment: { with: { project: true, }, }, }, }, mariadb: { with: { environment: { with: { project: true, }, }, }, }, mongo: { with: { environment: { with: { project: true, }, }, }, }, redis: { with: { environment: { with: { project: true, }, }, }, }, compose: { with: { environment: { with: { project: true, }, }, }, }, destination: true, }, }); if (!volumeBackup) { throw new TRPCError({ code: "NOT_FOUND", message: "Volume backup not found", }); } return volumeBackup; }; export const createVolumeBackup = async ( volumeBackup: z.infer, ) => { const newVolumeBackup = await db .insert(volumeBackups) .values(volumeBackup as typeof volumeBackups.$inferInsert) .returning() .then((e) => e[0]); return newVolumeBackup; }; export const removeVolumeBackup = async (volumeBackupId: string) => { await db .delete(volumeBackups) .where(eq(volumeBackups.volumeBackupId, volumeBackupId)); }; export const updateVolumeBackup = async ( volumeBackupId: string, volumeBackup: z.infer, ) => { return await db .update(volumeBackups) .set(volumeBackup as Partial) .where(eq(volumeBackups.volumeBackupId, volumeBackupId)) .returning() .then((e) => e[0]); };