Code polish

This commit is contained in:
2026-01-06 13:41:22 +01:00
parent a78ee0c818
commit 3715f8bb7b

47
db.go
View File

@@ -57,8 +57,9 @@ type Stats struct {
}
type DB interface {
Init() error
SaveKillmails(killmails []Killmail) error
InitTables() error
QueryFits(params QueryParams) (*FitStatistics, error)
SearchShips(query string, limit int) ([]models.InvType, error)
SearchSystems(query string, limit int) ([]models.MapSolarSystem, error)
@@ -76,8 +77,8 @@ type DB interface {
}
type DBWrapper struct {
ch driver.Conn
gormDB *gorm.DB // For SQLite (EVE static data)
ch driver.Conn
db *gorm.DB // For SQLite (EVE static data)
}
var db *DBWrapper
@@ -98,8 +99,8 @@ func GetDB() (DB, error) {
}
db = &DBWrapper{
ch: conn,
gormDB: sdb,
ch: conn,
db: sdb,
}
return db, nil
@@ -129,19 +130,19 @@ func GetDBClickhouse() (driver.Conn, error) {
return clickhouse.Open(options)
}
func (db *DBWrapper) InitTables() error {
func (db *DBWrapper) Init() error {
ctx := context.Background()
// Migrate unified cache table
// Use raw SQL to create table and index with IF NOT EXISTS to avoid errors
// For 404s, we store a special marker byte sequence instead of NULL
err := db.gormDB.AutoMigrate(&CacheEntry{})
err := db.db.AutoMigrate(&CacheEntry{})
if err != nil {
return fmt.Errorf("failed to migrate cache_entries table: %w", err)
}
// Create index if it doesn't exist
db.gormDB.Exec(`CREATE INDEX IF NOT EXISTS idx_cache_key_created ON cache_entries(cache_key, created_at)`)
db.db.Exec(`CREATE INDEX IF NOT EXISTS idx_cache_key_created ON cache_entries(cache_key, created_at)`)
// Create flat_killmails table
createFlatKillmails := `
@@ -554,7 +555,7 @@ func (db *DBWrapper) QueryFits(params QueryParams) (*FitStatistics, error) {
func (db *DBWrapper) ExpandGroups(groups []int64) ([]int64, error) {
var groupTypeIDs []int64
result := db.gormDB.Model(&models.InvType{}).
result := db.db.Model(&models.InvType{}).
Select("typeID").
Where("groupID IN ?", groups).
Pluck("typeID", &groupTypeIDs)
@@ -563,7 +564,7 @@ func (db *DBWrapper) ExpandGroups(groups []int64) ([]int64, error) {
func (db *DBWrapper) GetCacheEntry(cacheKey string, maxAge time.Duration) ([]byte, bool) {
var cached CacheEntry
err := db.gormDB.
err := db.db.
Where("cache_key = ? AND created_at > ?", cacheKey, time.Now().Add(-maxAge)).
Order("created_at DESC").
Limit(1).
@@ -616,7 +617,7 @@ func (db *DBWrapper) CacheEntry(cacheKey string, data []byte) error {
func (db *DBWrapper) SearchShips(query string, limit int) ([]models.InvType, error) {
var ships []models.InvType
searchPattern := "%" + strings.ToLower(query) + "%"
err := db.gormDB.Table("invTypes").
err := db.db.Table("invTypes").
Joins("INNER JOIN invGroups ON invTypes.groupID = invGroups.groupID").
Where("LOWER(invTypes.\"typeName\") LIKE ? AND invGroups.categoryID IN (6)", searchPattern).
Limit(limit).
@@ -627,7 +628,7 @@ func (db *DBWrapper) SearchShips(query string, limit int) ([]models.InvType, err
func (db *DBWrapper) SearchSystems(query string, limit int) ([]models.MapSolarSystem, error) {
var systems []models.MapSolarSystem
searchPattern := "%" + strings.ToLower(query) + "%"
err := db.gormDB.Table("mapSolarSystems").
err := db.db.Table("mapSolarSystems").
Where("LOWER(\"solarSystemName\") LIKE ?", searchPattern).
Limit(limit).
Find(&systems).Error
@@ -637,7 +638,7 @@ func (db *DBWrapper) SearchSystems(query string, limit int) ([]models.MapSolarSy
func (db *DBWrapper) SearchModules(query string, limit int) ([]models.InvType, error) {
var modules []models.InvType
searchPattern := "%" + strings.ToLower(query) + "%"
err := db.gormDB.Table("invTypes").
err := db.db.Table("invTypes").
Joins("INNER JOIN invGroups ON invTypes.groupID = invGroups.groupID").
Where("LOWER(invTypes.\"typeName\") LIKE ? AND invGroups.categoryID IN (7, 66)", searchPattern).
Limit(limit).
@@ -648,7 +649,7 @@ func (db *DBWrapper) SearchModules(query string, limit int) ([]models.InvType, e
func (db *DBWrapper) SearchGroups(query string, limit int) ([]models.InvGroup, error) {
var groups []models.InvGroup
searchPattern := "%" + strings.ToLower(query) + "%"
err := db.gormDB.Table("invGroups").
err := db.db.Table("invGroups").
Where("LOWER(\"groupName\") LIKE ?", searchPattern).
Limit(limit).
Find(&groups).Error
@@ -659,7 +660,7 @@ func (db *DBWrapper) GetItemNames(ids []int32) (map[string]string, error) {
names := make(map[string]string)
var items []models.InvType
if err := db.gormDB.Table("invTypes").
if err := db.db.Table("invTypes").
Where("typeID IN ?", ids).
Find(&items).Error; err != nil {
return nil, err
@@ -669,7 +670,7 @@ func (db *DBWrapper) GetItemNames(ids []int32) (map[string]string, error) {
}
var systems []models.MapSolarSystem
if err := db.gormDB.Table("mapSolarSystems").
if err := db.db.Table("mapSolarSystems").
Where("\"solarSystemID\" IN ?", ids).
Find(&systems).Error; err != nil {
return nil, err
@@ -683,7 +684,7 @@ func (db *DBWrapper) GetItemNames(ids []int32) (map[string]string, error) {
func (db *DBWrapper) GetItemTypes(itemIDs []int64) ([]models.InvType, error) {
var itemTypes []models.InvType
res := db.gormDB.Model(&models.InvType{}).
res := db.db.Model(&models.InvType{}).
Where("typeID IN ?", itemIDs).
Find(&itemTypes)
return itemTypes, res.Error
@@ -691,7 +692,7 @@ func (db *DBWrapper) GetItemTypes(itemIDs []int64) ([]models.InvType, error) {
func (db *DBWrapper) GetSolarSystems(systemIDs []int64) ([]models.MapSolarSystem, error) {
var systems []models.MapSolarSystem
res := db.gormDB.Model(&models.MapSolarSystem{}).
res := db.db.Model(&models.MapSolarSystem{}).
Where("solarSystemID IN ?", systemIDs).
Find(&systems)
return systems, res.Error
@@ -717,7 +718,7 @@ func (db *DBWrapper) GetModuleSlots(moduleIDs []int64) (map[int64]ModuleSlot, er
result := make(map[int64]ModuleSlot)
var effects []models.DgmTypeEffect
qres := db.gormDB.Model(&models.DgmTypeEffect{}).
qres := db.db.Model(&models.DgmTypeEffect{}).
Select("typeID, effectID").
Where("typeID IN ? AND effectID IN (11, 12, 13, 2663)", moduleIDs).
Find(&effects)
@@ -754,7 +755,7 @@ func (db *DBWrapper) GetModuleSlots(moduleIDs []int64) (map[int64]ModuleSlot, er
mlog.Debug("Still have to find drones...")
var droneTypeIDs []int32
qres = db.gormDB.Table("invTypes").
qres = db.db.Table("invTypes").
Select("invTypes.typeID").
Joins("INNER JOIN invGroups ON invTypes.groupID = invGroups.groupID").
Where("invGroups.categoryID = ?", 18).
@@ -937,7 +938,7 @@ func (db *DBWrapper) CacheSet(key string, data []byte) error {
}
flog.Debug("Creating cache entry")
flog.Dump("cacheEntry", cacheEntry)
return db.gormDB.Create(&cacheEntry).Error
return db.db.Create(&cacheEntry).Error
}
var ErrCacheMiss = gorm.ErrRecordNotFound
@@ -953,7 +954,7 @@ func (db *DBWrapper) CacheGet(key string) ([]byte, error) {
}
cacheEntry := CacheEntry{Key: key}
res := db.gormDB.Model(&CacheEntry{}).
res := db.db.Model(&CacheEntry{}).
Where(cacheEntry).
First(&cacheEntry)
flog.Debug("Found cache entry")
@@ -966,7 +967,7 @@ func (db *DBWrapper) CacheClean() error {
flog := logger.Default.WithPrefix("CacheClean")
threshold := time.Now().Add(-72 * time.Hour)
flog.Dump("threshold", threshold)
return db.gormDB.
return db.db.
Where("created_at < ?", threshold).
Delete(&CacheEntry{}).Error
}