68 lines
1.7 KiB
Go
68 lines
1.7 KiB
Go
package storage
|
|
|
|
import (
|
|
"git.espin.casa/albert/TC2-BBS-Mesh/internal/types"
|
|
"git.espin.casa/albert/logger"
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type Storage struct {
|
|
db *gorm.DB
|
|
log logger.LoggerAdapter
|
|
}
|
|
|
|
// ListBulletins list all bulletins in database
|
|
func (s *Storage) ListBulletins() (bulletins []types.Bulletin, err error) {
|
|
// get all list bulletins
|
|
if err := s.db.Find(&bulletins).Error; err != nil {
|
|
s.log.Error("list all bulletins failed", err, logger.LogFields{})
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
|
|
// ListMails list all mails in database
|
|
func (s *Storage) ListMails() (mails []types.Mail, err error) {
|
|
// get all list mails
|
|
if err := s.db.Find(&mails).Error; err != nil {
|
|
s.log.Error("list all mails failed", err, logger.LogFields{})
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
|
|
// ListChannels list all channels in database
|
|
func (s *Storage) ListChannels() (channels []types.Channel, err error) {
|
|
// get all list channels
|
|
if err := s.db.Find(&channels).Error; err != nil {
|
|
s.log.Error("list all channels failed", err, logger.LogFields{})
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
|
|
// NewStorage create a new storage instance with database connection and logger
|
|
func NewStorage(path string, log logger.LoggerAdapter) (*Storage, error) {
|
|
db, err := gorm.Open(sqlite.Open(path), &gorm.Config{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// AutoMigrate will create the tables and necessary constraints for your models
|
|
err = db.AutoMigrate(&types.Bulletin{}, &types.Mail{}, &types.Channel{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &Storage{db: db, log: log}, nil
|
|
}
|
|
|
|
func (s *Storage) Close() error {
|
|
sqlDB, err := s.db.DB()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return sqlDB.Close()
|
|
}
|