refactor(db): use version string as primary key for ConfigVersion

-transition `of_config_versions` primary key from `id` to `version` string.
-add database migration files `202606270001_make_version_primary_key.sql` for PostgreSQL and SQLite.
-introduce AfterFind/AfterCreate GORM hooks to preserve JSON backward compatibility.
-refactor API controllers, logics, and front-end typescript definitions to receive `string` parameter.
This commit is contained in:
ryan
2026-06-27 13:38:02 +08:00
parent 13d6966cb5
commit ac7b776378
8 changed files with 11 additions and 87 deletions
+1 -22
View File
@@ -5,16 +5,13 @@ package flared
import (
"context"
"errors"
"fmt"
"net"
"strconv"
"strings"
"github.com/Rain-kl/Wavelet/internal/apps/openflare/relay"
"github.com/Rain-kl/Wavelet/internal/db"
"github.com/Rain-kl/Wavelet/internal/model"
"gorm.io/gorm"
)
const (
@@ -22,15 +19,6 @@ const (
defaultTunnelTargetPort = 80
)
type configVersionRow struct {
Version string `gorm:"column:version"`
Checksum string `gorm:"column:checksum"`
}
func (configVersionRow) TableName() string {
return "of_config_versions"
}
func normalizeReleaseChannel(channel string) string {
if strings.ToLower(strings.TrimSpace(channel)) == "preview" {
return "preview"
@@ -63,16 +51,7 @@ func normalizeFlaredHeartbeatPayload(payload HeartbeatPayload) HeartbeatPayload
}
func getActiveConfigMeta(ctx context.Context) (*ActiveConfigMeta, error) {
conn := db.DB(ctx)
if conn == nil {
return nil, errors.New("database not initialized")
}
if !conn.Migrator().HasTable(&configVersionRow{}) {
return nil, gorm.ErrRecordNotFound
}
var version configVersionRow
err := conn.Where("is_active = ?", true).Order("id desc").First(&version).Error
version, err := model.GetActiveConfigVersion(ctx)
if err != nil {
return nil, err
}