🗃️ [drust] Nivel pro para los scripts de la BD
This commit is contained in:
parent
1b413a2aaf
commit
62f5703989
8 changed files with 252 additions and 219 deletions
8
.gitignore
vendored
8
.gitignore
vendored
|
|
@ -1,5 +1,13 @@
|
||||||
|
# Ignora directorios de compilación
|
||||||
**/target
|
**/target
|
||||||
|
|
||||||
|
# Archivos de log
|
||||||
**/log/*.log*
|
**/log/*.log*
|
||||||
|
|
||||||
|
# Archivos de configuración locales
|
||||||
**/local.*.toml
|
**/local.*.toml
|
||||||
**/local.toml
|
**/local.toml
|
||||||
|
.env
|
||||||
|
|
||||||
|
# Directorio de trabajo
|
||||||
workdir
|
workdir
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ adaptarse a las necesidades de cada solución web implementando:
|
||||||
las APIs de `PageTop` o de paquetes de terceros.
|
las APIs de `PageTop` o de paquetes de terceros.
|
||||||
|
|
||||||
|
|
||||||
# ⚡️ Inicio rápido
|
# ⚡️ Guía rápida
|
||||||
|
|
||||||
La aplicación más sencilla de `PageTop` se ve así:
|
La aplicación más sencilla de `PageTop` se ve así:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
Modestamente inspirado en [Drupal](https://www.drupal.org), `Drust` exprime `PageTop` para
|
`Drust` exprime `PageTop` para desarrollar un *Sistema de Gestión de Contenidos* (CMS) básico,
|
||||||
desarrollar un *Sistema de Gestión de Contenidos* (CMS) básico, que permita construir sitios web
|
modestamente inspirado en [Drupal](https://www.drupal.org), que permita construir sitios web
|
||||||
dinámicos, manejables y personalizables; y facilite a los usuarios la gestión de una variedad de
|
dinámicos, manejables y personalizables; y facilite a los usuarios la gestión de una variedad de
|
||||||
contenidos de manera sencilla.
|
contenidos de manera sencilla.
|
||||||
|
|
||||||
|
|
@ -23,6 +23,73 @@ clásica combinando SSR (*renderizado en el servidor*), HTML, CSS y JS, para cre
|
||||||
modulares, extensibles y configurables.
|
modulares, extensibles y configurables.
|
||||||
|
|
||||||
|
|
||||||
|
# ⚡️ Guía rápida
|
||||||
|
|
||||||
|
`Drust` requiere una base de datos para funcionar. La aplicación se encarga de ejecutar las
|
||||||
|
migraciones y cargar los datos mínimos necesarios, pero para crear o borrar la base de datos puedes
|
||||||
|
usar los scripts `db-create.sh` y `db-delete.sh` que se encuentran en el directorio `tools` del
|
||||||
|
*workspace*.
|
||||||
|
|
||||||
|
## Configuración de `.env`
|
||||||
|
|
||||||
|
Para simplificar la configuración, en el directorio `tools` puedes crear un archivo `.env` para
|
||||||
|
definir las variables de entorno que requieren los scripts para gestionar la base de datos, aunque
|
||||||
|
su presencia es **opcional**. Si no se encuentra `.env` o carece de ciertos valores, los scripts
|
||||||
|
solicitarán las variables necesarias para su ejecución.
|
||||||
|
|
||||||
|
> **Nota**: Evita usar caracteres especiales como `@`, `#`, `?`, `:` en `DB_PASS` para prevenir
|
||||||
|
> posibles problemas de interpretación de `DATABASE_URL` en el código.
|
||||||
|
|
||||||
|
### Ejemplo de `.env`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Sistema de base de datos
|
||||||
|
DB_SYSTEM="psql"
|
||||||
|
|
||||||
|
# Nombre del host
|
||||||
|
DB_HOST="localhost"
|
||||||
|
|
||||||
|
# Puerto de conexión
|
||||||
|
DB_PORT="5432"
|
||||||
|
|
||||||
|
# Nombre de la base de datos
|
||||||
|
DB_NAME="drust"
|
||||||
|
|
||||||
|
# Usuario de la base de datos
|
||||||
|
DB_USER="drust"
|
||||||
|
|
||||||
|
# Contraseña para el usuario de la base de datos
|
||||||
|
# Evita usar caracteres especiales como '@', '#', '?', ':', ';' o espacios
|
||||||
|
DB_PASS="password"
|
||||||
|
|
||||||
|
# Usuario administrador
|
||||||
|
DB_ADMIN="postgres"
|
||||||
|
|
||||||
|
# Contraseña del usuario administrador
|
||||||
|
DB_ADMIN_PASS="adminpassword"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Ejecución de los scripts
|
||||||
|
|
||||||
|
Asegúrate de que los scripts tienen permisos de ejecución:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
chmod +x db-create.sh db-delete.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Y ejecuta el script deseado:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./db-create.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
o
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./db-delete.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
# 🚧 Advertencia
|
# 🚧 Advertencia
|
||||||
|
|
||||||
`PageTop` es un proyecto personal que hago por diversión para aprender cosas nuevas. Su API es
|
`PageTop` es un proyecto personal que hago por diversión para aprender cosas nuevas. Su API es
|
||||||
|
|
|
||||||
|
|
@ -78,93 +78,29 @@ create_sqlite_database() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_database() {
|
# Cambia al directorio donde se localiza el script
|
||||||
case "$DB_SYSTEM" in
|
cd "$(dirname "$0")" || exit 1
|
||||||
mysql) create_mysql_database ;;
|
|
||||||
psql) create_psql_database ;;
|
|
||||||
sqlite) create_sqlite_database ;;
|
|
||||||
*) echo "Invalid system selected."; exit 1 ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
# Configuración inicial
|
# Captura de errores no esperados
|
||||||
read -p "Which database system are you using? (mysql/psql/sqlite): " DB_SYSTEM
|
trap 'echo "An unexpected error occurred. Exiting."; exit 1' ERR
|
||||||
|
|
||||||
# Verifica si el sistema de base de datos está instalado
|
# Carga el archivo `db-setup.sh` y ejecuta la configuración inicial
|
||||||
ERROR_DB_NOT_INSTALLED="is not installed or not found in PATH. Please install it."
|
if [ -f ./db-setup.sh ]; then
|
||||||
if [ "$DB_SYSTEM" == "mysql" ]; then
|
source ./db-setup.sh
|
||||||
command -v mysql &>/dev/null || { echo "MySQL $ERROR_DB_NOT_INSTALLED"; exit 1; }
|
initial_setup
|
||||||
elif [ "$DB_SYSTEM" == "psql" ]; then
|
|
||||||
command -v psql &>/dev/null || { echo "PostgreSQL $ERROR_DB_NOT_INSTALLED"; exit 1; }
|
|
||||||
elif [ "$DB_SYSTEM" == "sqlite" ]; then
|
|
||||||
command -v sqlite3 &>/dev/null || { echo "SQLite $ERROR_DB_NOT_INSTALLED"; exit 1; }
|
|
||||||
else
|
else
|
||||||
echo "Invalid database system. Please choose either 'mysql', 'psql', or 'sqlite'."
|
echo "Error: Required file 'db-setup.sh' not found. Please make sure it exists in the same directory."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Parámetros básicos
|
# Confirma antes de proceder
|
||||||
DEFAULT_DB_NAME="drust"
|
echo "You are about to create the \"$DB_SYSTEM\" database \"$DB_NAME\" with access privileges to user \"$DB_USER\" on \"$DB_HOST\"."
|
||||||
DEFAULT_DB_USER="drust"
|
|
||||||
DEFAULT_DB_PASS="demo"
|
|
||||||
DEFAULT_DB_HOST="localhost"
|
|
||||||
DEFAULT_DB_PORT=""
|
|
||||||
DEFAULT_DB_ADMIN="root"
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "You will be prompted to provide details for creating database."
|
|
||||||
echo "Press ENTER to accept the default values."
|
|
||||||
echo
|
|
||||||
|
|
||||||
read -p "Enter database name [$DEFAULT_DB_NAME]: " DB_NAME
|
|
||||||
DB_NAME=${DB_NAME:-$DEFAULT_DB_NAME}
|
|
||||||
|
|
||||||
if [[ -z "$DB_NAME" || ! "$DB_NAME" =~ ^[a-zA-Z0-9_\-]+$ ]]; then
|
|
||||||
echo "Invalid database name. Use only alphanumeric characters, dashes, or underscores."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$DB_SYSTEM" == "sqlite" ]; then
|
|
||||||
# Verifica si el archivo tiene una extensión válida para SQLite
|
|
||||||
[[ "$DB_NAME" != *".sqlite" && "$DB_NAME" != *".db" ]] && DB_NAME="$DB_NAME.sqlite"
|
|
||||||
else
|
|
||||||
read -p "Enter database user [$DEFAULT_DB_USER]: " DB_USER
|
|
||||||
DB_USER=${DB_USER:-$DEFAULT_DB_USER}
|
|
||||||
|
|
||||||
read -p "Enter database password [$DEFAULT_DB_PASS]: " DB_PASS
|
|
||||||
DB_PASS=${DB_PASS:-$DEFAULT_DB_PASS}
|
|
||||||
|
|
||||||
read -p "Enter database host [$DEFAULT_DB_HOST]: " DB_HOST
|
|
||||||
DB_HOST=${DB_HOST:-$DEFAULT_DB_HOST}
|
|
||||||
|
|
||||||
# Puerto por defecto para MySQL
|
|
||||||
[ "$DB_SYSTEM" == "mysql" ] && DEFAULT_DB_PORT="3306"
|
|
||||||
# Puerto por defecto para PostgreSQL
|
|
||||||
[ "$DB_SYSTEM" == "psql" ] && DEFAULT_DB_PORT="5432"
|
|
||||||
read -p "Enter database port [$DEFAULT_DB_PORT]: " DB_PORT
|
|
||||||
DB_PORT=${DB_PORT:-$DEFAULT_DB_PORT}
|
|
||||||
|
|
||||||
read -p "Enter $DB_SYSTEM admin user [$DEFAULT_DB_ADMIN]: " DB_ADMIN
|
|
||||||
DB_ADMIN=${DB_ADMIN:-$DEFAULT_DB_ADMIN}
|
|
||||||
read -sp "Enter $DB_SYSTEM admin password: " DB_ADMIN_PASS
|
|
||||||
echo
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Confirmar antes de proceder
|
|
||||||
echo
|
|
||||||
echo "You are about to create the database \"$DB_NAME\"."
|
|
||||||
read -p "Are you sure you want to proceed? (y/N): " confirm
|
read -p "Are you sure you want to proceed? (y/N): " confirm
|
||||||
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
|
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
|
||||||
echo "Operation cancelled."
|
echo "Operation cancelled."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
setup_database
|
create_${DB_SYSTEM}_database || { echo "An error occurred during database setup."; exit 1; }
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo "Database setup completed successfully."
|
echo "Database setup completed successfully."
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
echo "An error occurred during database setup."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
77
tools/db-delete.sh
Executable file
77
tools/db-delete.sh
Executable file
|
|
@ -0,0 +1,77 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
delete_mysql_database() {
|
||||||
|
echo "Deleting MySQL database \"$DB_NAME\" and user \"$DB_USER\"..."
|
||||||
|
|
||||||
|
# Elimina la base de datos si existe
|
||||||
|
MYSQL_PWD="$DB_ADMIN_PASS" mysql -u "$DB_ADMIN" -h "$DB_HOST" -P "$DB_PORT" -e \
|
||||||
|
"DROP DATABASE IF EXISTS $DB_NAME;"
|
||||||
|
[ $? -ne 0 ] && { echo "Error deleting database \"$DB_NAME\"."; return 1; }
|
||||||
|
|
||||||
|
# Elimina el usuario si existe
|
||||||
|
MYSQL_PWD="$DB_ADMIN_PASS" mysql -u "$DB_ADMIN" -h "$DB_HOST" -P "$DB_PORT" -e \
|
||||||
|
"DROP USER IF EXISTS '$DB_USER'@'$DB_HOST'; FLUSH PRIVILEGES;"
|
||||||
|
[ $? -ne 0 ] && { echo "Error deleting user \"$DB_USER\"."; return 1; }
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
delete_psql_database() {
|
||||||
|
echo "Deleting PostgreSQL database \"$DB_NAME\" and user \"$DB_USER\"..."
|
||||||
|
|
||||||
|
# Elimina la base de datos si existe
|
||||||
|
PGPASSWORD="$DB_ADMIN_PASS" psql -U "$DB_ADMIN" -h "$DB_HOST" -p "$DB_PORT" -c \
|
||||||
|
"DROP DATABASE IF EXISTS $DB_NAME;"
|
||||||
|
[ $? -ne 0 ] && { echo "Error deleting database \"$DB_NAME\"."; return 1; }
|
||||||
|
|
||||||
|
# Elimina el usuario si existe
|
||||||
|
PGPASSWORD="$DB_ADMIN_PASS" psql -U "$DB_ADMIN" -h "$DB_HOST" -p "$DB_PORT" -c \
|
||||||
|
"DROP ROLE IF EXISTS $DB_USER;"
|
||||||
|
[ $? -ne 0 ] && { echo "Error deleting user \"$DB_USER\"."; return 1; }
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
delete_sqlite_database() {
|
||||||
|
echo "Deleting SQLite database \"$DB_NAME\"..."
|
||||||
|
|
||||||
|
if [ -f "$DB_NAME" ]; then
|
||||||
|
rm "$DB_NAME"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Error deleting SQLite database \"$DB_NAME\"."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "SQLite database \"$DB_NAME\" does not exist."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Cambia al directorio donde se localiza el script
|
||||||
|
cd "$(dirname "$0")" || exit 1
|
||||||
|
|
||||||
|
# Captura de errores no esperados
|
||||||
|
trap 'echo "An unexpected error occurred. Exiting."; exit 1' ERR
|
||||||
|
|
||||||
|
# Carga el archivo `db-setup.sh` y ejecuta la configuración inicial
|
||||||
|
if [ -f ./db-setup.sh ]; then
|
||||||
|
source ./db-setup.sh
|
||||||
|
initial_setup
|
||||||
|
else
|
||||||
|
echo "Error: Required file 'db-setup.sh' not found. Please make sure it exists in the same directory."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Confirma antes de proceder
|
||||||
|
echo "You are about to delete the \"$DB_SYSTEM\" database \"$DB_NAME\" and user \"$DB_USER\" on \"$DB_HOST\"."
|
||||||
|
read -p "Are you sure you want to proceed? (y/N): " confirm
|
||||||
|
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
|
||||||
|
echo "Operation cancelled."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
delete_${DB_SYSTEM}_database || { echo "An error occurred during database deletion."; exit 1; }
|
||||||
|
|
||||||
|
echo "Database and user deleted successfully."
|
||||||
82
tools/db-setup.sh
Normal file
82
tools/db-setup.sh
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Carga variables de entorno si existe el archivo .env
|
||||||
|
if [ -f ./.env ]; then
|
||||||
|
source ./.env
|
||||||
|
else
|
||||||
|
echo "Warning: .env file not found. Values will be prompted if not set."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Función para solicitar una variable si no está definida, con un valor por defecto opcional
|
||||||
|
read_if_not_set() {
|
||||||
|
local var_name=$1
|
||||||
|
local prompt_message=$2
|
||||||
|
local default_value=$3
|
||||||
|
|
||||||
|
if [ -z "${!var_name}" ]; then
|
||||||
|
if [ -n "$default_value" ]; then
|
||||||
|
read -p "$prompt_message [default: $default_value]: " user_input
|
||||||
|
declare -g $var_name="${user_input:-$default_value}"
|
||||||
|
else
|
||||||
|
read -p "$prompt_message: " user_input
|
||||||
|
declare -g $var_name="$user_input"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para solicitar una contraseña si no está configurada
|
||||||
|
pass_if_not_set() {
|
||||||
|
local var_name=$1
|
||||||
|
local prompt_message=$2
|
||||||
|
|
||||||
|
if [ -z "${!var_name}" ]; then
|
||||||
|
read -sp "$prompt_message: " user_input
|
||||||
|
echo
|
||||||
|
declare -g $var_name="$user_input"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para solicitar las variables necesarias según el sistema de base de datos
|
||||||
|
initial_setup() {
|
||||||
|
read_if_not_set "DB_SYSTEM" "Enter database system (mysql/psql/sqlite)" "mysql"
|
||||||
|
|
||||||
|
case "$DB_SYSTEM" in
|
||||||
|
mysql)
|
||||||
|
read_if_not_set "DB_HOST" "Enter MySQL host" "localhost"
|
||||||
|
read_if_not_set "DB_PORT" "Enter MySQL port" "3306"
|
||||||
|
read_if_not_set "DB_NAME" "Enter database name" "database"
|
||||||
|
read_if_not_set "DB_USER" "Enter database user" "username"
|
||||||
|
pass_if_not_set "DB_PASS" "Enter password for database user \"$DB_USER\""
|
||||||
|
read_if_not_set "DB_ADMIN" "Enter MySQL admin user" "root"
|
||||||
|
pass_if_not_set "DB_ADMIN_PASS" "Enter MySQL admin password"
|
||||||
|
# Verifica la contraseña del administrador de MySQL
|
||||||
|
MYSQL_PWD="$DB_ADMIN_PASS" mysql -u "$DB_ADMIN" -h "$DB_HOST" -P "$DB_PORT" -e "SELECT 1;" >/dev/null 2>&1
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Error: Invalid MySQL admin password. Please check and try again."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
psql)
|
||||||
|
read_if_not_set "DB_HOST" "Enter PostgreSQL host" "localhost"
|
||||||
|
read_if_not_set "DB_PORT" "Enter PostgreSQL port" "5432"
|
||||||
|
read_if_not_set "DB_NAME" "Enter database name" "database"
|
||||||
|
read_if_not_set "DB_USER" "Enter database user" "username"
|
||||||
|
pass_if_not_set "DB_PASS" "Enter password for database user \"$DB_USER\""
|
||||||
|
read_if_not_set "DB_ADMIN" "Enter PostgreSQL admin user" "postgres"
|
||||||
|
pass_if_not_set "DB_ADMIN_PASS" "Enter PostgreSQL admin password"
|
||||||
|
# Verifica la contraseña del administrador
|
||||||
|
PGPASSWORD="$DB_ADMIN_PASS" psql -U "$DB_ADMIN" -h "$DB_HOST" -p "$DB_PORT" -c "\q" 2>/dev/null
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Error: Invalid PostgreSQL admin password. Please check and try again."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
sqlite)
|
||||||
|
read_if_not_set "DB_NAME" "Enter SQLite database name" "database.sqlite"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Error: Invalid database system. Please choose either 'mysql', 'psql', or 'sqlite'."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
@ -1,137 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
delete_mysql_database() {
|
|
||||||
echo "Deleting MySQL database \"$DB_NAME\" and user \"$DB_USER\"..."
|
|
||||||
|
|
||||||
# Elimina la base de datos si existe
|
|
||||||
MYSQL_PWD="$DB_ADMIN_PASS" mysql -u "$DB_ADMIN" -h "$DB_HOST" -P "$DB_PORT" -e \
|
|
||||||
"DROP DATABASE IF EXISTS $DB_NAME;"
|
|
||||||
[ $? -ne 0 ] && { echo "Error deleting database \"$DB_NAME\"."; return 1; }
|
|
||||||
|
|
||||||
# Elimina el usuario si existe
|
|
||||||
MYSQL_PWD="$DB_ADMIN_PASS" mysql -u "$DB_ADMIN" -h "$DB_HOST" -P "$DB_PORT" -e \
|
|
||||||
"DROP USER IF EXISTS '$DB_USER'@'$DB_HOST'; FLUSH PRIVILEGES;"
|
|
||||||
[ $? -ne 0 ] && { echo "Error deleting user \"$DB_USER\"."; return 1; }
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
delete_psql_database() {
|
|
||||||
echo "Deleting PostgreSQL database \"$DB_NAME\" and user \"$DB_USER\"..."
|
|
||||||
|
|
||||||
# Elimina la base de datos si existe
|
|
||||||
PGPASSWORD="$DB_ADMIN_PASS" psql -U "$DB_ADMIN" -h "$DB_HOST" -p "$DB_PORT" -c \
|
|
||||||
"DROP DATABASE IF EXISTS $DB_NAME;"
|
|
||||||
[ $? -ne 0 ] && { echo "Error deleting database \"$DB_NAME\"."; return 1; }
|
|
||||||
|
|
||||||
# Elimina el usuario si existe
|
|
||||||
PGPASSWORD="$DB_ADMIN_PASS" psql -U "$DB_ADMIN" -h "$DB_HOST" -p "$DB_PORT" -c \
|
|
||||||
"DROP ROLE IF EXISTS $DB_USER;"
|
|
||||||
[ $? -ne 0 ] && { echo "Error deleting user \"$DB_USER\"."; return 1; }
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
delete_sqlite_database() {
|
|
||||||
echo "Deleting SQLite database \"$DB_NAME\"..."
|
|
||||||
|
|
||||||
if [ -f "$DB_NAME" ]; then
|
|
||||||
rm "$DB_NAME"
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "Error deleting SQLite database \"$DB_NAME\"."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "SQLite database \"$DB_NAME\" does not exist."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_database_deletion() {
|
|
||||||
case "$DB_SYSTEM" in
|
|
||||||
mysql) delete_mysql_database ;;
|
|
||||||
psql) delete_psql_database ;;
|
|
||||||
sqlite) delete_sqlite_database ;;
|
|
||||||
*) echo "Invalid system selected."; exit 1 ;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
# Configuración inicial
|
|
||||||
read -p "Which database system are you using? (mysql/psql/sqlite): " DB_SYSTEM
|
|
||||||
|
|
||||||
# Verifica si el sistema de base de datos está instalado
|
|
||||||
ERROR_DB_NOT_INSTALLED="is not installed or not found in PATH. Please install it."
|
|
||||||
if [ "$DB_SYSTEM" == "mysql" ]; then
|
|
||||||
command -v mysql &>/dev/null || { echo "MySQL $ERROR_DB_NOT_INSTALLED"; exit 1; }
|
|
||||||
elif [ "$DB_SYSTEM" == "psql" ]; then
|
|
||||||
command -v psql &>/dev/null || { echo "PostgreSQL $ERROR_DB_NOT_INSTALLED"; exit 1; }
|
|
||||||
elif [ "$DB_SYSTEM" == "sqlite" ]; then
|
|
||||||
command -v sqlite3 &>/dev/null || { echo "SQLite $ERROR_DB_NOT_INSTALLED"; exit 1; }
|
|
||||||
else
|
|
||||||
echo "Invalid database system. Please choose either 'mysql', 'psql', or 'sqlite'."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Parámetros básicos
|
|
||||||
DEFAULT_DB_NAME="drust"
|
|
||||||
DEFAULT_DB_USER="drust"
|
|
||||||
DEFAULT_DB_HOST="localhost"
|
|
||||||
DEFAULT_DB_PORT=""
|
|
||||||
DEFAULT_DB_ADMIN="root"
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "You will be prompted to provide details for deleting database."
|
|
||||||
echo "Press ENTER to accept the default values."
|
|
||||||
echo
|
|
||||||
|
|
||||||
read -p "Enter database name to delete [$DEFAULT_DB_NAME]: " DB_NAME
|
|
||||||
DB_NAME=${DB_NAME:-$DEFAULT_DB_NAME}
|
|
||||||
|
|
||||||
if [[ -z "$DB_NAME" || ! "$DB_NAME" =~ ^[a-zA-Z0-9_\-]+$ ]]; then
|
|
||||||
echo "Invalid database name. Use only alphanumeric characters, dashes, or underscores."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$DB_SYSTEM" == "sqlite" ]; then
|
|
||||||
# Verifica si el archivo tiene una extensión válida para SQLite
|
|
||||||
[[ "$DB_NAME" != *".sqlite" && "$DB_NAME" != *".db" ]] && DB_NAME="$DB_NAME.sqlite"
|
|
||||||
else
|
|
||||||
read -p "Enter database user to delete [$DEFAULT_DB_USER]: " DB_USER
|
|
||||||
DB_USER=${DB_USER:-$DEFAULT_DB_USER}
|
|
||||||
|
|
||||||
read -p "Enter database host [$DEFAULT_DB_HOST]: " DB_HOST
|
|
||||||
DB_HOST=${DB_HOST:-$DEFAULT_DB_HOST}
|
|
||||||
|
|
||||||
# Puerto por defecto para MySQL
|
|
||||||
[ "$DB_SYSTEM" == "mysql" ] && DEFAULT_DB_PORT="3306"
|
|
||||||
# Puerto por defecto para PostgreSQL
|
|
||||||
[ "$DB_SYSTEM" == "psql" ] && DEFAULT_DB_PORT="5432"
|
|
||||||
read -p "Enter database port [$DEFAULT_DB_PORT]: " DB_PORT
|
|
||||||
DB_PORT=${DB_PORT:-$DEFAULT_DB_PORT}
|
|
||||||
|
|
||||||
read -p "Enter $DB_SYSTEM admin user [$DEFAULT_DB_ADMIN]: " DB_ADMIN
|
|
||||||
DB_ADMIN=${DB_ADMIN:-$DEFAULT_DB_ADMIN}
|
|
||||||
read -sp "Enter $DB_SYSTEM admin password: " DB_ADMIN_PASS
|
|
||||||
echo
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Confirmar antes de proceder
|
|
||||||
echo
|
|
||||||
echo "You are about to delete the database \"$DB_NAME\" and user \"$DB_USER\"."
|
|
||||||
read -p "Are you sure you want to proceed? (y/N): " confirm
|
|
||||||
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
|
|
||||||
echo "Operation cancelled."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
setup_database_deletion
|
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo "Database and user deleted successfully."
|
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
echo "An error occurred during database deletion."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
@ -10,7 +10,7 @@ command -v git > /dev/null || { echo "Error: Git is not installed"; exit 1; }
|
||||||
command -v cargo > /dev/null || { echo "Error: Cargo is not installed"; exit 1; }
|
command -v cargo > /dev/null || { echo "Error: Cargo is not installed"; exit 1; }
|
||||||
|
|
||||||
# Cambia al directorio raíz del espacio de trabajo
|
# Cambia al directorio raíz del espacio de trabajo
|
||||||
cd "$(dirname "$0")"
|
cd "$(dirname "$0")" || exit 1
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
# Verifica si el repositorio del proyecto tiene cambios locales sin preparar
|
# Verifica si el repositorio del proyecto tiene cambios locales sin preparar
|
||||||
|
|
@ -32,7 +32,7 @@ if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
else
|
else
|
||||||
read -p "Are you sure you don't want to update the 'latest' branch? (y/n) " -n 1 -r
|
read -p "Are you sure you don't want to update the 'latest' branch? (y/n) " -n 1 -r
|
||||||
echo
|
echo
|
||||||
if [[ $REPLY =~ ^[Nn]$ ]]; then
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||||
echo "Exiting without completing the process"
|
echo "Exiting without completing the process"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue