interfaces.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package store
  2. import (
  3. "fmt"
  4. "git.linuxforward.com/byom/byom-core/common"
  5. "git.linuxforward.com/byom/byom-core/logger"
  6. "github.com/sirupsen/logrus"
  7. "gorm.io/gorm"
  8. )
  9. type DataStore struct {
  10. logger *logrus.Entry
  11. db *gorm.DB
  12. }
  13. func NewDataStore(db *gorm.DB) *DataStore {
  14. return &DataStore{
  15. db: db,
  16. logger: logger.NewLogger("data-store"),
  17. }
  18. }
  19. func InitTables(db *gorm.DB) error {
  20. err := db.AutoMigrate(&common.User{}, &common.Invite{}, &common.UserWorkspaceRole{}, &common.Workspace{}, &common.Profile{})
  21. if err != nil {
  22. return err
  23. }
  24. // check if there are any invites that are pending and have expired
  25. var invites []common.Invite
  26. result := db.Where("status = ? AND expires_at < ?", "pending", "now()").Find(&invites)
  27. if result.Error != nil {
  28. return fmt.Errorf("get expired invites: %w", result.Error)
  29. }
  30. // update the status of expired invites
  31. for _, invite := range invites {
  32. result := db.Model(&common.Invite{}).Where("token = ?", invite.Token).Update("status", "expired")
  33. if result.Error != nil {
  34. return fmt.Errorf("update expired invite status: %w", result.Error)
  35. }
  36. }
  37. return nil
  38. }
  39. //Tx methods
  40. func (s *DataStore) BeginTx() *gorm.DB {
  41. return s.db.Begin()
  42. }
  43. func (s *DataStore) CommitTx(tx *gorm.DB) error {
  44. return tx.Commit().Error
  45. }
  46. func (s *DataStore) Close() error {
  47. s.logger.Info("Closing database connections")
  48. sqlDB, err := s.db.DB()
  49. if err != nil {
  50. return fmt.Errorf("get sql.DB instance: %w", err)
  51. }
  52. if err := sqlDB.Close(); err != nil {
  53. return fmt.Errorf("close database connections: %w", err)
  54. }
  55. s.logger.Info("Database connections closed successfully")
  56. return nil
  57. }