oups
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
package panel
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"time"
|
||||
|
||||
"github.com/leolionad58/ticketbot/internal/config"
|
||||
"github.com/leolionad58/ticketbot/internal/db"
|
||||
)
|
||||
|
||||
// MigrateYAMLPanels copies panel configuration from the YAML config into panel_configs and
|
||||
// panel_types tables. It runs only once: if panel_configs is already non-empty it is a no-op.
|
||||
func MigrateYAMLPanels(ctx context.Context, repo *db.PanelConfigRepo, cfg *config.Config, guildID string) error {
|
||||
empty, err := repo.IsEmpty(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !empty || len(cfg.Panels) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
slog.Info("migrating YAML panels to DB", "count", len(cfg.Panels))
|
||||
order := 0
|
||||
for panelName, panel := range cfg.Panels {
|
||||
pc := &db.PanelConfig{
|
||||
Name: panelName,
|
||||
EmbedTitle: panel.EmbedTitle,
|
||||
EmbedColor: panel.EmbedColor,
|
||||
GuildID: guildID,
|
||||
SortOrder: order,
|
||||
}
|
||||
if panel.EmbedDescription != "" {
|
||||
pc.EmbedDescription.String = panel.EmbedDescription
|
||||
pc.EmbedDescription.Valid = true
|
||||
}
|
||||
if err := repo.Create(ctx, pc); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
typeOrder := 0
|
||||
for typeName, t := range panel.Types {
|
||||
pt := &db.PanelType{
|
||||
PanelID: pc.ID,
|
||||
Name: typeName,
|
||||
ButtonLabel: t.ButtonLabel,
|
||||
ButtonColor: string(t.ButtonColor),
|
||||
ButtonEmoji: t.ButtonEmoji,
|
||||
EmbedColor: t.EmbedColor,
|
||||
EmbedTitle: t.EmbedTitle,
|
||||
EmbedText: t.EmbedText,
|
||||
StaffRoleID: t.StaffRole,
|
||||
CategoryID: t.Category,
|
||||
MaxPerUser: 1,
|
||||
ClaimMode: 1,
|
||||
CloseRule: "staff_only",
|
||||
ModalEnabled: true,
|
||||
SortOrder: typeOrder,
|
||||
CreatedAt: time.Now().UTC(),
|
||||
UpdatedAt: time.Now().UTC(),
|
||||
}
|
||||
if err := repo.CreateType(ctx, pt); err != nil {
|
||||
return err
|
||||
}
|
||||
typeOrder++
|
||||
}
|
||||
order++
|
||||
}
|
||||
slog.Info("YAML panels migrated to DB", "panels", len(cfg.Panels))
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user