transactions are gonna drive me insane
This commit is contained in:
parent
d1528aa55b
commit
27b018a5de
|
@ -53,7 +53,7 @@ CREATE TABLE `service_domain` (
|
|||
--> statement-breakpoint
|
||||
CREATE TABLE `service_generation` (
|
||||
`id` text PRIMARY KEY DEFAULT (uuid_generate_v7()) NOT NULL,
|
||||
`service_id` text NOT NULL,
|
||||
`service_id` text NOT NULL DEFERRABLE INITIALLY DEFERRED,
|
||||
`deployment_id` text,
|
||||
`source` integer NOT NULL,
|
||||
`environment` text,
|
||||
|
|
|
@ -15,6 +15,7 @@ import {
|
|||
updateServiceProcedure,
|
||||
} from "./update";
|
||||
import { ServiceSource } from "~/server/db/types";
|
||||
import { SQLiteSyncDialect } from "drizzle-orm/sqlite-core";
|
||||
|
||||
export const serviceRouter = createTRPCRouter({
|
||||
containers: getServiceContainers,
|
||||
|
@ -59,8 +60,19 @@ export const serviceRouter = createTRPCRouter({
|
|||
.mutation(async ({ ctx, input }) => {
|
||||
// create a generation for the service
|
||||
const trxResult = await ctx.db.transaction(async (trx) => {
|
||||
// mark all deferrable
|
||||
trx.run(sql`PRAGMA defer_foreign_keys = true;`);
|
||||
// create initial generation
|
||||
const [generation] = await trx
|
||||
.insert(serviceGeneration)
|
||||
.values({
|
||||
serviceId: "",
|
||||
source: ServiceSource.Docker,
|
||||
dockerImage: "traefik/whoami",
|
||||
})
|
||||
.returning({
|
||||
id: serviceGeneration.id,
|
||||
});
|
||||
|
||||
assert(generation?.id, "Expected generation data to be returned");
|
||||
|
||||
// create the service
|
||||
const [data] = await trx
|
||||
|
@ -68,7 +80,7 @@ export const serviceRouter = createTRPCRouter({
|
|||
.values({
|
||||
name: input.name,
|
||||
projectId: ctx.project.getData().id,
|
||||
latestGenerationId: "",
|
||||
latestGenerationId: generation.id,
|
||||
redeploySecret: randomBytes(env.REDEPLOY_SECRET_BYTES).toString(
|
||||
"hex",
|
||||
),
|
||||
|
@ -79,26 +91,11 @@ export const serviceRouter = createTRPCRouter({
|
|||
|
||||
assert(data?.id, "Expected service data to be returned");
|
||||
|
||||
// create initial generation
|
||||
trx.run(sql`PRAGMA defer_foreign_keys = true;`);
|
||||
const [generation] = await trx
|
||||
.insert(serviceGeneration)
|
||||
.values({
|
||||
serviceId: data.id,
|
||||
source: ServiceSource.Docker,
|
||||
dockerImage: "traefik/whoami",
|
||||
})
|
||||
.returning({
|
||||
id: serviceGeneration.id,
|
||||
});
|
||||
|
||||
assert(generation?.id, "Expected generation data to be returned");
|
||||
|
||||
// update the service with the generation id
|
||||
await trx
|
||||
.update(service)
|
||||
.update(serviceGeneration)
|
||||
.set({
|
||||
latestGenerationId: generation.id,
|
||||
serviceId: data.id,
|
||||
})
|
||||
.where(eq(service.id, data.id))
|
||||
.execute();
|
||||
|
|
|
@ -68,7 +68,7 @@ function createDatabaseInstance() {
|
|||
),
|
||||
);
|
||||
|
||||
return drizzle(sqlite, {
|
||||
const orm = drizzle(sqlite, {
|
||||
schema,
|
||||
logger: {
|
||||
logQuery(query) {
|
||||
|
@ -76,6 +76,10 @@ function createDatabaseInstance() {
|
|||
},
|
||||
},
|
||||
});
|
||||
|
||||
// @ts-ignore
|
||||
orm.sqlite = sqlite;
|
||||
return orm;
|
||||
}
|
||||
|
||||
export const db = (globalForDB.db ??= createDatabaseInstance());
|
||||
|
|
Loading…
Reference in a new issue