changes to model
This commit is contained in:
@@ -18,7 +18,7 @@ func InitDB(db *sql.DB) {
|
||||
|
||||
CREATE TABLE IF NOT EXISTS trades (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
company_id INTEGER NOT NULL,
|
||||
symbol TEXT NOT NULL,
|
||||
currency_code TEXT NOT NULL,
|
||||
shares INTEGER NOT NULL,
|
||||
product INTEGER NOT NULL CHECK(product IN (0, 1, 2, 3)),
|
||||
@@ -29,16 +29,20 @@ func InitDB(db *sql.DB) {
|
||||
|
||||
CREATE TABLE IF NOT EXISTS position (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
company_id INTEGER NOT NULL,
|
||||
company_id INTEGER NOT NULL UNIQUE,
|
||||
symbol TEXT NOT NULL,
|
||||
currency_id INTEGER NOT NULL,
|
||||
currency_code TEXT NOT NULL,
|
||||
shares INTEGER NOT NULL,
|
||||
weight REAL NOT NULL,
|
||||
cost_basis REAL NOT NULL
|
||||
cost_basis REAL NOT NULL,
|
||||
FOREIGN KEY (currency_id) REFERENCES currencies(id),
|
||||
FOREIGN KEY (company_id) REFERENCES companies(id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS companies (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL UNIQUE,
|
||||
symbol TEXT NOT NULL UNIQUE,
|
||||
shares_outstanding INTEGER NOT NULL,
|
||||
price REAL NOT NULL,
|
||||
currency_id INTEGER NOT NULL,
|
||||
@@ -84,68 +88,3 @@ func InitDB(db *sql.DB) {
|
||||
}
|
||||
fmt.Println("Tables ready")
|
||||
}
|
||||
|
||||
func MigrateAddUniqueToRevenueEntries(db *sql.DB) error {
|
||||
steps := []string{
|
||||
// 1. copy existing data into a temp table with the new constraint
|
||||
`CREATE TABLE IF NOT EXISTS revenue_entries_new (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
company_id INTEGER NOT NULL,
|
||||
currency_id INTEGER NOT NULL,
|
||||
category_id INTEGER NOT NULL,
|
||||
period_id INTEGER NOT NULL,
|
||||
value REAL NOT NULL,
|
||||
FOREIGN KEY (company_id) REFERENCES companies(id),
|
||||
FOREIGN KEY (currency_id) REFERENCES currencies(id),
|
||||
FOREIGN KEY (category_id) REFERENCES category(id),
|
||||
FOREIGN KEY (period_id) REFERENCES periods(id),
|
||||
UNIQUE(company_id, category_id, period_id)
|
||||
)`,
|
||||
// 2. copy data over
|
||||
`INSERT OR IGNORE INTO revenue_entries_new
|
||||
SELECT id, company_id, currency_id, category_id, period_id, value
|
||||
FROM revenue_entries`,
|
||||
// 3. drop old table
|
||||
`DROP TABLE revenue_entries`,
|
||||
// 4. rename new table
|
||||
`ALTER TABLE revenue_entries_new RENAME TO revenue_entries`,
|
||||
}
|
||||
|
||||
for _, step := range steps {
|
||||
if _, err := db.Exec(step); err != nil {
|
||||
return fmt.Errorf("migration failed: %w", err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func MigrateTradeCode(db *sql.DB) error {
|
||||
step :=
|
||||
// 1. copy existing data into a temp table with the new constraint
|
||||
`
|
||||
ALTER TABLE trades RENAME TO trades_old;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS trades (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
company_id INTEGER NOT NULL,
|
||||
currency_code TEXT NOT NULL,
|
||||
shares INTEGER NOT NULL,
|
||||
product INTEGER NOT NULL CHECK(product IN (0, 1, 2, 3)),
|
||||
type INTEGER NOT NULL CHECK(type IN (0, 1)),
|
||||
price REAL NOT NULL,
|
||||
traded_at DATETIME NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO trades (id, company_id, currency_code, shares, product, type, price, traded_at)
|
||||
SELECT id, company_id, '', shares, product, type, price, traded_at
|
||||
FROM trades_old;
|
||||
|
||||
DROP TABLE trades_old;
|
||||
`
|
||||
|
||||
_, err := db.Exec(step)
|
||||
if err != nil {
|
||||
return fmt.Errorf("migration failed: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user