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