You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
seaweed/sea.go

95 lines
2.0 KiB
Go

11 months ago
/***
Пакет seaweed предназначен для облегчения работы с БД sea
11 months ago
и weed.
11 months ago
Текущая версия: v1.0.8
11 months ago
***/
package seaweed
1 year ago
import (
11 months ago
"errors"
"fmt"
"os"
11 months ago
_ "github.com/go-sql-driver/mysql"
1 year ago
"github.com/jmoiron/sqlx"
11 months ago
// "github.com/kataras/pio"
"github.com/kataras/golog"
1 year ago
)
11 months ago
const VERSION = "v1.0.8"
11 months ago
// ============= SEA ============
type Sea struct {
db *sqlx.DB
11 months ago
debug bool
}
// Окрывает БД sea, соединяется с weed.
// Если options = true, то будут выводиться отладочные сообщения
func Connect(options ...bool) (*Sea, error) {
debug := false
if len(options) > 0 && options[0] {
debug = true
}
11 months ago
11 months ago
user := os.Getenv("SEA_USER")
if user == "" {
return nil, errors.New("не установлена переменная SEA_USER")
11 months ago
}
password := os.Getenv("SEA_PASSWORD")
if password == "" {
return nil, errors.New("не установлена переменная SEA_PASSWORD")
11 months ago
}
db, err := openDB(user, password)
if err != nil {
return nil, err
}
11 months ago
sea := Sea{db: db, debug: debug}
if debug {
golog.Infof("БД \"sea\" успешно открыта. %s", VERSION)
11 months ago
}
return &sea, nil
}
11 months ago
func openDB(user, password string) (*sqlx.DB, error) {
conn := fmt.Sprintf("%s:%s@(xigmanas:3306)/sea", user, password)
db, err := sqlx.Open("mysql", conn)
11 months ago
if err != nil {
return nil, err
}
return db, nil
}
// ============= ALBUM ============
11 months ago
11 months ago
// Album содержит информацию об активном альбоме
1 year ago
type Album struct {
Seria string
Cnt int
Hash string
}
11 months ago
// Albums возвращает список активных альбомов,
11 months ago
// без учета комиксов. Использует процедуру getAlbums в MySQL.
func (s *Sea) Albums() ([]Album, error) {
11 months ago
cmd := "call getAlbums()"
var albums []Album
err := s.db.Select(&albums, cmd)
if err != nil {
return nil, err
}
if s.debug {
golog.Infof("Получен список альбомов: %d", len(albums))
}
11 months ago
return albums, nil
1 year ago
}