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