12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package store
- import (
- "fmt"
- "git.linuxforward.com/byom/byom-core/common"
- "github.com/sirupsen/logrus"
- "gorm.io/gorm"
- )
- type DataStore struct {
- logger *logrus.Entry
- db *gorm.DB
- }
- func NewDataStore(db *gorm.DB) *DataStore {
- logger := logrus.WithField("core", "user-store")
- InitTables(db)
- return &DataStore{
- db: db,
- logger: logger,
- }
- }
- func InitTables(db *gorm.DB) error {
- err := db.AutoMigrate(&common.User{}, &common.Invite{}, &common.UserWorkspaceRole{}, &common.Workspace{}, &common.Profile{})
- if err != nil {
- return err
- }
- // check if there are any invites that are pending and have expired
- var invites []common.Invite
- result := db.Where("status = ? AND expires_at < ?", "pending", "now()").Find(&invites)
- if result.Error != nil {
- return fmt.Errorf("get expired invites: %w", result.Error)
- }
- // update the status of expired invites
- for _, invite := range invites {
- result := db.Model(&common.Invite{}).Where("token = ?", invite.Token).Update("status", "expired")
- if result.Error != nil {
- return fmt.Errorf("update expired invite status: %w", result.Error)
- }
- }
- return nil
- }
- //Tx methods
- func (s *DataStore) BeginTx() *gorm.DB {
- return s.db.Begin()
- }
- func (s *DataStore) CommitTx(tx *gorm.DB) error {
- return tx.Commit().Error
- }
- func (s *DataStore) Close() error {
- s.logger.Info("Closing database connections")
- sqlDB, err := s.db.DB()
- if err != nil {
- return fmt.Errorf("get sql.DB instance: %w", err)
- }
- if err := sqlDB.Close(); err != nil {
- return fmt.Errorf("close database connections: %w", err)
- }
- s.logger.Info("Database connections closed successfully")
- return nil
- }
|