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