mirror of https://github.com/stashapp/stash.git
67 lines
1.4 KiB
Go
67 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)
|
||
|
}
|