diff --git a/DB/initdb/01_create_tables.sql b/DB/initdb/01_create_tables.sql new file mode 100644 index 0000000..c1d0b23 --- /dev/null +++ b/DB/initdb/01_create_tables.sql @@ -0,0 +1,35 @@ +-- ---------------------------- +-- Table structure for anwesenheit +-- ---------------------------- +DROP TABLE IF EXISTS "anwesenheit"; +CREATE TABLE "anwesenheit" ( + "counter_id" bigserial PRIMARY KEY, + "timestamp" timestamp(6), + "card_uid" varchar(255), + "check_in_out" int2, + "geraet_id" int2 +); +COMMENT ON COLUMN "anwesenheit"."check_in_out" IS '1=Check In 2=Check Out , 3=Check in Manuell, 4=Check out manuell255=Automatic Check Out'; +COMMENT ON COLUMN "anwesenheit"."geraet_id" IS 'ID des Lesegerätes'; + +-- ---------------------------- +-- Table structure for personal_daten +-- ---------------------------- +DROP TABLE IF EXISTS "personal_daten"; +CREATE TABLE "personal_daten" ( + "personal_nummer" int4 NOT NULL PRIMARY KEY, + "aktiv_beschaeftigt" bool, + "vorname" varchar(255), + "nachname" varchar(255), + "geburtsdatum" date, + "plz" varchar(255), + "adresse" varchar(255), + "geschlecht" int2, + "card_uid" varchar(255), + "hauptbeschaeftigungs_ort" int2, + "arbeitszeit_per_tag" float4, + "arbeitszeit_min_start" time(6), + "arbeitszeit_max_ende" time(6), + "vorgesetzter_pers_nr" int4 +); +COMMENT ON COLUMN "personal_daten"."geschlecht" IS '1==weiblich, 2==maennlich, 3==divers'; diff --git a/DB/initdb/02_create_user.sh b/DB/initdb/02_create_user.sh new file mode 100644 index 0000000..977d7d9 --- /dev/null +++ b/DB/initdb/02_create_user.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e # Exit on error + +echo "Creating PostgreSQL user and setting permissions..." + +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL + CREATE USER $POSTGRES_API_USER WITH ENCRYPTED PASSWORD '$POSTGRES_API_PASSWORD'; + GRANT CONNECT ON DATABASE $POSTGRES_DB TO $POSTGRES_API_USER; + GRANT USAGE ON SCHEMA public TO $POSTGRES_API_USER; + GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO $POSTGRES_API_USER; +EOSQL + +echo "User creation and permissions setup complete!" diff --git a/Docker/docker-compose.dev.yml b/Docker/docker-compose.dev.yml index 385d40b..6789329 100644 --- a/Docker/docker-compose.dev.yml +++ b/Docker/docker-compose.dev.yml @@ -6,12 +6,13 @@ services: env_file: - .env environment: - POSTGRES_USER: ${POSTGRES_ADMIN} - POSTGRES_PASSWORD: ${POSTGRES_ADMIN_PASS} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} PGDATA: /var/lib/postgresql/data/pg_data volumes: - ${POSTGRES_PATH}:/var/lib/postgresql/data + - ${POSTGRES_PATH}/initdb:/docker-entrypoint-initdb.d ports: - 5432:5432 @@ -28,8 +29,8 @@ services: environment: POSTGRES_HOST: db POSTGRES_DB: ${POSTGRES_DB} - POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_PASS: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_API_USER} + POSTGRES_PASS: ${POSTGRES_API_PASSWORD} EXPOSED_PORT: ${EXPOSED_PORT} DEBUG: true ports: diff --git a/Docker/docker-compose.yml b/Docker/docker-compose.yml index a173c42..c26ec91 100644 --- a/Docker/docker-compose.yml +++ b/Docker/docker-compose.yml @@ -6,8 +6,8 @@ services: env_file: - .env environment: - POSTGRES_USER: ${POSTGRES_ADMIN} - POSTGRES_PASSWORD: ${POSTGRES_ADMIN_PASS} + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} PGDATA: /var/lib/postgresql/data/pg_data volumes: @@ -21,8 +21,8 @@ services: environment: POSTGRES_HOST: db POSTGRES_DB: ${POSTGRES_DB} - POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_PASS: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_API_USER} + POSTGRES_PASS: ${POSTGRES_API_PASSWORD} EXPOSED_PORT: ${EXPOSED_PORT} ports: - ${EXPOSED_PORT}:8080 diff --git a/db.sql b/db.sql index 32637f6..8e3ef09 100644 --- a/db.sql +++ b/db.sql @@ -8,6 +8,7 @@ CREATE TABLE "public"."anwesenheit" ( ); COMMENT ON COLUMN "public"."anwesenheit"."check_in_out" IS '1=Check In 2=Check Out 255=Automatic Check Out'; COMMENT ON COLUMN "public"."anwesenheit"."geraet_id" IS 'ID des Lesegerätes'; + -- @block create table personaldaten CREATE TABLE "public"."personal_daten" ( "personal_nummer" SERIAL PRIMARY KEY, @@ -25,9 +26,13 @@ COMMENT ON COLUMN "public"."personal_daten"."akiv_beschaeftig" IS 'derzeit aktiv COMMENT ON COLUMN "public"."personal_daten"."geschlecht" IS 'w:1 m:2 div:3 kA:null '; COMMENT ON COLUMN "public"."personal_daten"."card_uid" IS 'RFID-Karten-UID'; COMMENT ON COLUMN "public"."personal_daten"."hauptbeschaeftigung_ort" IS 'Chemnitz:1 Sayda:2'; + + -- @block drop tables DROP TABLE IF EXISTS "public"."anwesenheit"; DROP TABLE IF EXISTS "public"."personal_daten"; + + -- @block insert into personal_daten INSERT INTO personal_daten ( personal_nummer, @@ -53,6 +58,7 @@ VALUES ( 'test_card', '1' ); + -- @block select SELECT * FROM personal_daten;