support.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package support
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "golang-fave/engine/sqlw"
  6. "golang-fave/support/migrate"
  7. "golang-fave/utils"
  8. )
  9. type Support struct {
  10. }
  11. func New() *Support {
  12. sup := Support{}
  13. return &sup
  14. }
  15. func (this *Support) Migration(dir string) error {
  16. files, err := ioutil.ReadDir(dir)
  17. if err != nil {
  18. return err
  19. }
  20. for _, file := range files {
  21. if utils.IsDir(dir + string(os.PathSeparator) + file.Name()) {
  22. if err := this.Migrate(dir + string(os.PathSeparator) + file.Name()); err != nil {
  23. return err
  24. }
  25. }
  26. }
  27. return nil
  28. }
  29. func (this *Support) Migrate(host string) error {
  30. mysql_config_file := host + string(os.PathSeparator) + "config" + string(os.PathSeparator) + "mysql.json"
  31. if utils.IsMySqlConfigExists(mysql_config_file) {
  32. mc, err := utils.MySqlConfigRead(mysql_config_file)
  33. if err != nil {
  34. return err
  35. }
  36. db, err := sqlw.Open("mysql", mc.User+":"+mc.Password+"@tcp("+mc.Host+":"+mc.Port+")/"+mc.Name)
  37. if err != nil {
  38. return err
  39. }
  40. if err := db.Ping(); err != nil {
  41. return err
  42. }
  43. defer db.Close()
  44. var version string
  45. if err := db.QueryRow(`SELECT value FROM settings WHERE name = 'database_version' LIMIT 1;`).Scan(&version); err != nil {
  46. return err
  47. }
  48. return this.Process(db, version, host)
  49. }
  50. return nil
  51. }
  52. func (this *Support) Process(db *sqlw.DB, version string, host string) error {
  53. return migrate.Run(db, utils.StrToInt(version), host)
  54. }