forked from chteufleur/go-xmpp4steam
Add database management
This commit is contained in:
parent
24f1a6d7a2
commit
651cc738ad
|
|
@ -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
|
||||
}
|
||||
Loading…
Reference in New Issue