diff --git a/.docker/db/scripts/clear_db.sh b/.docker/db/scripts/clear_db.sh new file mode 100644 index 0000000000000000000000000000000000000000..2676c48ca46fc28974e4c6d8909f1f3aa848366e --- /dev/null +++ b/.docker/db/scripts/clear_db.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +DB_NAME="banking" +USERNAME="root" +PASSWORD="passwd" +# Uncomment for local use +HOST="localhost" + +#Set DB password as env variable +export PGPASSWORD="$PASSWORD" + + +# Wait for PostgreSQL to be ready +until psql -h "$HOST" -U "$USERNAME" -d "$DB_NAME" -c '\q'; do + >&2 echo "Postgres is unavailable - sleeping" + sleep 1 +done + +# Empty tables in the 'bank_user' schema +psql -h "$HOST" -U "$USERNAME" -d "$DB_NAME" -c "TRUNCATE TABLE bank_user.bank_user, bank_user.bank_account, bank_user.scheduled_payment;" + +# Empty tables in the 'bank_account' schema +psql -h "$HOST" -U "$USERNAME" -d "$DB_NAME" -c "TRUNCATE TABLE bank_account.balance, bank_account.bal_transaction;" + +# Empty tables in the 'bank_transaction' schema +psql -h "$HOST" -U "$USERNAME" -d "$DB_NAME" -c "TRUNCATE TABLE bank_transaction.proc_reg, bank_transaction.proc_transaction;" diff --git a/.docker/db/scripts/0_init_db.sql b/.docker/db/scripts/init/0_init_db.sql similarity index 100% rename from .docker/db/scripts/0_init_db.sql rename to .docker/db/scripts/init/0_init_db.sql diff --git a/.docker/db/scripts/1_create_account_management_db.sql b/.docker/db/scripts/init/1_create_account_management_db.sql similarity index 100% rename from .docker/db/scripts/1_create_account_management_db.sql rename to .docker/db/scripts/init/1_create_account_management_db.sql diff --git a/.docker/db/scripts/1_create_account_query_db.sql b/.docker/db/scripts/init/1_create_account_query_db.sql similarity index 100% rename from .docker/db/scripts/1_create_account_query_db.sql rename to .docker/db/scripts/init/1_create_account_query_db.sql diff --git a/.docker/db/scripts/1_create_transaction_db.sql b/.docker/db/scripts/init/1_create_transaction_db.sql similarity index 100% rename from .docker/db/scripts/1_create_transaction_db.sql rename to .docker/db/scripts/init/1_create_transaction_db.sql diff --git a/.docker/db/scripts/2_generate_account_management_db.sql b/.docker/db/scripts/init/2_generate_account_management_db.sql similarity index 100% rename from .docker/db/scripts/2_generate_account_management_db.sql rename to .docker/db/scripts/init/2_generate_account_management_db.sql diff --git a/.docker/db/scripts/2_generate_account_query_db.sql b/.docker/db/scripts/init/2_generate_account_query_db.sql similarity index 100% rename from .docker/db/scripts/2_generate_account_query_db.sql rename to .docker/db/scripts/init/2_generate_account_query_db.sql diff --git a/.docker/db/scripts/2_generate_transaction_db.sql b/.docker/db/scripts/init/2_generate_transaction_db.sql similarity index 100% rename from .docker/db/scripts/2_generate_transaction_db.sql rename to .docker/db/scripts/init/2_generate_transaction_db.sql diff --git a/.docker/db/scripts/seed_db.sh b/.docker/db/scripts/seed_db.sh new file mode 100644 index 0000000000000000000000000000000000000000..33351fd5f0fd85e996ade4ba5a927d8d8b19d980 --- /dev/null +++ b/.docker/db/scripts/seed_db.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +DB_NAME="banking" +USERNAME="root" +PASSWORD="passwd" +# Uncomment for local use +HOST="localhost" + +#Set DB password as env variable +export PGPASSWORD="$PASSWORD" + + +# Wait for PostgreSQL to be ready +until psql -h "$HOST" -U "$USERNAME" -d "$DB_NAME" -c '\q'; do + >&2 echo "Postgres is unavailable - sleeping" + sleep 1 +done + +# Seed tables in the 'bank_user' schema +psql -h "$HOST" -U "$USERNAME" -d "$DB_NAME" -f "/scripts/init/2_generate_account_management_db.sql" + +# Seed tables in the 'bank_account' schema +psql -h "$HOST" -U "$USERNAME" -d "$DB_NAME" -f "/scripts/init/2_generate_account_query_db.sql" + +# Seed tables in the 'bank_transaction' schema +psql -h "$HOST" -U "$USERNAME" -d "$DB_NAME" -f "/scripts/init/2_generate_transaction_db.sql" diff --git a/README.md b/README.md index 995b83d97c456401649c2ba5687ac4c3ed8bcd60..0f935f3f2e177da5f8f3970d2ecdd9a69c02ebc4 100644 --- a/README.md +++ b/README.md @@ -19,10 +19,6 @@ In order to start the applications please follow the following instructions: This builds all the required maven artifacts in the correct order, creates images on your local machine and then runs the specified docker-compose file. - -## Use case diagram -<img src="./.documentation/useCaseDiagram.png" width="800"> - ## Artifacts and Applications | Name | Type | URL | Description | @@ -38,6 +34,16 @@ docker-compose file. | Grafana | monitoring | [Grafana UI](http://localhost:3000) | Monitoring toolkit for metrics visualization and persistence | | Locust | testing | [Locust UI](http://localhost:8089) | Load testing tool simulating user interactions for evaluating performance | +## Clearing and Seeding DB +Within the [DB docker config files](./.docker/db/scripts) there are two scripts that may be executed on your maching (if you have psql installed!) +or via the docker container of the database itself. + +- For clearing the DB data please use [this bash script](./.docker/db/scripts/clear_db.sh), alternatively within the DB container call `./scripts/clear_db.sh` +- For seeding the DB with valid data please use [this bash script](./.docker/db/scripts/seed_db.sh), alternatively within the DB container call `./scripts/seed_db.sh` + +## Use case diagram +<img src="./.documentation/useCaseDiagram.png" width="800"> + ## Module Architecture Each service is implemented as a separate maven artifact consisting of a Spring-boot application. Within each project we used the principles of `Hexagonal architecture`, where the domain itself consists of only pure Java classes, diff --git a/docker-compose.yaml b/docker-compose.yaml index ec5815f407d167e09a3e3ddf93bd5bf2559d6088..89eb164af08e7df8f6af3e2119bac33aa7a556a3 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -12,7 +12,8 @@ services: - POSTGRES_PASSWORD=passwd - POSTGRES_DB=banking volumes: - - ./.docker/db/scripts:/docker-entrypoint-initdb.d + - ./.docker/db/scripts/init:/docker-entrypoint-initdb.d + - ./.docker/db/scripts:/scripts account-management: image: account-management