2022-02-13 18:51:38 +01:00

61 lines
1.4 KiB
Go

package api
import (
"log"
"os"
"time"
"gitlab.celogeek.com/photos/api/internal/photos/models"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
func (s *Service) Migrate() {
tx := s.DB.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")
tx.AutoMigrate(&models.Account{})
tx.AutoMigrate(&models.Session{})
tx.AutoMigrate(&models.File{})
}
func (s *Service) DBConfig() {
s.Config.DB.Params = map[string]string{
"charset": "utf8mb4",
}
s.Config.DB.Collation = "utf8mb4_bin"
s.Config.DB.ParseTime = true
s.Config.DB.Loc = time.UTC
s.Config.DB.Net = "tcp"
s.Config.DB.InterpolateParams = true
mysql.CreateClauses = []string{"INSERT", "VALUES", "ON CONFLICT", "RETURNING"}
}
func (s *Service) DBConnect() {
db, err := gorm.Open(mysql.Open(s.Config.DB.FormatDSN()), &gorm.Config{
Logger: logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
logger.Config{
SlowThreshold: time.Second, // Slow SQL threshold
LogLevel: logger.Error, // Log level
IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger
Colorful: true, // Disable color
},
),
SkipDefaultTransaction: true,
PrepareStmt: true,
})
if err != nil {
s.LogErr.Fatal("DB", err)
}
s.DB = db
}
func (s *Service) SetupDB() {
s.DBConfig()
s.DBConnect()
s.Migrate()
}