92 lines
3.2 KiB
Go
92 lines
3.2 KiB
Go
|
package debug_mode
|
||
|
|
||
|
import (
|
||
|
"log"
|
||
|
|
||
|
_ "github.com/mattn/go-sqlite3"
|
||
|
"github.com/jmoiron/sqlx"
|
||
|
)
|
||
|
|
||
|
func Init_testdb(DB_TYPE string, DB_CONNECTION_STRING string) {
|
||
|
|
||
|
db, err := sqlx.Connect(DB_TYPE, DB_CONNECTION_STRING)
|
||
|
if err != nil {
|
||
|
log.Print("couldn't open test db")
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
|
||
|
defer db.Close()
|
||
|
|
||
|
init_sql := `
|
||
|
|
||
|
CREATE TABLE accounts (
|
||
|
acnt_id int4 NOT NULL GENERATED ALWAYS AS IDENTITY,
|
||
|
acnt_dsply_name varchar(50) NOT NULL,
|
||
|
acnt_description varchar(250) NULL,
|
||
|
CONSTRAINT accounts_pkey PRIMARY KEY (acnt_id)
|
||
|
);
|
||
|
|
||
|
CREATE TABLE buckets (
|
||
|
bkt_id int4 NOT NULL GENERATED ALWAYS AS IDENTITY,
|
||
|
bkt_dsply_code varchar(5) NOT NULL,
|
||
|
bkt_dsply_name varchar(50) NULL,
|
||
|
bkt_description varchar(250) NULL,
|
||
|
CONSTRAINT buckets_pkey PRIMARY KEY (bkt_id)
|
||
|
);
|
||
|
|
||
|
CREATE TABLE transaction_breakdown (
|
||
|
trns_brkdwn_id int4 NOT NULL GENERATED ALWAYS AS IDENTITY,
|
||
|
trns_brkdwn_amount money NOT NULL,
|
||
|
trns_brkdwn_parent_transaction int4 NOT NULL,
|
||
|
trns_brkdwn_catagory int4 NULL,
|
||
|
trns_brkdwn_bucket int4 NULL,
|
||
|
CONSTRAINT transaction_breakdown_pkey PRIMARY KEY (trns_brkdwn_id)
|
||
|
);
|
||
|
|
||
|
alter table transaction_breakdown add constraint transaction_breakdown_parent_transaction_fkey foreign key (trns_brkdwn_parent_transaction) references transactions(trns_id);
|
||
|
alter table transaction_breakdown add constraint transaction_breakdown_catagory_fkey foreign key (trns_brkdwn_catagory) references transaction_categories(trns_ctgry_id);
|
||
|
alter table transaction_breakdown add constraint transaction_breakdown_bucket_fkey foreign key (trns_brkdwn_bucket) references buckets(bkt_id);
|
||
|
|
||
|
CREATE TABLE transactions (
|
||
|
trns_id int4 NOT NULL GENERATED ALWAYS AS IDENTITY,
|
||
|
trns_amount money NOT NULL,
|
||
|
trns_description varchar(250) NULL,
|
||
|
trns_account int4 NOT NULL,
|
||
|
trns_bucket int4 NULL,
|
||
|
trns_date Date not null,
|
||
|
CONSTRAINT transactions_pkey PRIMARY KEY (trns_id)
|
||
|
);
|
||
|
|
||
|
ALTER TABLE transactions ADD CONSTRAINT transactions_trns_account_fkey FOREIGN KEY (trns_account) REFERENCES accounts(acnt_id);
|
||
|
ALTER TABLE transactions ADD CONSTRAINT transactions_trns_bucket_fkey FOREIGN KEY (trns_bucket) REFERENCES buckets(bkt_id) ON DELETE SET NULL;
|
||
|
|
||
|
CREATE TABLE transaction_categories (
|
||
|
trns_ctgry_id int4 NOT NULL GENERATED ALWAYS AS IDENTITY,
|
||
|
trns_ctgry_dsply_code varchar(5) NOT NULL,
|
||
|
trns_ctgry_dsply_name varchar(50) NOT NULL,
|
||
|
trns_ctgry_description varchar(250) NULL,
|
||
|
CONSTRAINT transaction_categories_pkey PRIMARY KEY (trns_ctgry_id)
|
||
|
);
|
||
|
|
||
|
-- transaction_breakdown foreign keys
|
||
|
|
||
|
ALTER TABLE transaction_breakdown ADD CONSTRAINT transaction_breakdown_trns_brkdwn_catagory_fkey FOREIGN KEY (trns_brkdwn_catagory) REFERENCES transaction_categories(trns_ctgry_id) ON DELETE SET NULL;
|
||
|
ALTER TABLE transaction_breakdown ADD CONSTRAINT transaction_breakdown_trns_brkdwn_parent_transaction_fkey FOREIGN KEY (trns_brkdwn_parent_transaction) REFERENCES transactions(trns_id) ON DELETE CASCADE;
|
||
|
ALTER TABLE transaction_breakdown ADD CONSTRAINT transaction_breakdown_trns_brkdwn_bucket_fkey FOREIGN KEY (trns_brkdwn_bucket) REFERENCES buckets(bkt_id) ON DELETE SET NULL;
|
||
|
`
|
||
|
|
||
|
tx := db.MustBegin()
|
||
|
tx.MustExec(init_sql)
|
||
|
|
||
|
tx.Commit()
|
||
|
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
log.Print("Test database initialized")
|
||
|
|
||
|
}
|