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:
@@ -73,7 +73,6 @@ export default async ({
|
|||||||
title: "",
|
title: "",
|
||||||
verbose,
|
verbose,
|
||||||
}
|
}
|
||||||
const dbName = !skipDb && !dbUrl ? `medusa-${nanoid(4)}` : ""
|
|
||||||
let isProjectCreated = false
|
let isProjectCreated = false
|
||||||
let isDbInitialized = false
|
let isDbInitialized = false
|
||||||
let printedMessage = false
|
let printedMessage = false
|
||||||
@@ -101,13 +100,18 @@ export default async ({
|
|||||||
const projectPath = getProjectPath(projectName, directoryPath)
|
const projectPath = getProjectPath(projectName, directoryPath)
|
||||||
const installNextjs = withNextjsStarter || (await askForNextjsStarter())
|
const installNextjs = withNextjsStarter || (await askForNextjsStarter())
|
||||||
|
|
||||||
let { client, dbConnectionString } = !skipDb
|
let dbName = !skipDb && !dbUrl ? `medusa-${slugify(projectName)}` : ""
|
||||||
|
|
||||||
|
let { client, dbConnectionString, ...rest } = !skipDb
|
||||||
? await getDbClientAndCredentials({
|
? await getDbClientAndCredentials({
|
||||||
dbName,
|
dbName,
|
||||||
dbUrl,
|
dbUrl,
|
||||||
verbose,
|
verbose,
|
||||||
})
|
})
|
||||||
: { client: null, dbConnectionString: "" }
|
: { client: null, dbConnectionString: "" }
|
||||||
|
if ("dbName" in rest) {
|
||||||
|
dbName = rest.dbName as string
|
||||||
|
}
|
||||||
isDbInitialized = true
|
isDbInitialized = true
|
||||||
|
|
||||||
track("CMA_OPTIONS", {
|
track("CMA_OPTIONS", {
|
||||||
@@ -178,6 +182,7 @@ export default async ({
|
|||||||
try {
|
try {
|
||||||
inviteToken = await prepareProject({
|
inviteToken = await prepareProject({
|
||||||
directory: projectPath,
|
directory: projectPath,
|
||||||
|
dbName,
|
||||||
dbConnectionString,
|
dbConnectionString,
|
||||||
seed,
|
seed,
|
||||||
spinner,
|
spinner,
|
||||||
|
|||||||
@@ -16,6 +16,12 @@ export default async function createDb({ client, db }: CreateDbOptions) {
|
|||||||
await client.query(`CREATE DATABASE "${db}"`)
|
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({
|
export async function runCreateDb({
|
||||||
client,
|
client,
|
||||||
dbName,
|
dbName,
|
||||||
@@ -61,6 +67,7 @@ async function getForDbName({
|
|||||||
}): Promise<{
|
}): Promise<{
|
||||||
client: pg.Client
|
client: pg.Client
|
||||||
dbConnectionString: string
|
dbConnectionString: string
|
||||||
|
dbName: string
|
||||||
}> {
|
}> {
|
||||||
let client!: pg.Client
|
let client!: pg.Client
|
||||||
let postgresUsername = "postgres"
|
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
|
// format connection string
|
||||||
const dbConnectionString = formatConnectionString({
|
const dbConnectionString = formatConnectionString({
|
||||||
user: postgresUsername,
|
user: postgresUsername,
|
||||||
@@ -143,6 +167,7 @@ async function getForDbName({
|
|||||||
return {
|
return {
|
||||||
client,
|
client,
|
||||||
dbConnectionString,
|
dbConnectionString,
|
||||||
|
dbName
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ const DEFAULT_REDIS_URL = "redis://localhost:6379"
|
|||||||
|
|
||||||
type PrepareOptions = {
|
type PrepareOptions = {
|
||||||
directory: string
|
directory: string
|
||||||
|
dbName?: string
|
||||||
dbConnectionString: string
|
dbConnectionString: string
|
||||||
seed?: boolean
|
seed?: boolean
|
||||||
spinner: Ora
|
spinner: Ora
|
||||||
@@ -31,6 +32,7 @@ type PrepareOptions = {
|
|||||||
|
|
||||||
export default async ({
|
export default async ({
|
||||||
directory,
|
directory,
|
||||||
|
dbName,
|
||||||
dbConnectionString,
|
dbConnectionString,
|
||||||
seed,
|
seed,
|
||||||
spinner,
|
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`
|
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 (!skipDb) {
|
||||||
|
if (dbName) {
|
||||||
|
env += `${EOL}DB_NAME=${dbName}`
|
||||||
|
dbConnectionString = dbConnectionString.replace(dbName, "$DB_NAME")
|
||||||
|
}
|
||||||
env += `${EOL}DATABASE_URL=${dbConnectionString}`
|
env += `${EOL}DATABASE_URL=${dbConnectionString}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user