package main import ( "database/sql" "fmt" log "github.com/sirupsen/logrus" ) func (app *App) post_process() error { if app.Config.DisableURLShorter { log.Debug("post_process.go: URL Shorter is disabled (via config)") } else { err := app.short_url() if err != nil { return err } } return nil } func (app *App) short_url() error { var Angebote []Angebot query := `SELECT id, long_url as url FROM all_view WHERE url IS NULL AND long_url IS NOT NULL` rows, err := app.DB.Queryx(query) if err != nil { return err } defer rows.Close() query = `SELECT DISTINCT url FROM all_view ORDER BY URL ASC;` var Short_urls []sql.NullString err = app.DB.Select(&Short_urls, query) if err != nil { log.Error("get all short_urls failed") return err } for rows.Next() { var offer_db Angebot err = rows.StructScan(&offer_db) if err != nil { return err } query = `SELECT DISTINCT short_url FROM angebot WHERE url = ? LIMIT 1` var short_url_exists sql.NullString err = app.DB.Get(&short_url_exists, query, offer_db.Url) if err != nil && err != sql.ErrNoRows { log.Error("get short_url from long_url failed") return err } if !short_url_exists.Valid { for { generated_short_url := getRandomString(5) if !stringInSQLSlice(generated_short_url, Short_urls) { offer_db.Short_url = generated_short_url log.Debug("new short_url: " + string(generated_short_url) + " ( " + offer_db.Url + " )") break } } } else { offer_db.Short_url = short_url_exists.String log.Debug("update old short_url: " + string(short_url_exists.String) + " ( " + offer_db.Url + " )") } Angebote = append(Angebote, offer_db) } for _, offer := range Angebote { _, err := app.DB.Exec(`UPDATE angebot SET short_url = ? WHERE id = ?`, offer.Short_url, offer.Id) if err != nil { return err } } return nil } func (app *App) fix_db() error { query := `SELECT id,name,age FROM all_view` rows, err := app.DB.Queryx(query) if err != nil { return err } defer rows.Close() for rows.Next() { var offer_db Angebot err = rows.StructScan(&offer_db) if err != nil { return err } update_query := `UPDATE angebot SET name = ?, age = ? WHERE id = ?` update_name := false update_age := false name := sanitize_name(offer_db.Name) if name != offer_db.Name { offer_db.Name = name update_name = true } if offer_db.Age == 0 { age := get_age_from_name(name) if age != 0 { offer_db.Age = age update_age = true } } if update_name || update_age { log.Debug(fmt.Sprintf(`UPDATE angebot SET name = "%s", age = %d WHERE id = %d`, offer_db.Name, offer_db.Age, offer_db.Id)) _, err = app.DB.Exec(update_query, offer_db.Name, offer_db.Age, offer_db.Id) if err != nil { offer_db.error_msg = err.Error() offer_db.error_ctx = fmt.Sprintf(`UPDATE angebot SET name = "%s", age = %d WHERE id = %d`, offer_db.Name, offer_db.Age, offer_db.Id) offer_db.Warn("post_process.go: Update query failed.") } } } return nil }