code: func ExecuteCommand(args []string) error {
  	if len(args) == 0 {
  		return nil
  	}
  
  	switch args[0] {
  	case "db-create":
  		f := readFlags(args)
  		if err := createDatabase(f.connection); err != nil {
  			panic("failed to create database: " + err.Error())
  		}
  		os.Exit(0)
  	case "db-migrate":
  		f := readFlags(args)
  		err := migration.Migrate(f.connection, f.version)
  		if err != nil {
  			panic("failed to run migration: " + err.Error())
  		}
  		os.Exit(0)
  	case "db-init-data":
  		f := readFlags(args)
  		if err := initData(f.connection); err != nil {
  			panic("failed to init database: " + err.Error())
  		}
  		os.Exit(0)
  	case "db-version":
  		f := readFlags(args)
  		version, err := migration.Version(f.connection)
  		if err != nil {
  			msg := "failed to print database schema version: "
  			panic(msg + err.Error())
  		}
  		fmt.Println("database schema version:", version)
  		os.Exit(0)
  	}
  	return nil
  }
docs: // ExecuteCommand executes commands to manage database
  // db-create - command to create database
  // db-migrate - command to execute migration scripts
  // db-init-data - command to initialize database by default values
  // db-version - command to print the version of the database schema.