From 651cc738adad10187c577997bb375ecd4dbe147c Mon Sep 17 00:00:00 2001 From: Chteufleur Date: Mon, 11 Apr 2016 22:49:07 +0200 Subject: [PATCH] Add database management --- database/database.go | 113 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 database/database.go diff --git a/database/database.go b/database/database.go new file mode 100644 index 0000000..5d80424 --- /dev/null +++ b/database/database.go @@ -0,0 +1,113 @@ +package database + +import ( + "database/sql" + _ "github.com/mattn/go-sqlite3" + "log" +) + +const ( + databaseFile = "go_xmpp4steam.db" + + createDatabaseStmt = "create table if not exists users (jid text not null primary key, steamLogin text, steamPwd text);" + insertDatabaseStmt = "insert into users (jid, steamLogin, steamPwd) values(?, ?, ?)" + deleteDatabaseStmt = "delete from users where jid = ?" + selectDatabaseStmt = "select jid, steamLogin, steamPwd from users where jid = ?" + + LogInfo = "\t[SQLITE INFO]\t" + LogError = "\t[SQLITE ERROR]\t" + LogDebug = "\t[SQLITE DEBUG]\t" +) + +type DatabaseLine struct { + Jid string + SteamLogin string + SteamPwd string +} + +var ( + db = new(sql.DB) +) + + +func init() { + d, err := sql.Open("sqlite3", databaseFile) + if err != nil { + log.Printf("%sError on openning database", LogError, err) + } + db = d + + _, err = db.Exec(createDatabaseStmt) + if err != nil { + log.Printf("%sFailed to create table", LogError, err) + } +} + +func Close() { + db.Close() +} + + +func (newLine *DatabaseLine) AddLine() bool { + log.Printf("%sAdd new line %v", LogInfo, newLine) + stmt, err := db.Prepare(insertDatabaseStmt) + if err != nil { + log.Printf("%sError on insert jid %s", LogError, newLine.Jid, err) + return false + } + defer stmt.Close() + _, err = stmt.Exec(newLine.Jid, newLine.SteamLogin, newLine.SteamPwd) + if err != nil { + log.Printf("%sError on creating SQL statement", LogError, err) + return false + } + + return true +} + +func RemoveLine(jid string) bool { + // FIXME not working + log.Printf("%sRemove line %s", LogInfo, jid) + + stmt, err := db.Prepare(deleteDatabaseStmt) + if err != nil { + log.Printf("%sError on delete jid %s", LogError, jid, err) + return false + } + defer stmt.Close() + res, err := stmt.Exec(jid) + if err != nil { + log.Printf("%sError on delete SQL statement", LogError, err) + return false + } + + affect, err := res.RowsAffected() + if err != nil { + log.Printf("%sError on delete SQL statement", LogError, err) + return false + } + if affect == 0 { + return false + } + + return true +} + +func GetLine(jid string) (*DatabaseLine) { + log.Printf("%sGet line %s", LogInfo, jid) + ret := new(DatabaseLine) + + stmt, err := db.Prepare(selectDatabaseStmt) + if err != nil { + log.Printf("%sError on select line", LogError, err) + return nil + } + defer stmt.Close() + + err = stmt.QueryRow(jid).Scan(&ret.Jid, &ret.SteamLogin, &ret.SteamPwd) + if err != nil { + log.Printf("%sError on select scan", LogError, err) + } + + return ret +}