This repository has been archived on 2025-03-01. You can view files and clone it, but cannot push or open issues or pull requests.
trantor/lib/database/database.go
2017-05-21 11:07:13 +00:00

77 lines
1.6 KiB
Go

package database
import (
"github.com/go-pg/pg"
)
type DB interface {
Close() error
AddBook(book Book) error
GetBooks(query string, length int, start int) (books []Book, num int, err error)
GetNewBooks(query string, length int, start int) (books []Book, num int, err error)
GetBookID(id string) (Book, error)
DeleteBook(id string) error
UpdateBook(id string, data map[string]interface{}) error
ActiveBook(id string) error
IsBookActive(id string) bool
AddUser(name string, pass string) error
GetRole(name string) (string, error)
SetPassword(name string, pass string) error
ValidPassword(name string, pass string) bool
AddNews(text string) error
GetNews(num int, days int) (news []New, err error)
AddStats(stats interface{}) error
GetVisitedBooks() (books []Book, err error)
GetDownloadedBooks() (books []Book, err error)
GetTags() ([]string, error)
}
const (
tagsDisplay = 50
)
type pgDB struct {
sql *pg.DB
tags []string
bookCount int
}
// Options for the database
type Options struct {
Addr string
User string
Password string
Name string
}
// Init the database connection
func Init(options Options) (DB, error) {
network := "tcp"
if options.Addr[0] == '/' {
network = "unix"
}
sql := pg.Connect(&pg.Options{
Network: network,
Addr: options.Addr,
User: options.User,
Password: options.Password,
Database: options.Name,
})
// TODO: create db
var db pgDB
db.sql = sql
go db.tagUpdater()
go db.countUpdater()
return &db, nil
}
// Close the database connection
func (db pgDB) Close() error {
return db.sql.Close()
}
func RO(db DB) DB {
return &roDB{db}
}