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