feat: add initial database schema and postgres profile

This commit is contained in:
dualfroz committed 2026-08-24 21:01:29 +02:00
1 parent 3bf5fc8940
commit 4535e0127f
3 files changed
+78

No files matched your search

@@ -0,0 +1,10 @@
spring:
datasource:
url: ${SLOTLINE_DB_URL:jdbc:postgresql://localhost:5432/slotline}
username: ${SLOTLINE_DB_USERNAME:slotline}
password: ${SLOTLINE_DB_PASSWORD:slotline}
driver-class-name: org.postgresql.Driver
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
@@ -0,0 +1,32 @@
CREATE TABLE app_user (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
username VARCHAR(64) NOT NULL,
password_hash VARCHAR(100) NOT NULL,
role VARCHAR(16) NOT NULL,
created_at TIMESTAMP NOT NULL,
CONSTRAINT uq_app_user_username UNIQUE (username)
);
CREATE TABLE resource (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(128) NOT NULL,
description VARCHAR(512),
created_at TIMESTAMP NOT NULL,
version BIGINT NOT NULL DEFAULT 0
);
CREATE TABLE reservation (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
resource_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
start_time TIMESTAMP NOT NULL,
end_time TIMESTAMP NOT NULL,
status VARCHAR(16) NOT NULL,
created_at TIMESTAMP NOT NULL,
version BIGINT NOT NULL DEFAULT 0,
CONSTRAINT fk_reservation_resource FOREIGN KEY (resource_id) REFERENCES resource (id),
CONSTRAINT fk_reservation_user FOREIGN KEY (user_id) REFERENCES app_user (id)
);
CREATE INDEX idx_reservation_resource_status ON reservation (resource_id, status);
CREATE INDEX idx_reservation_user ON reservation (user_id);
@@ -0,0 +1,36 @@
CREATE TABLE app_user (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
username VARCHAR(64) NOT NULL,
password_hash VARCHAR(100) NOT NULL,
role VARCHAR(16) NOT NULL,
created_at TIMESTAMPTZ NOT NULL,
CONSTRAINT uq_app_user_username UNIQUE (username)
);
CREATE TABLE resource (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(128) NOT NULL,
description VARCHAR(512),
created_at TIMESTAMPTZ NOT NULL,
version BIGINT NOT NULL DEFAULT 0
);
CREATE TABLE reservation (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
resource_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
start_time TIMESTAMPTZ NOT NULL,
end_time TIMESTAMPTZ NOT NULL,
status VARCHAR(16) NOT NULL,
created_at TIMESTAMPTZ NOT NULL,
version BIGINT NOT NULL DEFAULT 0,
CONSTRAINT fk_reservation_resource FOREIGN KEY (resource_id) REFERENCES resource (id),
CONSTRAINT fk_reservation_user FOREIGN KEY (user_id) REFERENCES app_user (id)
);
CREATE INDEX idx_reservation_resource_status ON reservation (resource_id, status);
CREATE INDEX idx_reservation_user ON reservation (user_id);
CREATE UNIQUE INDEX uq_reservation_active_slot
ON reservation (resource_id, start_time, end_time)
WHERE status = 'ACTIVE';