From ce3111b0efe91e275ce070f9511b5b1b9801a46d Mon Sep 17 00:00:00 2001 From: Alexander NeonXP Kiryukhin Date: Sun, 21 Jul 2024 19:26:56 +0300 Subject: Множество улучшений MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/cmd/migrate.go | 110 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 79 insertions(+), 31 deletions(-) (limited to 'app/cmd/migrate.go') 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) } -- cgit v1.2.3