Code polish
This commit is contained in:
47
db.go
47
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user