Skip to content

Commit

Permalink
Merge pull request #6 from darcys22/mysql-backend
Browse files Browse the repository at this point in the history
Mysql backend
  • Loading branch information
darcys22 authored Apr 19, 2020
2 parents 36426ae + cb40189 commit 65368ec
Show file tree
Hide file tree
Showing 13 changed files with 824 additions and 59 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,4 @@ password.txt

# Ignore Build
build
release
16 changes: 16 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
BINARY := godbledger
VERSION ?= latest
PLATFORMS := linux
os = $(word 1, $@)

.PHONY: $(PLATFORMS)
$(PLATFORMS):
mkdir -p release/$(BINARY)-$(os)-x64-v$(VERSION)/
GOOS=$(os) GOARCH=amd64 go build -o release/$(BINARY)-$(os)-x64-v$(VERSION)/ ./...

.PHONY: release
release: linux

PHONY: clean
clean:
rm -rf release/
20 changes: 20 additions & 0 deletions godbledger/core/trialbalance.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package core

import ()

type Tag struct {
Name string `json:"Name"`
Total int `json:"Total"`
Accounts []PDFAccount `json:"Accounts"`
}

type PDFAccount struct {
Account string `json:"Account"`
Amount int `json:"Amount"`
}

var Reporteroutput struct {
Data []Tag `json:"Tags"`
Profit int `json:"Profit"`
NetAssets int `json:"NetAssets"`
}
3 changes: 3 additions & 0 deletions godbledger/db/database.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package db

import (
"database/sql"
"github.com/darcys22/godbledger/godbledger/core"
"time"
)

// Database wraps all database operations.
Expand All @@ -26,4 +28,5 @@ type Database interface {
AddUser(usr *core.User) error
SafeAddUser(usr *core.User) error
GetTB(date time.Time) error
Query(query string, args ...interface{}) (*sql.Rows, error)
}
204 changes: 204 additions & 0 deletions godbledger/db/mysql/mysqldb.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
package mysqldb

import (
"database/sql"

"github.com/sirupsen/logrus"

_ "github.com/go-sql-driver/mysql"
)

var log = logrus.WithField("prefix", "MySQL")

type Database struct {
DB *sql.DB
ConnectionString string
}

// Close closes the underlying database.
func (db *Database) Close() error {
return db.DB.Close()
}

func DSN(DB_USER, DB_PASS, DB_HOST, DB_NAME string) string {
return DB_USER + ":" + DB_PASS + "@" + DB_HOST + "/" + DB_NAME + "?charset=utf8"
//return DB_USER + ":" + DB_PASS + "@" + DB_HOST + "/"
}

// NewDB initializes a new DB.
//TODO(Sean): this should actually use the connection_string rather than hardcoded
func NewDB(connection_string string) (*Database, error) {
//if connection_string == "" {
//DB_HOST := "tcp(127.0.0.1:3306)"
//DB_NAME := "ledger"
//DB_USER := "godbledger"
//DB_PASS := "password"
//connection_string = DSN(DB_USER, DB_PASS, DB_HOST, DB_NAME)
//}
log.Debug(connection_string)
MySQLDB, err := sql.Open("mysql", connection_string)
if err != nil {
log.Fatal(err.Error)
return nil, err
}

db := &Database{DB: MySQLDB, ConnectionString: connection_string}

return db, nil
}

func (db *Database) InitDB() error {
log.Info("Initialising DB Table")

//USERS
createDB := `
CREATE TABLE IF NOT EXISTS users (
user_id VARCHAR(255) NOT NULL,
username VARCHAR(255) NOT NULL,
PRIMARY KEY(user_id)
);`
log.Debug("Query: " + createDB)
_, err := db.DB.Exec(createDB)
if err != nil {
log.Fatal(err)
}

//ACCOUNTS
createDB = `
CREATE TABLE IF NOT EXISTS accounts (
account_id VARCHAR(255) NOT NULL,
name VARCHAR(255) NOT NULL,
PRIMARY KEY(account_id)
);`
log.Debug("Query: " + createDB)
_, err = db.DB.Exec(createDB)
if err != nil {
log.Fatal(err)
}

//TAGS
createDB = `
CREATE TABLE IF NOT EXISTS tags (
tag_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
tag_name VARCHAR(100) NOT NULL UNIQUE
);`
log.Debug("Query: " + createDB)
_, err = db.DB.Exec(createDB)
if err != nil {
log.Fatal(err)
}

//TAGS FOR ACCOUNTS
createDB = `
CREATE TABLE IF NOT EXISTS account_tag (
account_id VARCHAR(255) NOT NULL,
tag_id INTEGER NOT NULL,
FOREIGN KEY (account_id) REFERENCES accounts (account_id) ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags (tag_id) ON DELETE RESTRICT ON UPDATE CASCADE,
PRIMARY KEY (account_id, tag_id)
);`
log.Debug("Query: " + createDB)
_, err = db.DB.Exec(createDB)
if err != nil {
log.Fatal(err)
}

//CURRENCIES
createDB = `
CREATE TABLE IF NOT EXISTS currencies (
name VARCHAR(255) NOT NULL,
decimals INT NOT NULL,
PRIMARY KEY(name)
);`
log.Debug("Query: " + createDB)
_, err = db.DB.Exec(createDB)
if err != nil {
log.Fatal(err)
}

//TRANSACTIONS
createDB = `
CREATE TABLE IF NOT EXISTS transactions (
transaction_id VARCHAR(255) NOT NULL,
postdate DATETIME NOT NULL,
brief VARCHAR(255),
PRIMARY KEY(transaction_id)
);`
log.Debug("Query: " + createDB)
_, err = db.DB.Exec(createDB)
if err != nil {
log.Fatal(err)
}

//TRANSACTIONS BODY
createDB = `
CREATE TABLE IF NOT EXISTS transactions_body (
transaction_id VARCHAR(255) NOT NULL,
body TEXT,
FOREIGN KEY(transaction_id) REFERENCES transactions(transaction_id) ON DELETE CASCADE
);`
log.Debug("Query: " + createDB)
_, err = db.DB.Exec(createDB)
if err != nil {
log.Fatal(err)
}

//LINE ITEMS FOR TRANSACTIONS (SPLITS)
createDB = `
CREATE TABLE IF NOT EXISTS splits (
split_id VARCHAR(255) NOT NULL,
split_date DATETIME,
description VARCHAR(255),
currency VARCHAR(255),
amount BIGINT,
transaction_id VARCHAR(255),
FOREIGN KEY(transaction_id) REFERENCES transactions(transaction_id) ON DELETE CASCADE,
PRIMARY KEY(split_id)
);`
log.Debug("Query: " + createDB)
_, err = db.DB.Exec(createDB)
if err != nil {
log.Fatal(err)
}

//ACCOUNTS FOR SPLITS
createDB = `
CREATE TABLE IF NOT EXISTS split_accounts (
id INT AUTO_INCREMENT PRIMARY KEY,
split_id VARCHAR(255),
account_id VARCHAR(255),
FOREIGN KEY(split_id) REFERENCES splits(split_id) ON DELETE CASCADE,
FOREIGN KEY(account_id) REFERENCES accounts(account_id) ON DELETE CASCADE
);`
log.Debug("Query: " + createDB)
_, err = db.DB.Exec(createDB)
if err != nil {
log.Fatal(err)
}

//ENTITIES
createDB = `
CREATE TABLE IF NOT EXISTS entities (
entity_id VARCHAR(255) NOT NULL,
name VARCHAR(255) NOT NULL,
tag VARCHAR(255),
type VARCHAR(255),
description VARCHAR(255),
PRIMARY KEY(entity_id)
);`
log.Debug("Query: " + createDB)
_, err = db.DB.Exec(createDB)
if err != nil {
log.Fatal(err)
}
return err
}

// ClearDB removes the previously stored directory at the data directory.
func ClearDB(dirPath string) error {
//if _, err := os.Stat(dirPath); os.IsNotExist(err) {
//return nil
//}
//return os.RemoveAll(dirPath)
return nil
}
Loading

0 comments on commit 65368ec

Please sign in to comment.