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