51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/rs/zerolog/log"
 | |
| 	"gorm.io/driver/postgres"
 | |
| 	"gorm.io/gorm"
 | |
| 	"gorm.io/gorm/logger"
 | |
| )
 | |
| 
 | |
| var DB *gorm.DB
 | |
| 
 | |
| func connectToDB() {
 | |
| 	dsn := fmt.Sprintf(
 | |
| 		"host=%v user=%v password=%v dbname=%v port=%v sslmode=disable TimeZone=Asia/Taipei",
 | |
| 		DB_HOST, DB_USER, DB_PASSWD, DB_NAME, DB_PORT,
 | |
| 	)
 | |
| 	config := &gorm.Config{
 | |
| 		Logger:                 logger.Discard,
 | |
| 		SkipDefaultTransaction: true,
 | |
| 	}
 | |
| 	if flagDev {
 | |
| 		config.Logger = logger.Default
 | |
| 	}
 | |
| 	for {
 | |
| 		db, err := gorm.Open(postgres.New(postgres.Config{
 | |
| 			DSN: dsn, // data source name
 | |
| 			// PreferSimpleProtocol: true, // disables implicit prepared statement usage
 | |
| 		}), config)
 | |
| 		if err == nil {
 | |
| 			DB = db
 | |
| 			break
 | |
| 		}
 | |
| 		log.Warn().Err(err).Msg("Unable to connect to database")
 | |
| 		log.Warn().Msgf("Retrying in %v second.", 5)
 | |
| 		time.Sleep(time.Second * 5)
 | |
| 	}
 | |
| 	log.Info().Msg("Connection to postgres, ok.")
 | |
| }
 | |
| 
 | |
| func migrateDB() {
 | |
| 	if err := DB.SetupJoinTable(&User{}, "Products", &Order{}); err != nil {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 	if err := DB.AutoMigrate(&Node{}, &User{}, &Profile{}, &Product{}, &Order{}, &Price{}, &Sales{}); err != nil {
 | |
| 		panic(err)
 | |
| 	}
 | |
| }
 |