1package admin
 2
 3import (
 4	"fmt"
 5
 6	"github.com/charmbracelet/soft-serve/cmd"
 7	"github.com/charmbracelet/soft-serve/pkg/backend"
 8	"github.com/charmbracelet/soft-serve/pkg/config"
 9	"github.com/charmbracelet/soft-serve/pkg/db"
10	"github.com/charmbracelet/soft-serve/pkg/db/migrate"
11	"github.com/spf13/cobra"
12)
13
14var (
15	// Command is the admin command.
16	Command = &cobra.Command{
17		Use:   "admin",
18		Short: "Administrate the server",
19	}
20
21	migrateCmd = &cobra.Command{
22		Use:                "migrate",
23		Short:              "Migrate the database to the latest version",
24		PersistentPreRunE:  cmd.InitBackendContext,
25		PersistentPostRunE: cmd.CloseDBContext,
26		RunE: func(cmd *cobra.Command, _ []string) error {
27			ctx := cmd.Context()
28			db := db.FromContext(ctx)
29			if err := migrate.Migrate(ctx, db); err != nil {
30				return fmt.Errorf("migration: %w", err)
31			}
32
33			return nil
34		},
35	}
36
37	rollbackCmd = &cobra.Command{
38		Use:                "rollback",
39		Short:              "Rollback the database to the previous version",
40		PersistentPreRunE:  cmd.InitBackendContext,
41		PersistentPostRunE: cmd.CloseDBContext,
42		RunE: func(cmd *cobra.Command, _ []string) error {
43			ctx := cmd.Context()
44			db := db.FromContext(ctx)
45			if err := migrate.Rollback(ctx, db); err != nil {
46				return fmt.Errorf("rollback: %w", err)
47			}
48
49			return nil
50		},
51	}
52
53	syncHooksCmd = &cobra.Command{
54		Use:                "sync-hooks",
55		Short:              "Update repository hooks",
56		PersistentPreRunE:  cmd.InitBackendContext,
57		PersistentPostRunE: cmd.CloseDBContext,
58		RunE: func(c *cobra.Command, _ []string) error {
59			ctx := c.Context()
60			cfg := config.FromContext(ctx)
61			be := backend.FromContext(ctx)
62			if err := cmd.InitializeHooks(ctx, cfg, be); err != nil {
63				return fmt.Errorf("initialize hooks: %w", err)
64			}
65
66			return nil
67		},
68	}
69)
70
71func init() {
72	Command.AddCommand(
73		syncHooksCmd,
74		migrateCmd,
75		rollbackCmd,
76	)
77}