From 3715f8bb7b7de3daf47b2f637c8a954018a25fdf Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Tue, 6 Jan 2026 13:41:22 +0100 Subject: [PATCH] Code polish --- db.go | 47 ++++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/db.go b/db.go index e1c47c9..3f45dac 100644 --- a/db.go +++ b/db.go @@ -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 }