Merge branch 'main' of https://git.lmve.net/kevin/meshtastic_mqtt_server
# Conflicts: # meshmap_frontend/src/App.vue # web.go
This commit is contained in:
@@ -115,6 +115,24 @@ func (runtimeSettingRecord) TableName() string {
|
||||
return "runtime_settings"
|
||||
}
|
||||
|
||||
type mapTileSourceRecord struct {
|
||||
ID uint64 `gorm:"column:id;primaryKey;autoIncrement"`
|
||||
Name string `gorm:"column:name;not null;uniqueIndex"`
|
||||
URLTemplate string `gorm:"column:url_template;not null;uniqueIndex"`
|
||||
URLTemplateHash string `gorm:"column:url_template_hash;size:64;not null;uniqueIndex"`
|
||||
Attribution string `gorm:"column:attribution"`
|
||||
MaxZoom int `gorm:"column:max_zoom;not null"`
|
||||
Enabled bool `gorm:"column:enabled;not null;index"`
|
||||
IsDefault bool `gorm:"column:is_default;not null;index"`
|
||||
ProxyEnabled bool `gorm:"column:proxy_enabled;not null;index"`
|
||||
CreatedAt time.Time `gorm:"column:created_at;autoCreateTime"`
|
||||
UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime;index"`
|
||||
}
|
||||
|
||||
func (mapTileSourceRecord) TableName() string {
|
||||
return "map_tile_sources"
|
||||
}
|
||||
|
||||
type discardDetailsRecord struct {
|
||||
ID uint64 `gorm:"column:id;primaryKey;autoIncrement"`
|
||||
Topic string `gorm:"column:topic"`
|
||||
@@ -458,6 +476,7 @@ func (s *store) migrate() error {
|
||||
{label: "login_log", model: &loginLogRecord{}},
|
||||
{label: "help_content", model: &helpContentRecord{}},
|
||||
{label: "runtime_settings", model: &runtimeSettingRecord{}},
|
||||
{label: "map_tile_sources", model: &mapTileSourceRecord{}},
|
||||
{label: "discard_details", model: &discardDetailsRecord{}},
|
||||
{label: "node_blocking", model: &nodeBlockingRecord{}},
|
||||
{label: "ip_blocking", model: &ipBlockingRecord{}},
|
||||
@@ -491,10 +510,50 @@ func (s *store) migrate() error {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
if err := migrateMapTileSourceHash(tx, migrator, s.driver); err != nil {
|
||||
return err
|
||||
}
|
||||
return (&store{db: tx, driver: s.driver}).EnsureDefaultMapTileSource()
|
||||
})
|
||||
}
|
||||
|
||||
func migrateMapTileSourceHash(tx *gorm.DB, migrator gorm.Migrator, driver string) error {
|
||||
if !migrator.HasColumn(&mapTileSourceRecord{}, "ProxyEnabled") {
|
||||
if driver == databaseDriverSQLite {
|
||||
if err := tx.Exec("ALTER TABLE map_tile_sources ADD COLUMN proxy_enabled numeric NOT NULL DEFAULT true").Error; err != nil {
|
||||
return fmt.Errorf("migrate map_tile_sources proxy_enabled column: %w", err)
|
||||
}
|
||||
} else if err := migrator.AddColumn(&mapTileSourceRecord{}, "ProxyEnabled"); err != nil {
|
||||
return fmt.Errorf("migrate map_tile_sources proxy_enabled column: %w", err)
|
||||
}
|
||||
}
|
||||
if !migrator.HasColumn(&mapTileSourceRecord{}, "URLTemplateHash") {
|
||||
if driver == databaseDriverSQLite {
|
||||
if err := tx.Exec("ALTER TABLE map_tile_sources ADD COLUMN url_template_hash TEXT NOT NULL DEFAULT ''").Error; err != nil {
|
||||
return fmt.Errorf("migrate map_tile_sources url_template_hash column: %w", err)
|
||||
}
|
||||
} else if err := migrator.AddColumn(&mapTileSourceRecord{}, "URLTemplateHash"); err != nil {
|
||||
return fmt.Errorf("migrate map_tile_sources url_template_hash column: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
var rows []mapTileSourceRecord
|
||||
if err := tx.Model(&mapTileSourceRecord{}).Where("url_template_hash = '' OR url_template_hash IS NULL").Find(&rows).Error; err != nil {
|
||||
return fmt.Errorf("list map_tile_sources missing url_template_hash: %w", err)
|
||||
}
|
||||
for _, row := range rows {
|
||||
if err := tx.Model(&mapTileSourceRecord{}).Where("id = ?", row.ID).Update("url_template_hash", mapTileSourceHash(row.URLTemplate)).Error; err != nil {
|
||||
return fmt.Errorf("backfill map_tile_sources url_template_hash: %w", err)
|
||||
}
|
||||
}
|
||||
if !migrator.HasIndex(&mapTileSourceRecord{}, "idx_map_tile_sources_url_template_hash") {
|
||||
if err := migrator.CreateIndex(&mapTileSourceRecord{}, "idx_map_tile_sources_url_template_hash"); err != nil {
|
||||
return fmt.Errorf("migrate map_tile_sources index idx_map_tile_sources_url_template_hash: %w", err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func createMissingIndexes(migrator gorm.Migrator, model any, label string, indexNames []string) error {
|
||||
for _, indexName := range indexNames {
|
||||
if !migrator.HasIndex(model, indexName) {
|
||||
|
||||
Reference in New Issue
Block a user