diff --git a/esi/cached.go b/esi/cached.go index ff9281a..330d434 100644 --- a/esi/cached.go +++ b/esi/cached.go @@ -8,30 +8,26 @@ import ( "fmt" "time" + "go-eve-pi/types" + logger "git.site.quack-lab.dev/dave/cylogger" ) -// CacheEntry represents a cached API response -type CacheEntry struct { - ID uint `gorm:"primaryKey"` - URLHash string `gorm:"uniqueIndex"` - Response string `gorm:"type:text"` - CachedAt time.Time `gorm:"index"` -} +// CacheEntry is now defined in the types package // CachedESI implements ESIInterface with caching type CachedESI struct { direct ESIInterface db interface { - GetCacheEntry(urlHash string) (*CacheEntry, error) - SaveCacheEntry(entry *CacheEntry) error + GetCacheEntry(urlHash string) (*types.CacheEntry, error) + SaveCacheEntry(entry *types.CacheEntry) error } } // NewCachedESI creates a new CachedESI instance func NewCachedESI(direct ESIInterface, db interface { - GetCacheEntry(urlHash string) (*CacheEntry, error) - SaveCacheEntry(entry *CacheEntry) error + GetCacheEntry(urlHash string) (*types.CacheEntry, error) + SaveCacheEntry(entry *types.CacheEntry) error }) *CachedESI { return &CachedESI{ direct: direct, @@ -113,13 +109,13 @@ func (c *CachedESI) getCachedResponse(url string, fetchFunc func() (interface{}, return result, nil } - cacheEntry = CacheEntry{ + cacheEntry = &types.CacheEntry{ URLHash: urlHash, Response: string(responseBytes), CachedAt: time.Now(), } - if err := c.db.SaveCacheEntry(&cacheEntry); err != nil { + if err := c.db.SaveCacheEntry(cacheEntry); err != nil { logger.Warning("Failed to cache response: %v", err) } diff --git a/main.go b/main.go index 1494010..59395a4 100644 --- a/main.go +++ b/main.go @@ -49,7 +49,7 @@ func main() { options.GlobalOptions.ClientID, options.GlobalOptions.RedirectURI, options.GlobalOptions.Scopes, - database.Character, + database.Character(), ) if err != nil { logger.Error("Failed to create SSO instance %v", err) diff --git a/options/options.go b/options/options.go index 33d2e7b..abf40f7 100644 --- a/options/options.go +++ b/options/options.go @@ -1,3 +1,4 @@ +// Package options handles configuration management for the EVE PI application. package options import ( @@ -129,7 +130,7 @@ func GenerateEnvExample() error { return err } -func generateExampleValue(fieldName, envKey, defaultValue string) string { +func generateExampleValue(_, envKey, defaultValue string) string { // If there's a default value, use it if defaultValue != "" { return defaultValue diff --git a/repositories/base.go b/repositories/base.go index 643e7d2..009f7f1 100644 --- a/repositories/base.go +++ b/repositories/base.go @@ -1,3 +1,5 @@ +// Package repositories provides database repository implementations +// with a clean separation of concerns and proper interface abstractions. package repositories import ( diff --git a/repositories/cache.go b/repositories/cache.go index bef4068..970e77a 100644 --- a/repositories/cache.go +++ b/repositories/cache.go @@ -8,6 +8,7 @@ import ( ) // CacheRepository handles cache-related database operations +// Implements CacheRepositoryInterface type CacheRepository struct { *BaseRepository } diff --git a/repositories/character.go b/repositories/character.go index c351e26..213956d 100644 --- a/repositories/character.go +++ b/repositories/character.go @@ -8,6 +8,7 @@ import ( ) // CharacterRepository handles character-related database operations +// Implements CharacterRepositoryInterface type CharacterRepository struct { *BaseRepository } diff --git a/repositories/database.go b/repositories/database.go index 1ad4996..9653a33 100644 --- a/repositories/database.go +++ b/repositories/database.go @@ -14,10 +14,11 @@ import ( ) // Database manages all repositories and provides a unified interface +// Implements DatabaseInterface type Database struct { *gorm.DB - Character *CharacterRepository - Cache *CacheRepository + character *CharacterRepository + cache *CacheRepository } // NewDatabase creates a new database instance with all repositories @@ -49,8 +50,8 @@ func NewDatabase() (*Database, error) { database := &Database{ DB: db, - Character: characterRepo, - Cache: cacheRepo, + character: characterRepo, + cache: cacheRepo, } // Run migrations @@ -62,3 +63,13 @@ func NewDatabase() (*Database, error) { logger.Info("Database initialized successfully") return database, nil } + +// Character returns the character repository +func (d *Database) Character() CharacterRepositoryInterface { + return d.character +} + +// Cache returns the cache repository +func (d *Database) Cache() CacheRepositoryInterface { + return d.cache +} diff --git a/repositories/interfaces.go b/repositories/interfaces.go index d46a9bc..039d889 100644 --- a/repositories/interfaces.go +++ b/repositories/interfaces.go @@ -7,3 +7,16 @@ type CharacterRepositoryInterface interface { GetCharacterByName(characterName string) (*types.Character, error) SaveCharacter(character *types.Character) error } + +// CacheRepositoryInterface defines the interface for cache operations +type CacheRepositoryInterface interface { + GetCacheEntry(urlHash string) (*types.CacheEntry, error) + SaveCacheEntry(entry *types.CacheEntry) error +} + +// DatabaseInterface defines the interface for database management +type DatabaseInterface interface { + Character() CharacterRepositoryInterface + Cache() CacheRepositoryInterface + AutoMigrate(dst ...interface{}) error +}