Skip to content

Commit

Permalink
Updating readme and database initialization
Browse files Browse the repository at this point in the history
Add initialization shell script, instead of .sql file
  • Loading branch information
Falokut committed Feb 3, 2024
1 parent 5107790 commit 76738d7
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 42 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

# Configuration

1. [Configure movies_db](movies_db/README.md#Configuration)
1. [Configure cinema_db](cinema_db/README.md#Configuration)
2. Create .env on project root dir
Example env:
```env
Expand Down
18 changes: 3 additions & 15 deletions cinema_db/README.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,13 @@
# Configuration
1. Create .env in root dir
Example env for postgre
Example env for postgres
```env
POSTGRES_USER=postgres
POSTGRES_PASSWORD=YourPassword
```
2. Change passwords for roles inside init-up.sql in db folder
Your role would look like this:
```sql
CREATE ROLE cinema_service WITH
    LOGIN
    ENCRYPTED PASSWORD 'SCRAM-SHA-256$4096:R9TMUdvkUG5yxu0rJlO+hA==$E/WRNMfl6SWK9xreXN8rfIkJjpQhWO8pd+8t2kx12D0=:sCS47DCNVIZYhoue/BReTE0ZhVRXMGszsnnHexVwOU='; -- Here your password for service
```
or like this (passwords without encryption)
```sql
CREATE ROLE cinema_service WITH
    LOGIN
    PASSWORD 'YourPasswordForGenresService'; -- Here your password for service
SERVICE_PASSWORD=YourPassword
```

3. setup pgbouncer:
2. setup pgbouncer:
* create userlist.txt in docker/pgbouncer and provide passwords:
```
"cinema_service" "yourpassword"
Expand Down
22 changes: 12 additions & 10 deletions cinema_db/cinema_db.yml
Original file line number Diff line number Diff line change
@@ -1,40 +1,42 @@
version: "3.8"


networks:
cinema_db_network:
name: "cinema_db_network"

services:
cinema_db_master:
image: postgis/postgis:16-3.4-alpine
image: postgis/postgis:16-3.4-alpine
restart: unless-stopped
volumes:
- ./.container_data/database/postgres/data:/var/lib/postgresql/data
- ./db/init-up.sql:/docker-entrypoint-initdb.d/init.up.sql
# ports:
# - 5439:5432
- ./db:/docker-entrypoint-initdb.d
expose:
- 5432
networks:
- cinema_db_network
environment :
environment:
- PGDATA=/var/lib/postgresql/data
- POSTGRES_USER=${POSTGRES_USER}
- PGUSER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=cinema
- SERVICE_NAME=cinema_service
- SERVICE_PASSWORD=${SERVICE_PASSWORD}
healthcheck:
test: [ "CMD-SHELL", "pg_isready"]
test: ["CMD-SHELL", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5

cinema_pool:
image: bitnami/pgbouncer
restart: unless-stopped
ports:
- 6490:6432
expose:
- 6432
networks:
- cinema_db_network
- databases_network
environment:
POSTGRESQL_HOST: cinema_db_master
PGBOUNCER_AUTH_TYPE: md5
Expand All @@ -46,4 +48,4 @@ services:
- ./docker/pgbouncer/userlist.txt:/etc/pgbouncer/userlist.txt
depends_on:
cinema_db_master:
condition: service_healthy
condition: service_healthy
22 changes: 22 additions & 0 deletions cinema_db/db/init-database.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
if [[ -z ${SERVICE_NAME} ]]; then
echo "SERVICE_NAME env var not set"
exit 1
fi

psql -U ${POSTGRES_USER} -d ${POSTGRES_DB}

if [[ ! -z ${SERVICE_PASSWORD} ]]; then
echo "Creating service user"
psql -c "CREATE USER ${SERVICE_NAME} WITH PASSWORD '${SERVICE_PASSWORD}';"
echo "Service user created"
fi

if [[ ! -z ${ADMIN_SERVICE_PASSWORD} ]]; then
echo "Creating admin service user"
psql -c "CREATE USER admin_${SERVICE_NAME} WITH PASSWORD '${ADMIN_SERVICE_PASSWORD}';"
echo "Admin service user created"
fi

echo "Running init sql script"
psql -f 'docker-entrypoint-initdb.d/up.sql'
echo "Initialization is complete"
20 changes: 4 additions & 16 deletions cinema_db/db/init-up.sql → cinema_db/db/up.sql
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
CREATE ROLE cinema_service WITH
LOGIN
ENCRYPTED PASSWORD 'SCRAM-SHA-256$4096:R9TMUdvkUG5yxu0rJlO+hA==$E/WRNMfl6SWK9xreXN8rfIkJjpQhWO8pd+8t2kx12D0=:sCS47DCNVIZYhoue/BReTE0ZhVRXzMGszsnnHexVwOU=';


CREATE EXTENSION postgis;

CREATE TABLE cities (
id SERIAL PRIMARY KEY,
Expand Down Expand Up @@ -32,7 +28,7 @@ CREATE TABLE halls (
);

CREATE TABLE halls_configurations (
hall_id INT REFERENCES halls(id) ON UPDATE CASCADE,
hall_id INT REFERENCES halls(id) ON UPDATE CASCADE ON DELETE CASCADE,
row INT CHECK(row > 0),
seat INT CHECK(seat > 0),
grid_pos_x FLOAT NOT NULL,
Expand All @@ -44,7 +40,7 @@ CREATE OR REPLACE FUNCTION update_hall_size()
RETURNS TRIGGER
AS $$
BEGIN
UPDATE halls SET hall_size=(SELECT COUNT(seat) FROM halls_configurations WHERE hall_id=id);
UPDATE halls SET hall_size=( SELECT COUNT(seat) FROM halls_configurations WHERE hall_id=id);
RETURN NEW;
END; $$
LANGUAGE PLPGSQL;
Expand All @@ -69,13 +65,9 @@ CREATE TABLE screenings (
screening_type_id INT REFERENCES screenings_types(id) ON UPDATE CASCADE ON DELETE SET NULL,
movie_id INT NOT NULL,
start_time TIMESTAMPTZ NOT NULL CHECK(start_time > clock_timestamp()),
hall_id INT REFERENCES halls(id) ON UPDATE CASCADE,
hall_id INT REFERENCES halls(id) ON UPDATE CASCADE ON DELETE SET NULL,
ticket_price DECIMAL(8,2) CHECK(ticket_price>0.0)
);




GRANT SELECT ON cities TO cinema_service;
GRANT SELECT ON cinemas TO cinema_service;
GRANT SELECT ON halls_configurations TO cinema_service;
Expand All @@ -85,7 +77,3 @@ GRANT SELECT ON halls TO cinema_service;
GRANT SELECT ON screenings TO cinema_service;
GRANT SELECT ON screenings_types TO cinema_service;





0 comments on commit 76738d7

Please sign in to comment.