aboutsummaryrefslogtreecommitdiff
path: root/app/cmd/migrate.go
diff options
context:
space:
mode:
Diffstat (limited to 'app/cmd/migrate.go')
-rw-r--r--app/cmd/migrate.go110
1 files changed, 79 insertions, 31 deletions
diff --git a/app/cmd/migrate.go b/app/cmd/migrate.go
index 3c4fd05..95a1dc3 100644
--- a/app/cmd/migrate.go
+++ b/app/cmd/migrate.go
@@ -17,35 +17,83 @@ var migrateCmd = &cobra.Command{
Long: `Up and down migrations`,
}
-var migrateUp = &cobra.Command{
- Use: "up",
- Short: "Migrate up",
- Long: `Up migrations`,
- RunE: func(cmd *cobra.Command, args []string) error {
- db, err := sql.Open("sqlite3", dbFile)
- if err != nil {
- return fmt.Errorf("open db failed: %w", err)
- }
- defer db.Close()
-
- driver, err := sqlite.WithInstance(db, &sqlite.Config{})
- if err != nil {
- return fmt.Errorf("failed create migration driver: %w", err)
- }
- sourceDriver, err := iofs.New(migrations.FS, ".")
- if err != nil {
- return fmt.Errorf("failed open migrations: %w", err)
- }
-
- m, err := migrate.NewWithInstance("fs", sourceDriver, "sqlite3", driver)
- if err != nil {
- return fmt.Errorf("open migration failed: %w", err)
- }
-
- if err := m.Up(); err != nil && err != migrate.ErrNoChange {
- return fmt.Errorf("do migration failed: %w", err)
- }
-
- return nil
- },
+func init() {
+ migrateCmd.AddCommand(
+ &cobra.Command{
+ Use: "up",
+ Short: "Migrate up",
+ Long: `Up migrations`,
+ RunE: up,
+ },
+ &cobra.Command{
+ Use: "down",
+ Short: "Migrate down",
+ Long: `Down migrations`,
+ RunE: down,
+ },
+ &cobra.Command{
+ Use: "drop",
+ Short: "Drop db",
+ Long: `Deletes everything in the database`,
+ RunE: drop,
+ },
+ )
+}
+
+func up(_ *cobra.Command, _ []string) error {
+ m, err := initMigrate()
+ if err != nil {
+ return fmt.Errorf("open migration failed: %w", err)
+ }
+ defer m.Close()
+ if err := m.Up(); err != nil && err != migrate.ErrNoChange {
+ return fmt.Errorf("do migration failed: %w", err)
+ }
+
+ return nil
+}
+
+func down(_ *cobra.Command, _ []string) error {
+ m, err := initMigrate()
+ if err != nil {
+ return fmt.Errorf("open migration failed: %w", err)
+ }
+ defer m.Close()
+ if err := m.Down(); err != nil && err != migrate.ErrNoChange {
+ return fmt.Errorf("do migration failed: %w", err)
+ }
+
+ return nil
+}
+
+func drop(_ *cobra.Command, _ []string) error {
+ m, err := initMigrate()
+ if err != nil {
+ return fmt.Errorf("open migration failed: %w", err)
+ }
+ defer m.Close()
+ if err := m.Drop(); err != nil && err != migrate.ErrNoChange {
+ return fmt.Errorf("do migration failed: %w", err)
+ }
+
+ return nil
+}
+
+func initMigrate() (*migrate.Migrate, error) {
+ db, err := sql.Open("sqlite3", dbFile)
+ if err != nil {
+ return nil, fmt.Errorf("open db failed: %w", err)
+ }
+ defer db.Close()
+
+ driver, err := sqlite.WithInstance(db, &sqlite.Config{})
+ if err != nil {
+ return nil, fmt.Errorf("failed create migration driver: %w", err)
+ }
+ sourceDriver, err := iofs.New(migrations.FS, ".")
+ if err != nil {
+ return nil, fmt.Errorf("failed open migrations: %w", err)
+ }
+
+ return migrate.NewWithInstance("fs", sourceDriver, "sqlite3", driver)
}