Skip to content
Snippets Groups Projects
models.go 2.21 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	"time"
    
    	"forge.grandlyon.com/web-et-numerique/factory/llle_project/backoffice-server/internal/common"
    
    	"gorm.io/driver/mysql"
    	"gorm.io/driver/sqlite"
    	"gorm.io/gorm"
    )
    
    type DataHandler struct {
    
    	sqlClient *gorm.DB
    
    }
    
    var (
    	dbUser     = common.StringValueFromEnv("DATABASE_USER", "")
    	dbPassword = common.StringValueFromEnv("DATABASE_PASSWORD", "")
    	dbName     = common.StringValueFromEnv("DATABASE_NAME", "")
    	dbHost     = common.StringValueFromEnv("DATABASE_HOST", "")
    )
    
    // NewDataHandler init a DataHandler and returns a pointer to it
    func NewDataHandler() *DataHandler {
    
    	// SQL setup
    	var sqlClient *gorm.DB
    
    	var err error
    	if dbUser == "" || dbPassword == "" || dbName == "" {
    
    		sqlClient, err = gorm.Open(sqlite.Open("backoffice.db"), &gorm.Config{})
    
    			panic("failed to connect sqlite database")
    
    		}
    	} else {
    		dsn := fmt.Sprintf("%v:%v@tcp(%v:3306)/%v?charset=utf8mb4&parseTime=True&loc=Local", dbUser, dbPassword, dbHost, dbName)
    
    		sqlClient, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
    
    			panic("failed to connect MySQL database")
    
    	sqlClient.AutoMigrate(&MailSubject{})
    	sqlClient.AutoMigrate(&MonthlyInfo{})
    	sqlClient.AutoMigrate(&MonthlyNews{})
    	sqlClient.AutoMigrate(&Poll{})
    	sqlClient.AutoMigrate(&PartnersInfo{})
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    	sqlClient.AutoMigrate(&CustomPopup{})
    
    	sqlClient.AutoMigrate(&Price{})
    
    	sqlClient.AutoMigrate(&SgeConsent{})
    	sqlClient.AutoMigrate(&GrdfConsent{})
    
    	// Check if partners info already exists
    	var partnersInfo PartnersInfo
    	err = sqlClient.First(&partnersInfo).Error
    	if errors.Is(err, gorm.ErrRecordNotFound) {
    		// Create default partner status
    		sqlClient.Create(&PartnersInfo{
    			GRDFFailure:           false,
    			EnedisFailure:         false,
    			EGLFailure:            false,
    			NotificationActivated: false,
    		})
    	}
    
    	// Check if custom popup already exists
    	var customPopup CustomPopup
    	err = sqlClient.First(&customPopup).Error
    	if errors.Is(err, gorm.ErrRecordNotFound) {
    		// Create default custom popup
    		sqlClient.Create(&CustomPopup{
    			PopupEnabled: false,
    			Title:        "",
    
    			Description:  "",
    
    			EndDate:      time.Now(),
    
    	return &DataHandler{sqlClient: sqlClient}