migration

This commit is contained in:
Théo LAGACHE
2025-05-16 15:54:17 +02:00
parent 01019fe1a3
commit 6f2523e524
285 changed files with 15492 additions and 46090 deletions
@@ -1,43 +1,41 @@
"use server"
"use server";
import {z} from "zod";
import { z } from "zod";
import { userAction } from "@/safe-actions";
import { db } from "@/db";
import { backup } from "@/db/schema";
import { ServerActionResult } from "@/types/action-type";
import { Backup } from "@/db/schema";
import {userAction} from "@/safe-actions";
import {prisma} from "@/prisma";
import {ServerActionResult} from "@/types/action-type";
import {Backup} from "@prisma/client";
export const backupButtonAction = userAction.schema(z.string()).action(async ({ parsedInput }): Promise<ServerActionResult<Backup>> => {
try {
const [createdBackup] = await db
.insert(backup)
.values({
databaseId: parsedInput,
status: "waiting",
})
.returning();
return {
success: true,
value: createdBackup,
actionSuccess: {
message: "Backup has been successfully created.",
messageParams: { databaseId: parsedInput },
},
};
} catch (error) {
console.error("Error creating backup:", error);
export const backupButtonAction = userAction
.schema(z.string())
.action(async ({ parsedInput, ctx }): Promise<ServerActionResult<Backup>> => {
try {
const backup = await prisma.backup.create({
data: {
databaseId: parsedInput,
status: "waiting",
},
});
return {
success: true,
value: backup,
actionSuccess: {
message: "Backup has been successfully created.",
messageParams: { databaseId: parsedInput },
},
};
} catch (error) {
console.error("Error creating backup:", error);
return {
success: false,
actionError: {
message: "Failed to create backup.",
status: 500,
cause: error instanceof Error ? error.message : "Unknown error",
messageParams: { databaseId: parsedInput },
},
};
}
});
return {
success: false,
actionError: {
message: "Failed to create backup.",
status: 500,
cause: error instanceof Error ? error.message : "Unknown error",
messageParams: { databaseId: parsedInput },
},
};
}
});
@@ -1,35 +1,34 @@
"use client"
"use client";
import {useRouter} from "next/navigation";
import { useRouter } from "next/navigation";
import {useMutation} from "@tanstack/react-query";
import {toast} from "sonner";
import { useMutation } from "@tanstack/react-query";
import { toast } from "sonner";
import {backupButtonAction} from "@/components/wrappers/dashboard/backup/backup-button/backup-button.action";
import {ButtonWithLoading} from "@/components/wrappers/common/button/button-with-loading";
import { backupButtonAction } from "@/components/wrappers/dashboard/backup/backup-button/backup-button.action";
import { ButtonWithLoading } from "@/components/wrappers/common/button/button-with-loading";
export type BackupButtonProps = {
databaseId: string
disable: boolean
}
databaseId: string;
disable: boolean;
};
export const BackupButton = (props: BackupButtonProps) => {
const router = useRouter();
const mutation = useMutation({
mutationFn: async (databaseId: string) => {
const backup = await backupButtonAction(databaseId)
console.log(backup)
if (backup.data.success) {
const backup = await backupButtonAction(databaseId);
if (backup?.data?.success) {
toast.success(backup.data.actionSuccess?.message || "Backup created successfully!");
router.refresh()
router.refresh();
} else {
toast.error(backup.serverError || "Failed to create backup.");
toast.error(backup?.serverError || "Failed to create backup.");
}
}
})
},
});
const HandleAction = async () => {
await mutation.mutateAsync(props.databaseId)
}
await mutation.mutateAsync(props.databaseId);
};
return (
<ButtonWithLoading
@@ -38,8 +37,8 @@ export const BackupButton = (props: BackupButtonProps) => {
isPending={mutation.isPending}
size={"default"}
onClick={async () => {
await HandleAction()
await HandleAction();
}}
/>
)
}
);
};