mirror of
https://github.com/stashapp/stash.git
synced 2025-12-06 16:34:02 +01:00
* Confirm before migrating database Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
package api
|
|
|
|
import (
|
|
"fmt"
|
|
"html/template"
|
|
"net/http"
|
|
|
|
"github.com/stashapp/stash/pkg/database"
|
|
)
|
|
|
|
type migrateData struct {
|
|
ExistingVersion uint
|
|
MigrateVersion uint
|
|
BackupPath string
|
|
}
|
|
|
|
func getMigrateData() migrateData {
|
|
return migrateData{
|
|
ExistingVersion: database.Version(),
|
|
MigrateVersion: database.AppSchemaVersion(),
|
|
BackupPath: database.DatabaseBackupPath(),
|
|
}
|
|
}
|
|
|
|
func getMigrateHandler(w http.ResponseWriter, r *http.Request) {
|
|
if !database.NeedsMigration() {
|
|
http.Redirect(w, r, "/", 301)
|
|
return
|
|
}
|
|
|
|
data, _ := setupUIBox.Find("migrate.html")
|
|
templ, err := template.New("Migrate").Parse(string(data))
|
|
if err != nil {
|
|
http.Error(w, fmt.Sprintf("error: %s", err), 500)
|
|
return
|
|
}
|
|
|
|
err = templ.Execute(w, getMigrateData())
|
|
if err != nil {
|
|
http.Error(w, fmt.Sprintf("error: %s", err), 500)
|
|
}
|
|
}
|
|
|
|
func doMigrateHandler(w http.ResponseWriter, r *http.Request) {
|
|
err := r.ParseForm()
|
|
if err != nil {
|
|
http.Error(w, fmt.Sprintf("error: %s", err), 500)
|
|
}
|
|
|
|
backupPath := r.Form.Get("backuppath")
|
|
|
|
// perform database backup
|
|
if backupPath != "" {
|
|
if err = database.Backup(backupPath); err != nil {
|
|
http.Error(w, fmt.Sprintf("error backing up database: %s", err), 500)
|
|
return
|
|
}
|
|
}
|
|
|
|
err = database.RunMigrations()
|
|
if err != nil {
|
|
http.Error(w, fmt.Sprintf("error performing migration: %s", err), 500)
|
|
return
|
|
}
|
|
http.Redirect(w, r, "/", 301)
|
|
}
|