Project, Web Technologies, Year 3, Semester 1
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.5 KiB

drop table if exists users;
drop table if exists accounts;
drop table if exists users_accounts;
drop table if exists transactions;
drop table if exists accounts_transactions;
drop table if exists notifications;
drop table if exists users_notifications;
drop table if exists exchange;
create table users (
id integer primary key autoincrement,
username text unique not null,
email text unique not null,
otp text not null,
fullname text not null
);
create table accounts (
id integer primary key autoincrement,
iban text unique not null, -- RO16 FOXB 0000 0000 0000 0000
currency text not null, -- EUR, RON, USD, ?
account_type text not null, -- checking, savings, ?
custom_name text -- 'Car Savings'; name set by user
);
create table users_accounts (
user_id integer not null, -- one user can have multiple accounts
account_id integer UNIQUE not null, -- one account can only have one user
foreign key (user_id) references users (id),
foreign key (account_id) references accounts (id)
);
create table transactions (
id integer primary key autoincrement,
datetime text not null,
other_party text not null, -- JSON data describing sender/recipient/etc
-- depending on transaction type
status text not null, -- processed, failed, reverted, pending, etc
type text not null, -- send_transfer, receive_transfer, card_payment, fee, ...
extra text -- depending on type, JSON data describing extra info
);
create table accounts_transactions (
account_id integer not null,
transaction_id integer UNIQUE not null,
foreign key (account_id) references accounts (id),
foreign key (transaction_id) references transactions (id)
);
create table notifications (
id integer primary key autoincrement,
body text not null,
datetime text not null,
read integer not null
);
create table users_notifications (
user_id integer not null,
notification_id integer UNIQUE not null,
foreign key (user_id) references users (id),
foreign key (notification_id) references notifications (id)
);
create table exchange (
id integer primary key autoincrement,
currency text not null,
to_ron real not null,
from_ron real not null
);
create view V_account_balance as
select
accounts_transactions.account_id as "account_id",
sum(json_extract(transactions.extra, '$.amount')) as "balance"
from transactions
inner join accounts_transactions on accounts_transactions.transaction_id = transactions.id
group by accounts_transactions.account_id;