| 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 UNIQUE
|
|---|
| 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_id BIGINT NOT NULL,
|
|---|
| 46 | portfolio_id BIGINT NOT NULL,
|
|---|
| 47 | CONSTRAINT fk_ph_portfolio FOREIGN KEY (portfolio_id) REFERENCES portfolios (id),
|
|---|
| 48 | CONSTRAINT fk_ph_stock FOREIGN KEY (stock_id) REFERENCES stock(id)
|
|---|
| 49 | );
|
|---|
| 50 |
|
|---|
| 51 | CREATE TABLE IF NOT EXISTS stock_history
|
|---|
| 52 | (
|
|---|
| 53 | id BIGINT NOT NULL PRIMARY KEY,
|
|---|
| 54 | price DOUBLE PRECISION NOT NULL,
|
|---|
| 55 | stock_id BIGINT NOT NULL,
|
|---|
| 56 | timestamp DATE NOT NULL,
|
|---|
| 57 | CONSTRAINT fk_stock FOREIGN KEY (stock_id) REFERENCES stock(id)
|
|---|
| 58 | );
|
|---|
| 59 |
|
|---|
| 60 | CREATE TABLE IF NOT EXISTS trade_request
|
|---|
| 61 | (
|
|---|
| 62 | id BIGINT NOT NULL PRIMARY KEY,
|
|---|
| 63 | portfolio_id BIGINT,
|
|---|
| 64 | price_per_unit DOUBLE PRECISION NOT NULL,
|
|---|
| 65 | quantity INTEGER NOT NULL,
|
|---|
| 66 | status VARCHAR(255),
|
|---|
| 67 | stock_symbol VARCHAR(255),
|
|---|
| 68 | timestamp TIMESTAMP,
|
|---|
| 69 | type VARCHAR(255),
|
|---|
| 70 | CONSTRAINT fk_trade_portfolio FOREIGN KEY (portfolio_id) REFERENCES portfolios(id)
|
|---|
| 71 | );
|
|---|
| 72 |
|
|---|
| 73 | CREATE TABLE IF NOT EXISTS transactions
|
|---|
| 74 | (
|
|---|
| 75 | id BIGINT NOT NULL PRIMARY KEY,
|
|---|
| 76 | type VARCHAR(255),
|
|---|
| 77 | quantity INTEGER,
|
|---|
| 78 | price DOUBLE PRECISION,
|
|---|
| 79 | timestamp TIMESTAMP NOT NULL,
|
|---|
| 80 | origin VARCHAR(255) NOT NULL CHECK (origin IN ('INTERNAL','EXTERNAL')),
|
|---|
| 81 | user_id BIGINT,
|
|---|
| 82 | stock_id BIGINT,
|
|---|
| 83 | CONSTRAINT fk_tx_user FOREIGN KEY (user_id) REFERENCES users (id),
|
|---|
| 84 | CONSTRAINT fk_tx_stock FOREIGN KEY (stock_id) REFERENCES stock (id)
|
|---|
| 85 | );
|
|---|
| 86 |
|
|---|
| 87 | CREATE TABLE IF NOT EXISTS watchlist
|
|---|
| 88 | (
|
|---|
| 89 | id BIGINT NOT NULL PRIMARY KEY,
|
|---|
| 90 | price_above DOUBLE PRECISION,
|
|---|
| 91 | price_below DOUBLE PRECISION,
|
|---|
| 92 | stock_id BIGINT,
|
|---|
| 93 | user_id BIGINT,
|
|---|
| 94 | CONSTRAINT fk_watch_stock FOREIGN KEY (stock_id) REFERENCES stock (id),
|
|---|
| 95 | CONSTRAINT fk_watch_user FOREIGN KEY (user_id) REFERENCES users (id)
|
|---|
| 96 | );
|
|---|
| 97 |
|
|---|
| 98 | CREATE TABLE IF NOT EXISTS user_auth_providers
|
|---|
| 99 | (
|
|---|
| 100 | user_id BIGINT NOT NULL,
|
|---|
| 101 | auth_providers VARCHAR(255) NOT NULL CHECK (auth_providers IN ('INTERNAL','GOOGLE')),
|
|---|
| 102 | CONSTRAINT fk_auth_user FOREIGN KEY (user_id) REFERENCES users (id)
|
|---|
| 103 | );
|
|---|
| 104 |
|
|---|
| 105 | CREATE TABLE IF NOT EXISTS oauth_pending_links
|
|---|
| 106 | (
|
|---|
| 107 | token VARCHAR(255) NOT NULL PRIMARY KEY,
|
|---|
| 108 | email VARCHAR(255) NOT NULL,
|
|---|
| 109 | provider VARCHAR(255) NOT NULL CHECK (provider IN ('GOOGLE','INTERNAL')),
|
|---|
| 110 | expires_at TIMESTAMP NOT NULL,
|
|---|
| 111 | created_at TIMESTAMP NOT NULL,
|
|---|
| 112 | user_id BIGINT NOT NULL,
|
|---|
| 113 | CONSTRAINT fk_pending_user FOREIGN KEY (user_id) REFERENCES users(id)
|
|---|
| 114 | );
|
|---|
| 115 |
|
|---|
| 116 |
|
|---|
| 117 |
|
|---|
| 118 |
|
|---|
| 119 |
|
|---|
| 120 |
|
|---|