From 5ce9b4a7665b182b320f5231bcee67401835d3f1 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 23 Mar 2024 16:08:14 +0200 Subject: [PATCH] feat(db): create database --- Cargo.lock | 16 +++---- ...40323135723_create_subscribtions_table.sql | 7 +++ scripts/init_db | 46 +++++++++++++++++++ 3 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 migrations/20240323135723_create_subscribtions_table.sql create mode 100755 scripts/init_db diff --git a/Cargo.lock b/Cargo.lock index 24885c0..c45577c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -91,9 +91,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" dependencies = [ "addr2line", "cc", @@ -130,9 +130,9 @@ checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" [[package]] name = "bytes" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" [[package]] name = "cc" @@ -414,9 +414,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.5" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", "hashbrown", @@ -889,9 +889,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" diff --git a/migrations/20240323135723_create_subscribtions_table.sql b/migrations/20240323135723_create_subscribtions_table.sql new file mode 100644 index 0000000..4421a80 --- /dev/null +++ b/migrations/20240323135723_create_subscribtions_table.sql @@ -0,0 +1,7 @@ +-- Add migration script here +CREATE TABLE SUBSCRIPTIONS ( + "id" UUID PRIMARY KEY NOT NULL, + "email" TEXT NOT NULL UNIQUE, + "name" TEXT NOT NULL, + "subscribed_at" TIMESTAMPTZ NOT NULL +); diff --git a/scripts/init_db b/scripts/init_db new file mode 100755 index 0000000..e1b23d3 --- /dev/null +++ b/scripts/init_db @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +set -eo pipefail + +if ! [ -x "$(command -v psql)" ]; then + echo >&2 "Error: psql is not installed." + exit 1 +fi + +if ! [ -x "$(command -v sqlx)" ]; then + echo >&2 "Error: sqlx is not installed." + echo >&2 "Use:" + echo >&2 " cargo install sqlx-cli --no-default-features --features rustls,postgres" + echo >&2 "to install it." + exit 1 +fi + +DB_USER="${POSTGRES_USER:=postgres}" +DB_PASSWORD="${POSTGRES_PASSWORD:=password}" +DB_NAME="${POSTGRES_DB:=newsletter}" +DB_PORT="${POSTGRES_PORT:=5432}" +DB_HOST="${POSTGRES_HOST:=localhost}" + +if [[ -z "${SKIP_DOCKER}" ]]; then + doas docker run\ + -e POSTGRES_USER=${DB_USER}\ + -e POSTGRES_PASSWORD=${DB_PASSWORD}\ + -e POSTGRES_DB=${DB_NAME}\ + -p "${DB_PORT}":5432\ + -d postgres\ + postgres -N 1000 + # Increase max number of connections for testing purposes +fi + +# Keep pinging Postgres until it's ready to accept commands +export PGPASSWORD="${DB_PASSWORD}" +until psql -h "${DB_HOST}" -U "${DB_USER}" -p "${DB_PORT}" -d "postgres" -c '\q'; do + >&2 echo "Postgres is still unavailable - sleeping" + sleep 1 +done + +>&2 echo "Postgres is still up and running on port ${DB_PORT} - runing migrations now!" + +DATABASE_URL="postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}" +export DATABASE_URL +sqlx database create +sqlx migrate run