feat(libsql): introduce libsql service schema and update related tables

- Created a new SQL type for 'libsql' and added it to the serviceType enum.
- Established a 'libsql' table with necessary fields and constraints.
- Updated existing tables (backup, mount, volume_backup) to include foreign key references to 'libsql'.
- Adjusted the mount schema to incorporate 'libsql' as a valid service type, enhancing service management capabilities.
This commit is contained in:
Mauricio Siu
2026-03-23 16:14:37 -06:00
parent 116e9d85b7
commit 4b6f2c84ac
10 changed files with 143 additions and 8266 deletions

View File

@@ -12,6 +12,19 @@ import { mysql } from "./mysql";
import { postgres } from "./postgres";
import { redis } from "./redis";
export const serviceType = pgEnum("serviceType", [
"application",
"postgres",
"mysql",
"mariadb",
"mongo",
"redis",
"compose",
"libsql",
]);
export type ServiceType = (typeof serviceType.enumValues)[number];
export const mountType = pgEnum("mountType", ["bind", "volume", "file"]);
export const mounts = pgTable("mount", {
@@ -24,6 +37,7 @@ export const mounts = pgTable("mount", {
volumeName: text("volumeName"),
filePath: text("filePath"),
content: text("content"),
serviceType: serviceType("serviceType").notNull().default("application"),
mountPath: text("mountPath").notNull(),
applicationId: text("applicationId").references(
() => applications.applicationId,
@@ -96,6 +110,16 @@ const createSchema = createInsertSchema(mounts, {
mountPath: z.string().min(1),
mountId: z.string().optional(),
filePath: z.string().optional(),
serviceType: z.enum([
"application",
"postgres",
"mysql",
"mariadb",
"mongo",
"redis",
"compose",
"libsql",
]),
});
export const apiCreateMount = createSchema
@@ -106,19 +130,10 @@ export const apiCreateMount = createSchema
content: true,
mountPath: true,
filePath: true,
serviceType: true,
})
.extend({
serviceId: z.string().min(1),
serviceType: z.enum([
"application",
"postgres",
"mysql",
"mariadb",
"mongo",
"redis",
"compose",
"libsql",
]),
});
export const apiFindOneMount = z.object({
@@ -134,19 +149,14 @@ export const apiRemoveMount = createSchema
// })
.required();
export const apiFindMountByApplicationId = z.object({
serviceId: z.string().min(1),
serviceType: z.enum([
"application",
"postgres",
"mysql",
"mariadb",
"mongo",
"redis",
"compose",
"libsql",
]),
});
export const apiFindMountByApplicationId = createSchema
.pick({
serviceType: true,
})
.required()
.extend({
serviceId: z.string().min(1),
});
export const apiUpdateMount = createSchema.partial().extend({
mountId: z.string().min(1),

View File

@@ -1,5 +1,6 @@
import { relations } from "drizzle-orm";
import { boolean, integer, pgTable, text } from "drizzle-orm/pg-core";
import { serviceType } from "./mount";
import { createInsertSchema } from "drizzle-zod";
import { nanoid } from "nanoid";
import { z } from "zod";
@@ -23,6 +24,7 @@ export const volumeBackups = pgTable("volume_backup", {
name: text("name").notNull(),
volumeName: text("volumeName").notNull(),
prefix: text("prefix").notNull(),
serviceType: serviceType("serviceType").notNull().default("application"),
appName: text("appName")
.notNull()
.$defaultFn(() => generateAppName("volumeBackup")),