From afb02ec3cd0e2335816ae51f9b0554717b646a4c Mon Sep 17 00:00:00 2001 From: vano7577 Date: Fri, 4 Jun 2021 13:25:16 +0300 Subject: [PATCH] add db structure & queries --- src/datasources/lemondb/DDL.sql | 87 ++++++++++ src/datasources/lemondb/DDL_admin.sql | 17 ++ src/datasources/lemondb/functions.sql | 210 +++++++++++++++++++++++ src/datasources/lemondb/lemon_schema.png | Bin 0 -> 53172 bytes 4 files changed, 314 insertions(+) create mode 100644 src/datasources/lemondb/DDL.sql create mode 100644 src/datasources/lemondb/DDL_admin.sql create mode 100644 src/datasources/lemondb/functions.sql create mode 100644 src/datasources/lemondb/lemon_schema.png diff --git a/src/datasources/lemondb/DDL.sql b/src/datasources/lemondb/DDL.sql new file mode 100644 index 0000000..fbfe81e --- /dev/null +++ b/src/datasources/lemondb/DDL.sql @@ -0,0 +1,87 @@ +SET search_path TO lemon_schema; +SET default_tablespace = ts_lemon; +CREATE EXTENSION IF NOT EXISTS pgcrypto; +CREATE TABLE IF NOT EXISTS accounts +( + account_id serial PRIMARY KEY, + account_name varchar(255) NOT NULL, + login varchar(100) NOT NULL, + password varchar NOT NULL +); + +CREATE UNIQUE INDEX IF NOT EXISTS iu_accounts$login ON accounts (login) TABLESPACE ts_lemon_indexes; + +ALTER TABLE accounts + ADD CONSTRAINT ch_accounts$login + CHECK (login ~ '^\S+$'); + +CREATE TABLE IF NOT EXISTS banks +( + bank_id smallserial PRIMARY KEY, + bank_name varchar(255) NOT NULL UNIQUE +); + +CREATE TABLE IF NOT EXISTS cards +( + card_id serial PRIMARY KEY, + bank_id smallint NOT NULL, + account_id int NOT NULL, + card_num smallint NOT NULL, + type varchar(255) DEFAULT NULL, + balance int NOT NULL, + currency char(3) NOT NULL +); +CREATE UNIQUE INDEX IF NOT EXISTS iu_accounts$account_id_card_num ON accounts (login) TABLESPACE ts_lemon_indexes; +ALTER TABLE cards + ADD CONSTRAINT ch_cards$card_num + CHECK ((CHAR_LENGTH(card_num::text) BETWEEN 4 AND 16) AND ( card_num >= 0 )), + ADD CONSTRAINT ch_cards$currency + CHECK ( CHAR_LENGTH(currency) = 3 AND currency ~ '^\D+$'), + ADD CONSTRAINT fk_cards$bank_id + FOREIGN KEY (bank_id) + REFERENCES banks (bank_id) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT fk_cards$account_id + FOREIGN KEY (account_id) + REFERENCES accounts (account_id) ON DELETE CASCADE ON UPDATE CASCADE +; + +CREATE INDEX IF NOT EXISTS bank_idx ON cards (bank_id) TABLESPACE ts_lemon_indexes; +CREATE INDEX IF NOT EXISTS account_idx ON cards (account_id) TABLESPACE ts_lemon_indexes; + +CREATE TABLE IF NOT EXISTS transactions +( + transaction_id serial PRIMARY KEY, + card_id int DEFAULT NULL, + amount int NOT NULL, + type varchar(255) DEFAULT NULL, + transaction_datetime timestamptz DEFAULT NULL +); +ALTER TABLE transactions +ADD CONSTRAINT fk_transactions$card_id +FOREIGN KEY (card_id) REFERENCES cards (card_id) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT ch_transactions$transaction_datetime +CHECK ( EXTRACT(YEAR FROM transaction_datetime) >=1951 ); + +CREATE TABLE IF NOT EXISTS types +( + type_id smallserial PRIMARY KEY, + type_name varchar(100) NOT NULL UNIQUE +); + +CREATE TABLE IF NOT EXISTS connection +( + connection_id serial PRIMARY KEY, + card_id int NOT NULL, + type_id smallint NOT NULL, + value varchar NOT NULL +); +ALTER TABLE connection +ADD CONSTRAINT fk_connection$card_id +FOREIGN KEY (card_id) REFERENCES cards (card_id) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT fk_connection$type_id + FOREIGN KEY (type_id) REFERENCES types (type_id) ON DELETE CASCADE ON UPDATE CASCADE; + +CREATE INDEX IF NOT EXISTS type_idx ON connection (type_id) TABLESPACE ts_lemon_indexes; +CREATE INDEX IF NOT EXISTS card_idx ON connection (card_id) TABLESPACE ts_lemon_indexes; + + diff --git a/src/datasources/lemondb/DDL_admin.sql b/src/datasources/lemondb/DDL_admin.sql new file mode 100644 index 0000000..1b0cd06 --- /dev/null +++ b/src/datasources/lemondb/DDL_admin.sql @@ -0,0 +1,17 @@ +--Run as root +-- CREATE ROLE lemon_admin WITH LOGIN PASSWORD 'pa$$w0rd' CREATEROLE CREATEDB; + +--DROP SCHEMA myschema CASCADE; +--RUN AS lemon_admin \/ +-- DROP DATABASE IF EXISTS lemon; +-- CREATE TABLESPACE ts_lemon LOCATION '/home/vano/Documents/ts/lemon'; +-- CREATE TABLESPACE ts_lemon_indexes LOCATION '/home/vano/Documents/ts/lemon_indexes'; +--CREATE DATABASE lemon TABLESPACE ts_lemon; +CREATE SCHEMA lemon_schema; +SET search_path TO lemon_schema; +CREATE EXTENSION IF NOT EXISTS pgcrypto; + +-- +-- CREATE ROLE lemon_user WITH LOGIN; +-- GRANT SELECT, INSERT, DELETE, UPDATE ON ALL TABLES IN SCHEMA lemon_schema TO lemon_user; + diff --git a/src/datasources/lemondb/functions.sql b/src/datasources/lemondb/functions.sql new file mode 100644 index 0000000..0b3618c --- /dev/null +++ b/src/datasources/lemondb/functions.sql @@ -0,0 +1,210 @@ +CREATE FUNCTION validate_user(IN in_login VARCHAR(100), IN in_password VARCHAR, OUT INT) + LANGUAGE sql + STABLE AS +$$ +SELECT account_id +FROM accounts +WHERE login = in_login + AND password = crypt(in_password, password); +$$; + +CREATE PROCEDURE insert_account(in_account_name VARCHAR(255), in_login VARCHAR(255), in_password VARCHAR) + LANGUAGE plpgsql AS +$$ +BEGIN + INSERT INTO accounts (account_name, login, password) + VALUES (in_account_name, in_login, crypt(in_password, gen_salt('bf'))); +END ; +$$; + +CREATE PROCEDURE insert_bank(in_bank_name VARCHAR(255)) + LANGUAGE plpgsql AS +$$ +BEGIN + INSERT INTO banks (bank_name) VALUES (in_bank_name); +END; +$$; + +CREATE PROCEDURE insert_type(in_type_name VARCHAR(100)) + LANGUAGE plpgsql AS +$$ +BEGIN + INSERT INTO types (type_name) VALUES (in_type_name); +END; +$$; + +CREATE PROCEDURE insert_card(in_bank_name VARCHAR(255), in_account_id INT, in_card_num INT, in_balance INT, + in_currency CHAR(3), in_type VARCHAR(255) DEFAULT NULL) + LANGUAGE sql AS +$$ +INSERT INTO cards (bank_id, account_id, card_num, balance, currency, type) +VALUES ((SELECT bank_id + FROM banks + WHERE bank_name = in_bank_name), in_account_id, in_card_num, in_balance, in_currency, in_type); +$$; + +CREATE PROCEDURE insert_connection(in_card_num INT, in_account_id INT, in_type_name VARCHAR(100), + in_value VARCHAR) + LANGUAGE sql AS +$$ +INSERT INTO connection (card_id, type_id, value) +VALUES ((SELECT card_id + FROM cards + WHERE card_num = in_card_num + AND account_id = in_account_id), (SELECT type_id + FROM types + WHERE type_name = in_type_name), in_value); +$$; + +CREATE PROCEDURE insert_transaction(in_card_num INT, in_amount INT, in_account_id INT DEFAULT NULL, + in_type VARCHAR(255) DEFAULT NULL, in_transaction_datetime TIMESTAMP DEFAULT NULL) + LANGUAGE sql AS +$$ +INSERT INTO transactions (card_id, amount, type, transaction_datetime) +VALUES ((SELECT card_id + FROM cards + WHERE card_num = in_card_num + AND account_id = in_account_id), in_amount, in_type, in_transaction_datetime); +$$; + +CREATE PROCEDURE delete_card(IN in_account_id INT, IN in_card_num INT) + LANGUAGE sql AS +$$ +DELETE +FROM cards +WHERE account_id = in_account_id + AND card_num = in_card_num; +$$; + +CREATE PROCEDURE delete_account(IN in_account_id INT) + LANGUAGE sql AS +$$ +DELETE +FROM accounts +WHERE account_id = in_account_id; +$$; + +CREATE PROCEDURE delete_connection(IN in_account_id INT, IN in_card_num INT, IN in_type_name VARCHAR(100)) + LANGUAGE sql AS +$$ +DELETE +FROM connection +WHERE connection_id = (SELECT connection_id + FROM connection + INNER JOIN types + ON types.type_id = connection.type_id AND types.type_name = in_type_name + INNER JOIN cards ON cards.card_id = connection.card_id AND + cards.account_id = in_account_id AND + card_num = in_card_num); +$$; + +CREATE PROCEDURE delete_transaction(IN in_transaction_id INT) + LANGUAGE sql AS +$$ +DELETE +FROM transactions +WHERE transaction_id = in_transaction_id; +$$; + +CREATE PROCEDURE update_account_login(IN in_account_id INT, IN in_login VARCHAR(100)) + LANGUAGE sql AS +$$ +UPDATE accounts +SET login=in_login +WHERE account_id = in_account_id; +$$; + +CREATE PROCEDURE update_account_password(IN in_account_id INT, IN in_password VARCHAR) + LANGUAGE sql AS +$$ +UPDATE accounts +SET password=crypt(in_password, gen_salt('bf')) +WHERE account_id = in_account_id; +$$; + +CREATE PROCEDURE update_account_name(IN in_account_name VARCHAR, IN in_account_id INT) + LANGUAGE sql AS +$$ +UPDATE accounts +SET account_name=in_account_name +WHERE account_id = in_account_id; +$$; + +-- +CREATE PROCEDURE update_transaction_card(IN in_transaction_id INT, IN in_card_num SMALLINT DEFAULT NULL) + LANGUAGE sql AS +$$ +UPDATE transactions +SET card_id=cards.card_id +FROM cards +WHERE transactions.transaction_id = in_transaction_id + AND cards.card_num = in_card_num; +$$; + +--хз, пусть будет +CREATE PROCEDURE update_transaction_cash(IN in_transaction_id INT) + LANGUAGE sql AS +$$ +UPDATE transactions +SET card_id = NULL +WHERE transactions.transaction_id = in_transaction_id; +$$; + +CREATE PROCEDURE update_amount_transaction(IN in_amount INT, IN in_transaction_id INT) + LANGUAGE sql AS +$$ +UPDATE transactions +SET amount=in_amount +WHERE transaction_id = in_transaction_id; +$$; + +CREATE PROCEDURE update_transaction_type(IN in_transaction_type VARCHAR(255), IN in_transaction_id INT) + LANGUAGE sql AS +$$ +UPDATE transactions +SET type = in_transaction_type +WHERE transaction_id = in_transaction_id; +$$; + +CREATE PROCEDURE update_transaction_datetime(IN in_transaction_datetime INT, IN in_transaction_id INT) + LANGUAGE sql AS +$$ +UPDATE transactions +SET transaction_datetime= in_transaction_datetime +WHERE transaction_id = in_transaction_id; +$$; + +CREATE FUNCTION find_account_name(IN in_account_id INT, OUT out_account_name VARCHAR(255)) + LANGUAGE plpgsql AS +$$ +BEGIN + out_account_name := (SELECT account_name FROM accounts WHERE account_id = in_account_id); +END +$$; + +CREATE FUNCTION find_bank_cards(IN in_account_id INT, IN in_bank_name VARCHAR(255)) + RETURNS TABLE + ( + card_num SMALLINT, + type VARCHAR(255), + balance INTEGER, + currency CHAR(3) + ) +AS +$body$ +SELECT card_num, type, balance, currency +FROM cards + INNER JOIN banks ON banks.bank_id = cards.bank_id AND banks.bank_name = in_bank_name AND + cards.account_id = in_account_id; +$body$ LANGUAGE sql; + +CREATE FUNCTION find_last_transaction_timestamptz(IN in_account_id INT, IN in_card_num INT, OUT TIMESTAMP WITH TIME ZONE) +AS +$$ +SELECT transaction_datetime +FROM transactions + INNER JOIN cards ON cards.card_id = transactions.card_id AND card_num = in_card_num AND + cards.account_id = in_account_id +ORDER BY transaction_datetime DESC +LIMIT 1; +$$ LANGUAGE sql; diff --git a/src/datasources/lemondb/lemon_schema.png b/src/datasources/lemondb/lemon_schema.png new file mode 100644 index 0000000000000000000000000000000000000000..d449307f5040befef536d0f1aa7a304281132871 GIT binary patch literal 53172 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 AOaK4? literal 0 HcmV?d00001