interfaces.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package store
  2. import (
  3. "fmt"
  4. "git.linuxforward.com/byom/byom-gateway/logger"
  5. "github.com/sirupsen/logrus"
  6. "gorm.io/gorm"
  7. )
  8. type DataStore struct {
  9. logger *logrus.Entry
  10. db *gorm.DB
  11. }
  12. func NewDataStore(db *gorm.DB) *DataStore {
  13. err := InitTables(db)
  14. if err != nil {
  15. logger.NewLogger("data-store").Fatal("Failed to initialize tables: ", err)
  16. }
  17. return &DataStore{
  18. db: db,
  19. logger: logger.NewLogger("data-store"),
  20. }
  21. }
  22. func InitTables(db *gorm.DB) error {
  23. err := db.AutoMigrate(&UserHost{})
  24. if err != nil {
  25. return err
  26. }
  27. return nil
  28. }
  29. //Tx methods
  30. func (s *DataStore) BeginTx() *gorm.DB {
  31. return s.db.Begin()
  32. }
  33. func (s *DataStore) CommitTx(tx *gorm.DB) error {
  34. return tx.Commit().Error
  35. }
  36. func (s *DataStore) Close() error {
  37. s.logger.Info("Closing database connections")
  38. sqlDB, err := s.db.DB()
  39. if err != nil {
  40. return fmt.Errorf("get sql.DB instance: %w", err)
  41. }
  42. if err := sqlDB.Close(); err != nil {
  43. return fmt.Errorf("close database connections: %w", err)
  44. }
  45. s.logger.Info("Database connections closed successfully")
  46. return nil
  47. }