TC2-BBS-Mesh/internal/storage/storage.go
2025-03-10 13:58:14 +01:00

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()
}