package photosapi import ( "fmt" "log" "os" "time" "gorm.io/driver/postgres" "gorm.io/gorm" "gorm.io/gorm/logger" ) type DBConfig struct { Host string User string Password string Port uint Database string } func (d *DBConfig) DSN() string { return fmt.Sprintf( "host=%s user=%s password=%s dbname=%s port=%d sslmode=disable TimeZone=UTC", d.Host, d.User, d.Password, d.Database, d.Port, ) } func (s *Service) Migrate() { tx := s.DB tx.AutoMigrate(&Account{}) tx.AutoMigrate(&File{}) } func (s *Service) DBConnect() { db, err := gorm.Open(postgres.Open(s.Config.DB.DSN()), &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.DBConnect() s.Migrate() }