| 1 | DROP TABLE IF EXISTS portfolio_holdings;
|
|---|
| 2 | DROP TABLE IF EXISTS trade_request;
|
|---|
| 3 | DROP TABLE IF EXISTS stock_history;
|
|---|
| 4 | DROP TABLE IF EXISTS watchlist;
|
|---|
| 5 | DROP TABLE IF EXISTS transactions;
|
|---|
| 6 | DROP TABLE IF EXISTS oauth_pending_links;
|
|---|
| 7 | DROP TABLE IF EXISTS user_auth_providers;
|
|---|
| 8 | DROP TABLE IF EXISTS portfolios;
|
|---|
| 9 | DROP TABLE IF EXISTS stock;
|
|---|
| 10 | DROP TABLE IF EXISTS users;
|
|---|
| 11 |
|
|---|
| 12 | CREATE TABLE IF NOT EXISTS users (
|
|---|
| 13 | id BIGINT NOT NULL PRIMARY KEY,
|
|---|
| 14 | email VARCHAR(255) NOT NULL UNIQUE,
|
|---|
| 15 | password VARCHAR(255) NOT NULL,
|
|---|
| 16 | role VARCHAR(255) NOT NULL CHECK (role IN ('USER','ADMIN')),
|
|---|
| 17 | username VARCHAR(255) NOT NULL
|
|---|
| 18 | );
|
|---|
| 19 |
|
|---|
| 20 | CREATE TABLE IF NOT EXISTS stock
|
|---|
| 21 | (
|
|---|
| 22 | id BIGINT NOT NULL PRIMARY KEY,
|
|---|
| 23 | symbol VARCHAR(255) NOT NULL UNIQUE,
|
|---|
| 24 | name VARCHAR(255),
|
|---|
| 25 | current_price DOUBLE PRECISION,
|
|---|
| 26 | last_price DOUBLE PRECISION,
|
|---|
| 27 | percentage DOUBLE PRECISION NOT NULL,
|
|---|
| 28 | turnover DOUBLE PRECISION,
|
|---|
| 29 | last_updated TIMESTAMP
|
|---|
| 30 | );
|
|---|
| 31 |
|
|---|
| 32 | CREATE TABLE IF NOT EXISTS portfolios
|
|---|
| 33 | (
|
|---|
| 34 | id BIGINT NOT NULL PRIMARY KEY,
|
|---|
| 35 | balance NUMERIC(18,2) NOT NULL,
|
|---|
| 36 | user_id BIGINT NOT NULL UNIQUE,
|
|---|
| 37 | CONSTRAINT fk_portfolio_user FOREIGN KEY (user_id) REFERENCES users (id)
|
|---|
| 38 | );
|
|---|
| 39 |
|
|---|
| 40 | CREATE TABLE IF NOT EXISTS portfolio_holdings
|
|---|
| 41 | (
|
|---|
| 42 | id BIGINT NOT NULL PRIMARY KEY,
|
|---|
| 43 | quantity INTEGER NOT NULL,
|
|---|
| 44 | avg_price NUMERIC(38,2) NOT NULL,
|
|---|
| 45 | stock_symbol VARCHAR(255) NOT NULL,
|
|---|
| 46 | portfolio_id BIGINT NOT NULL,
|
|---|
| 47 | CONSTRAINT fk_ph_portfolio FOREIGN KEY (portfolio_id) REFERENCES portfolios (id)
|
|---|
| 48 | );
|
|---|
| 49 |
|
|---|
| 50 | CREATE TABLE IF NOT EXISTS stock_history
|
|---|
| 51 | (
|
|---|
| 52 | id BIGINT NOT NULL PRIMARY KEY,
|
|---|
| 53 | price DOUBLE PRECISION NOT NULL,
|
|---|
| 54 | stock_id BIGINT NOT NULL,
|
|---|
| 55 | timestamp DATE NOT NULL,
|
|---|
| 56 | CONSTRAINT fk_stock FOREIGN KEY (stock_id) REFERENCES stock(id)
|
|---|
| 57 | );
|
|---|
| 58 |
|
|---|
| 59 | CREATE TABLE IF NOT EXISTS trade_request
|
|---|
| 60 | (
|
|---|
| 61 | id BIGINT NOT NULL PRIMARY KEY,
|
|---|
| 62 | portfolio_id BIGINT,
|
|---|
| 63 | price_per_unit DOUBLE PRECISION NOT NULL,
|
|---|
| 64 | quantity INTEGER NOT NULL,
|
|---|
| 65 | status VARCHAR(255),
|
|---|
| 66 | stock_symbol VARCHAR(255),
|
|---|
| 67 | timestamp TIMESTAMP,
|
|---|
| 68 | type VARCHAR(255),
|
|---|
| 69 | CONSTRAINT fk_trade_portfolio FOREIGN KEY (portfolio_id) REFERENCES portfolios(id)
|
|---|
| 70 | );
|
|---|
| 71 |
|
|---|
| 72 | CREATE TABLE IF NOT EXISTS transactions
|
|---|
| 73 | (
|
|---|
| 74 | id BIGINT NOT NULL PRIMARY KEY,
|
|---|
| 75 | type VARCHAR(255),
|
|---|
| 76 | quantity INTEGER,
|
|---|
| 77 | price DOUBLE PRECISION,
|
|---|
| 78 | timestamp TIMESTAMP NOT NULL,
|
|---|
| 79 | origin VARCHAR(255) NOT NULL CHECK (origin IN ('INTERNAL','EXTERNAL')),
|
|---|
| 80 | user_id BIGINT,
|
|---|
| 81 | stock_id BIGINT,
|
|---|
| 82 | CONSTRAINT fk_tx_user FOREIGN KEY (user_id) REFERENCES users (id),
|
|---|
| 83 | CONSTRAINT fk_tx_stock FOREIGN KEY (stock_id) REFERENCES stock (id)
|
|---|
| 84 | );
|
|---|
| 85 |
|
|---|
| 86 | CREATE TABLE IF NOT EXISTS watchlist
|
|---|
| 87 | (
|
|---|
| 88 | id BIGINT NOT NULL PRIMARY KEY,
|
|---|
| 89 | price_above DOUBLE PRECISION,
|
|---|
| 90 | price_below DOUBLE PRECISION,
|
|---|
| 91 | stock_id BIGINT,
|
|---|
| 92 | user_id BIGINT,
|
|---|
| 93 | CONSTRAINT fk_watch_stock FOREIGN KEY (stock_id) REFERENCES stock (id),
|
|---|
| 94 | CONSTRAINT fk_watch_user FOREIGN KEY (user_id) REFERENCES users (id)
|
|---|
| 95 | );
|
|---|
| 96 |
|
|---|
| 97 | CREATE TABLE IF NOT EXISTS user_auth_providers
|
|---|
| 98 | (
|
|---|
| 99 | user_id BIGINT NOT NULL,
|
|---|
| 100 | auth_providers VARCHAR(255) NOT NULL CHECK (auth_providers IN ('INTERNAL','GOOGLE')),
|
|---|
| 101 | CONSTRAINT fk_auth_user FOREIGN KEY (user_id) REFERENCES users (id)
|
|---|
| 102 | );
|
|---|
| 103 |
|
|---|
| 104 | CREATE TABLE IF NOT EXISTS oauth_pending_links
|
|---|
| 105 | (
|
|---|
| 106 | token VARCHAR(255) NOT NULL PRIMARY KEY,
|
|---|
| 107 | email VARCHAR(255) NOT NULL,
|
|---|
| 108 | provider VARCHAR(255) NOT NULL CHECK (provider IN ('GOOGLE','INTERNAL')),
|
|---|
| 109 | expires_at TIMESTAMP NOT NULL,
|
|---|
| 110 | created_at TIMESTAMP NOT NULL,
|
|---|
| 111 | user_id BIGINT NOT NULL,
|
|---|
| 112 | CONSTRAINT fk_pending_user FOREIGN KEY (user_id) REFERENCES users(id)
|
|---|
| 113 | );
|
|---|
| 114 |
|
|---|
| 115 |
|
|---|
| 116 |
|
|---|
| 117 |
|
|---|
| 118 |
|
|---|
| 119 |
|
|---|