From 72c366aa10d00698ab589992172e6fadd7831f86 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sat, 8 Jun 2024 16:41:05 -0600 Subject: [PATCH] refactor: slugify and add hash to appName --- server/db/schema/application.ts | 18 ++++++++++++------ server/db/schema/compose.ts | 20 ++++++++++++++------ server/db/schema/mariadb.ts | 8 +++++++- server/db/schema/mongo.ts | 8 +++++++- server/db/schema/mysql.ts | 8 +++++++- server/db/schema/postgres.ts | 8 +++++++- server/db/schema/redis.ts | 9 +++++++-- 7 files changed, 61 insertions(+), 18 deletions(-) diff --git a/server/db/schema/application.ts b/server/db/schema/application.ts index 8f5ec01a..2b9f7196 100644 --- a/server/db/schema/application.ts +++ b/server/db/schema/application.ts @@ -20,6 +20,7 @@ import { } from "drizzle-orm/pg-core"; import { generateAppName } from "./utils"; import { registry } from "./registry"; +import { generatePassword } from "@/templates/utils"; export const sourceType = pgEnum("sourceType", ["docker", "git", "github"]); @@ -307,12 +308,17 @@ const createSchema = createInsertSchema(applications, { networkSwarm: NetworkSwarmSchema.nullable(), }); -export const apiCreateApplication = createSchema.pick({ - name: true, - appName: true, - description: true, - projectId: true, -}); +export const apiCreateApplication = createSchema + .pick({ + name: true, + appName: true, + description: true, + projectId: true, + }) + .transform((data) => ({ + ...data, + appName: `${data.appName}-${generatePassword(6)}` || generateAppName("app"), + })); export const apiFindOneApplication = createSchema .pick({ diff --git a/server/db/schema/compose.ts b/server/db/schema/compose.ts index f94711e0..bc1e641f 100644 --- a/server/db/schema/compose.ts +++ b/server/db/schema/compose.ts @@ -8,6 +8,7 @@ import { deployments } from "./deployment"; import { generateAppName } from "./utils"; import { applicationStatus } from "./shared"; import { mounts } from "./mount"; +import { generatePassword } from "@/templates/utils"; export const sourceTypeCompose = pgEnum("sourceTypeCompose", [ "git", @@ -74,12 +75,19 @@ const createSchema = createInsertSchema(compose, { composeType: z.enum(["docker-compose", "stack"]).optional(), }); -export const apiCreateCompose = createSchema.pick({ - name: true, - description: true, - projectId: true, - composeType: true, -}); +export const apiCreateCompose = createSchema + .pick({ + name: true, + description: true, + projectId: true, + composeType: true, + appName: true, + }) + .transform((data) => ({ + ...data, + appName: + `${data.appName}-${generatePassword(6)}` || generateAppName("compose"), + })); export const apiCreateComposeByTemplate = createSchema .pick({ diff --git a/server/db/schema/mariadb.ts b/server/db/schema/mariadb.ts index 96e65a71..83ec2898 100644 --- a/server/db/schema/mariadb.ts +++ b/server/db/schema/mariadb.ts @@ -8,6 +8,7 @@ import { projects } from "./project"; import { backups } from "./backups"; import { mounts } from "./mount"; import { generateAppName } from "./utils"; +import { generatePassword } from "@/templates/utils"; export const mariadb = pgTable("mariadb", { mariadbId: text("mariadbId") @@ -88,7 +89,12 @@ export const apiCreateMariaDB = createSchema databaseUser: true, databasePassword: true, }) - .required(); + .required() + .transform((data) => ({ + ...data, + appName: + `${data.appName}-${generatePassword(6)}` || generateAppName("mariadb"), + })); export const apiFindOneMariaDB = createSchema .pick({ diff --git a/server/db/schema/mongo.ts b/server/db/schema/mongo.ts index bbd94c2c..2dd1cbb7 100644 --- a/server/db/schema/mongo.ts +++ b/server/db/schema/mongo.ts @@ -8,6 +8,7 @@ import { projects } from "./project"; import { backups } from "./backups"; import { mounts } from "./mount"; import { generateAppName } from "./utils"; +import { generatePassword } from "@/templates/utils"; export const mongo = pgTable("mongo", { mongoId: text("mongoId") @@ -80,7 +81,12 @@ export const apiCreateMongo = createSchema databaseUser: true, databasePassword: true, }) - .required(); + .required() + .transform((data) => ({ + ...data, + appName: + `${data.appName}-${generatePassword(6)}` || generateAppName("postgres"), + })); export const apiFindOneMongo = createSchema .pick({ diff --git a/server/db/schema/mysql.ts b/server/db/schema/mysql.ts index 986ab88d..0efbf28a 100644 --- a/server/db/schema/mysql.ts +++ b/server/db/schema/mysql.ts @@ -8,6 +8,7 @@ import { projects } from "./project"; import { backups } from "./backups"; import { mounts } from "./mount"; import { generateAppName } from "./utils"; +import { generatePassword } from "@/templates/utils"; export const mysql = pgTable("mysql", { mysqlId: text("mysqlId") @@ -86,7 +87,12 @@ export const apiCreateMySql = createSchema databasePassword: true, databaseRootPassword: true, }) - .required(); + .required() + .transform((data) => ({ + ...data, + appName: + `${data.appName}-${generatePassword(6)}` || generateAppName("mysql"), + })); export const apiFindOneMySql = createSchema .pick({ diff --git a/server/db/schema/postgres.ts b/server/db/schema/postgres.ts index 9684f478..5e9077da 100644 --- a/server/db/schema/postgres.ts +++ b/server/db/schema/postgres.ts @@ -8,6 +8,7 @@ import { projects } from "./project"; import { backups } from "./backups"; import { mounts } from "./mount"; import { generateAppName } from "./utils"; +import { generatePassword } from "@/templates/utils"; export const postgres = pgTable("postgres", { postgresId: text("postgresId") @@ -82,7 +83,12 @@ export const apiCreatePostgres = createSchema projectId: true, description: true, }) - .required(); + .required() + .transform((data) => ({ + ...data, + appName: + `${data.appName}-${generatePassword(6)}` || generateAppName("postgres"), + })); export const apiFindOnePostgres = createSchema .pick({ diff --git a/server/db/schema/redis.ts b/server/db/schema/redis.ts index 003bbdd2..eb919764 100644 --- a/server/db/schema/redis.ts +++ b/server/db/schema/redis.ts @@ -7,6 +7,7 @@ import { integer, pgTable, text } from "drizzle-orm/pg-core"; import { projects } from "./project"; import { mounts } from "./mount"; import { generateAppName } from "./utils"; +import { generatePassword } from "@/templates/utils"; export const redis = pgTable("redis", { redisId: text("redisId") @@ -75,8 +76,12 @@ export const apiCreateRedis = createSchema projectId: true, description: true, }) - - .required(); + .required() + .transform((data) => ({ + ...data, + appName: + `${data.appName}-${generatePassword(6)}` || generateAppName("redis"), + })); export const apiFindOneRedis = createSchema .pick({