feat(create-medusa-app): set database name to project name (#8727)

* add check and prompt for db name

* change var format

* remove log

* remove log
This commit is contained in:
Shahed Nasser
2024-08-23 14:17:37 +03:00
committed by GitHub
parent aa1ef20172
commit 408ed2ee45
3 changed files with 38 additions and 2 deletions

View File

@@ -73,7 +73,6 @@ export default async ({
title: "",
verbose,
}
const dbName = !skipDb && !dbUrl ? `medusa-${nanoid(4)}` : ""
let isProjectCreated = false
let isDbInitialized = false
let printedMessage = false
@@ -101,13 +100,18 @@ export default async ({
const projectPath = getProjectPath(projectName, directoryPath)
const installNextjs = withNextjsStarter || (await askForNextjsStarter())
let { client, dbConnectionString } = !skipDb
let dbName = !skipDb && !dbUrl ? `medusa-${slugify(projectName)}` : ""
let { client, dbConnectionString, ...rest } = !skipDb
? await getDbClientAndCredentials({
dbName,
dbUrl,
verbose,
})
: { client: null, dbConnectionString: "" }
if ("dbName" in rest) {
dbName = rest.dbName as string
}
isDbInitialized = true
track("CMA_OPTIONS", {
@@ -178,6 +182,7 @@ export default async ({
try {
inviteToken = await prepareProject({
directory: projectPath,
dbName,
dbConnectionString,
seed,
spinner,

View File

@@ -16,6 +16,12 @@ export default async function createDb({ client, db }: CreateDbOptions) {
await client.query(`CREATE DATABASE "${db}"`)
}
async function doesDbExist (client: pg.Client, dbName: string): Promise<boolean> {
const result = await client.query(`SELECT datname FROM pg_catalog.pg_database WHERE datname='${dbName}';`)
return !!result.rowCount
}
export async function runCreateDb({
client,
dbName,
@@ -61,6 +67,7 @@ async function getForDbName({
}): Promise<{
client: pg.Client
dbConnectionString: string
dbName: string
}> {
let client!: pg.Client
let postgresUsername = "postgres"
@@ -132,6 +139,23 @@ async function getForDbName({
}
}
// check if database exists
if (await doesDbExist(client, dbName)) {
const { newDbName } = await inquirer.prompt([
{
type: "input",
name: "newDbName",
message: `A database already exists with the name ${dbName}, please enter a name for the database:`,
default: dbName,
validate: (input) => {
return typeof input === "string" && input.length > 0 && input !== dbName
},
},
])
dbName = newDbName
}
// format connection string
const dbConnectionString = formatConnectionString({
user: postgresUsername,
@@ -143,6 +167,7 @@ async function getForDbName({
return {
client,
dbConnectionString,
dbName
}
}

View File

@@ -16,6 +16,7 @@ const DEFAULT_REDIS_URL = "redis://localhost:6379"
type PrepareOptions = {
directory: string
dbName?: string
dbConnectionString: string
seed?: boolean
spinner: Ora
@@ -31,6 +32,7 @@ type PrepareOptions = {
export default async ({
directory,
dbName,
dbConnectionString,
seed,
spinner,
@@ -73,6 +75,10 @@ export default async ({
let env = `MEDUSA_ADMIN_ONBOARDING_TYPE=${onboardingType}${EOL}STORE_CORS=${STORE_CORS}${EOL}ADMIN_CORS=${ADMIN_CORS}${EOL}AUTH_CORS=${AUTH_CORS}${EOL}REDIS_URL=${DEFAULT_REDIS_URL}${EOL}JWT_SECRET=supersecret${EOL}COOKIE_SECRET=supersecret`
if (!skipDb) {
if (dbName) {
env += `${EOL}DB_NAME=${dbName}`
dbConnectionString = dbConnectionString.replace(dbName, "$DB_NAME")
}
env += `${EOL}DATABASE_URL=${dbConnectionString}`
}