interfaces.go 1.6 KB

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