design: ddl.sql

File ddl.sql, 3.2 KB (added by 231020, 3 weeks ago)
Line 
1DROP TABLE IF EXISTS portfolio_holdings;
2DROP TABLE IF EXISTS trade_request;
3DROP TABLE IF EXISTS stock_history;
4DROP TABLE IF EXISTS watchlist;
5DROP TABLE IF EXISTS transactions;
6DROP TABLE IF EXISTS oauth_pending_links;
7DROP TABLE IF EXISTS user_auth_providers;
8DROP TABLE IF EXISTS portfolios;
9DROP TABLE IF EXISTS stock;
10DROP TABLE IF EXISTS users;
11
12CREATE 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
20CREATE 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
32CREATE 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
40CREATE 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
50CREATE 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
58CREATE 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
70CREATE 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
84CREATE 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
95CREATE 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
102CREATE 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