diff --git a/apps/dokploy/server/api/routers/backup.ts b/apps/dokploy/server/api/routers/backup.ts index 600fa5f51..242540893 100644 --- a/apps/dokploy/server/api/routers/backup.ts +++ b/apps/dokploy/server/api/routers/backup.ts @@ -43,7 +43,6 @@ import { restoreWebServerBackup, } from "@dokploy/server/utils/restore"; import { TRPCError } from "@trpc/server"; -import { observable } from "@trpc/server/observable"; import { z } from "zod"; import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc"; import { @@ -375,58 +374,59 @@ export const backupRouter = createTRPCRouter({ }, }) .input(apiRestoreBackup) - .subscription(async ({ input }) => { + .subscription(async function* ({ input, signal }) { const destination = await findDestinationById(input.destinationId); + const queue: string[] = []; + const done = false; if (input.backupType === "database") { if (input.databaseType === "postgres") { const postgres = await findPostgresById(input.databaseId); - return observable((emit) => { - restorePostgresBackup(postgres, destination, input, (log) => { - emit.next(log); - }); + restorePostgresBackup(postgres, destination, input, (log) => { + queue.push(log); }); } + if (input.databaseType === "mysql") { const mysql = await findMySqlById(input.databaseId); - return observable((emit) => { - restoreMySqlBackup(mysql, destination, input, (log) => { - emit.next(log); - }); + restoreMySqlBackup(mysql, destination, input, (log) => { + queue.push(log); }); } if (input.databaseType === "mariadb") { const mariadb = await findMariadbById(input.databaseId); - return observable((emit) => { - restoreMariadbBackup(mariadb, destination, input, (log) => { - emit.next(log); - }); + restoreMariadbBackup(mariadb, destination, input, (log) => { + queue.push(log); }); } if (input.databaseType === "mongo") { const mongo = await findMongoById(input.databaseId); - return observable((emit) => { - restoreMongoBackup(mongo, destination, input, (log) => { - emit.next(log); - }); + restoreMongoBackup(mongo, destination, input, (log) => { + queue.push(log); }); } if (input.databaseType === "web-server") { - return observable((emit) => { - restoreWebServerBackup(destination, input.backupFile, (log) => { - emit.next(log); - }); + restoreWebServerBackup(destination, input.backupFile, (log) => { + queue.push(log); }); } } if (input.backupType === "compose") { const compose = await findComposeById(input.databaseId); - return observable((emit) => { - restoreComposeBackup(compose, destination, input, (log) => { - emit.next(log); - }); + restoreComposeBackup(compose, destination, input, (log) => { + queue.push(log); }); } - return true; + while (!done || queue.length > 0) { + if (queue.length > 0) { + yield queue.shift()!; + } else { + await new Promise((r) => setTimeout(r, 50)); + } + + if (signal?.aborted) { + return; + } + } }), }); diff --git a/apps/dokploy/server/api/routers/project.ts b/apps/dokploy/server/api/routers/project.ts index c25fdd4a5..4f3bc6334 100644 --- a/apps/dokploy/server/api/routers/project.ts +++ b/apps/dokploy/server/api/routers/project.ts @@ -473,6 +473,7 @@ export const projectRouter = createTRPCRouter({ await createPreviewDeployment({ ...rest, applicationId: newApplication.applicationId, + domainId: undefined, }); } diff --git a/packages/server/src/db/schema/application.ts b/packages/server/src/db/schema/application.ts index 18ba78e8a..a639d1742 100644 --- a/packages/server/src/db/schema/application.ts +++ b/packages/server/src/db/schema/application.ts @@ -331,6 +331,7 @@ const createSchema = createInsertSchema(applications, { sourceType: z .enum(["github", "docker", "git", "gitlab", "bitbucket", "gitea", "drop"]) .optional(), + triggerType: z.enum(["push", "tag"]).optional(), applicationStatus: z.enum(["idle", "running", "done", "error"]), buildType: z.enum([ "dockerfile", diff --git a/packages/server/src/db/schema/compose.ts b/packages/server/src/db/schema/compose.ts index 0c9b1ba28..531449bfa 100644 --- a/packages/server/src/db/schema/compose.ts +++ b/packages/server/src/db/schema/compose.ts @@ -164,6 +164,11 @@ const createSchema = createInsertSchema(compose, { composePath: z.string().min(1), composeType: z.enum(["docker-compose", "stack"]).optional(), watchPaths: z.array(z.string()).optional(), + sourceType: z + .enum(["git", "github", "gitlab", "bitbucket", "gitea", "raw"]) + .optional(), + triggerType: z.enum(["push", "tag"]).optional(), + composeStatus: z.enum(["idle", "running", "done", "error"]).optional(), }); export const apiCreateCompose = createSchema.pick({ diff --git a/packages/server/src/db/schema/server.ts b/packages/server/src/db/schema/server.ts index 704748a1f..7daab58cd 100644 --- a/packages/server/src/db/schema/server.ts +++ b/packages/server/src/db/schema/server.ts @@ -133,6 +133,7 @@ const createSchema = createInsertSchema(server, { serverId: z.string().min(1), name: z.string().min(1), description: z.string().optional(), + serverType: z.enum(["deploy", "build"]).optional(), }); export const apiCreateServer = createSchema