1
Fork 0
photoview/api/database/database.go

87 lines
1.8 KiB
Go
Raw Normal View History

2020-01-30 14:49:39 +01:00
package database
import (
"log"
2020-01-31 15:22:58 +01:00
"net/url"
2020-01-30 14:49:39 +01:00
"os"
"github.com/pkg/errors"
"github.com/viktorstrate/photoview/api/graphql/models"
"gorm.io/driver/mysql"
"gorm.io/gorm"
2020-01-30 14:49:39 +01:00
)
// SetupDatabase connects to the database using environment variables
func SetupDatabase() (*gorm.DB, error) {
2020-01-30 14:49:39 +01:00
2020-01-31 15:22:58 +01:00
address, err := url.Parse(os.Getenv("MYSQL_URL"))
if err != nil {
2020-04-15 20:52:08 +02:00
return nil, errors.Wrap(err, "Could not parse mysql url")
2020-01-31 15:22:58 +01:00
}
if address.String() == "" {
return nil, errors.New("Environment variable MYSQL_URL missing, exiting")
}
2020-01-31 15:22:58 +01:00
queryValues := address.Query()
queryValues.Add("multiStatements", "true")
2020-02-11 14:32:35 +01:00
queryValues.Add("parseTime", "true")
2020-01-31 15:22:58 +01:00
address.RawQuery = queryValues.Encode()
2020-01-30 14:49:39 +01:00
log.Printf("Connecting to database: %s", address)
db, err := gorm.Open(mysql.Open(address.String()), &gorm.Config{})
if err != nil {
return nil, errors.Wrap(err, "could not connect to database")
}
// var db *sql.DB
2020-02-19 21:33:28 +01:00
// db, err = sql.Open("mysql", address.String())
// if err != nil {
// return nil, errors.New("Could not connect to database, exiting")
// }
// tryCount := 0
2020-02-19 21:33:28 +01:00
// for {
// ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
// defer cancel()
// if err := db.PingContext(ctx); err != nil {
// if tryCount < 4 {
// tryCount++
// log.Printf("WARN: Could not ping database: %s, Will retry after 1 second", err)
// time.Sleep(time.Second)
// continue
// } else {
// return nil, errors.Wrap(err, "Could not ping database, exiting")
// }
// }
// break
// }
2020-01-30 14:49:39 +01:00
// db.SetMaxOpenConns(80)
return db, nil
2020-01-30 14:49:39 +01:00
}
2020-01-31 15:22:58 +01:00
func MigrateDatabase(db *gorm.DB) error {
2020-01-31 15:22:58 +01:00
2020-11-23 19:59:01 +01:00
db.AutoMigrate(
&models.User{},
&models.AccessToken{},
&models.SiteInfo{},
2020-11-23 20:43:00 +01:00
&models.Media{},
&models.MediaURL{},
2020-11-23 19:59:01 +01:00
&models.Album{},
&models.MediaEXIF{},
2020-11-25 23:06:47 +01:00
&models.VideoMetadata{},
2020-11-23 19:59:01 +01:00
)
2020-01-31 15:22:58 +01:00
return nil
}