From eb11f385e10811cb2e5267e28df28219a07fa65d Mon Sep 17 00:00:00 2001 From: Ralf Zerres Date: Mon, 18 Nov 2019 21:41:17 +0100 Subject: [PATCH] diesel * introduce database ORM Signed-off-by: Ralf Zerres --- .env | 3 + diesel.toml | 6 ++ .../2019-11-06-123836_advotracker/down.sql | 17 ++++ .../2019-11-06-123836_advotracker/up.sql | 93 +++++++++++++++++++ 4 files changed, 119 insertions(+) create mode 100644 .env create mode 100644 diesel.toml create mode 100644 migrations/2019-11-06-123836_advotracker/down.sql create mode 100644 migrations/2019-11-06-123836_advotracker/up.sql diff --git a/.env b/.env new file mode 100644 index 0000000..730ac11 --- /dev/null +++ b/.env @@ -0,0 +1,3 @@ +RUST_LOG=advotracker=info +DATABASE_URL=./advotracker.sqlite3 +#DATABASE_URL=postgres://username:password@localhost/advotracker diff --git a/diesel.toml b/diesel.toml new file mode 100644 index 0000000..d5424ef --- /dev/null +++ b/diesel.toml @@ -0,0 +1,6 @@ +# For documentation on how to configure this file, +# see diesel.rs/guides/configuring-diesel-cli + +[print_schema] +file = "src/schema.rs" +#filter = { only_tables = [ "User", "UserRole" ] } diff --git a/migrations/2019-11-06-123836_advotracker/down.sql b/migrations/2019-11-06-123836_advotracker/down.sql new file mode 100644 index 0000000..c2449ac --- /dev/null +++ b/migrations/2019-11-06-123836_advotracker/down.sql @@ -0,0 +1,17 @@ +/* + * advotracker - Hotline tackingtool for Advocats + * + * Copyright 2019 Ralf Zerres + * SPDX-License-Identifier: 0BSD + */ + +DROP INDEX IF EXISTS NumberHarm_ix_numberHarm; +DROP TABLE IF EXISTS NumberHarm; +DROP INDEX IF EXISTS UserClaim_ix_userId; +DROP TABLE IF EXISTS UserClaim; +DROP VIEW IF EXISTS View_UserRole; +DROP INDEX IF EXISTS UserUserRole_ix_roleId; +DROP INDEX IF EXISTS UserUserRole_ix_userId; +DROP TABLE IF EXISTS UserUserRole; +DROP TABLE IF EXISTS UserRole; +DROP TABLE IF EXISTS User; diff --git a/migrations/2019-11-06-123836_advotracker/up.sql b/migrations/2019-11-06-123836_advotracker/up.sql new file mode 100644 index 0000000..f6e9153 --- /dev/null +++ b/migrations/2019-11-06-123836_advotracker/up.sql @@ -0,0 +1,93 @@ +/* + * advotracker - Hotline tackingtool for Advocats + * + * Copyright 2019 Ralf Zerres + * SPDX-License-Identifier: (0BSD, MIT) + */ + +-- echo ".read | +-- sqlite3 advotracker.db \ + +CREATE TABLE IF NOT EXISTS claims ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + id_user INTEGER NOT NULL, + type VARCHAR, + value VARCHAR, + date_created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + id_user_changed INTEGER NOT NULL, + date_changed TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + -- CONSTRAINTS + CONSTRAINT claims_fk_id_user FOREIGN KEY (id_user) + REFERENCES users (id) ON DELETE CASCADE ON UPDATE CASCADE +); +CREATE INDEX IF NOT EXISTS claims_ix_id_user ON claims (id_user); + +CREATE TABLE IF NOT EXISTS harms ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + id_harm VARCHAR NOT NULL, + id_policyholder VARCHAR, + id_callback VARCHAR, + date_fallback TIMESTAMP, + date_recording TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + id_user INTEGER NOT NULL, + date_created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + id_user_changed INTEGER NOT NULL, + date_changed TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +); +CREATE INDEX IF NOT EXISTS harms_ix_number_harm ON harms (id_harm); + +CREATE TABLE IF NOT EXISTS roles ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + name VARCHAR NOT NULL, + date_created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + id_user_changed INTEGER NOT NULL, + date_changed TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + -- Constraints + CONSTRAINT user_roles_uk_name UNIQUE (name) +); + +CREATE TABLE IF NOT EXISTS users ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + last_name VARCHAR NOT NULL, + first_name VARCHAR, + alias_name VARCHAR, + email VARCHAR, + /* email_confirmed boolean NOT NULL DEFAULT 0, */ + email_confirmed INTEGER, + initials VARCHAR, + password_hash VARCHAR, + date_created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + id_changed Integer NOT NULL, + date_changed TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP + -- Constraints + CONSTRAINT users_ck_email_confirmed CHECK (email_confirmed IN (0,1)) +); +CREATE INDEX IF NOT EXISTS users_ix_email ON users (email); + +CREATE TABLE IF NOT EXISTS user_roles ( + /* id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, */ + id_user INTEGER NOT NULL, + id_role INTEGER NOT NULL, + -- Constraints + CONSTRAINT user_roles_pk_id_user_id_role PRIMARY KEY (id_user, id_role), + CONSTRAINT user_roles_fk_id_user FOREIGN KEY (id_user) + REFERENCES users (id) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT user_roles_fk_id_role FOREIGN KEY (id_role) + REFERENCES roles (id) ON DELETE CASCADE ON UPDATE CASCADE +); +CREATE INDEX IF NOT EXISTS user_roles_ix_id_user ON user_roles (id_user); +CREATE INDEX IF NOT EXISTS user_roles_ix_id_role ON user_roles (id_role); + +CREATE VIEW IF NOT EXISTS view_user_roles + AS SELECT + users.id_user AS id_user, + users.last_name AS last_name, + users.first_name AS first_name, + users.email AS email, + users.user_initials AS initials, + role.user_rolename AS role_name + FROM user_roles + INNER JOIN users ON users.id_user = user_roles.id_user + INNER JOIN roles ON user_roles.id = user_roles.id_role; + +-- end