feat: rebuild pet app and backend around core care flows
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"regexp"
|
||||
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/sundynix/pets-be/internal/config"
|
||||
)
|
||||
|
||||
var databaseName = regexp.MustCompile(`^[a-zA-Z0-9_-]+$`)
|
||||
|
||||
// dbinit creates the configured PostgreSQL database once. It does not change other databases.
|
||||
func main() {
|
||||
cfg, err := config.Load()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
name := cfg.Postgres.Database
|
||||
if !databaseName.MatchString(name) {
|
||||
log.Fatal("invalid database name")
|
||||
}
|
||||
maintenance := cfg.Postgres
|
||||
maintenance.Database = "postgres"
|
||||
db, err := gorm.Open(postgres.Open(maintenance.DSN()), &gorm.Config{})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
var count int64
|
||||
if err := db.Raw("SELECT count(*) FROM pg_database WHERE datname = ?", name).Scan(&count).Error; err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if count > 0 {
|
||||
log.Printf("database %s already exists", name)
|
||||
return
|
||||
}
|
||||
if err := db.Exec(fmt.Sprintf("CREATE DATABASE \"%s\"", name)).Error; err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Printf("created database %s", name)
|
||||
}
|
||||
Reference in New Issue
Block a user