Actually make fucking interfaces
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
2
main.go
2
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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Package repositories provides database repository implementations
|
||||
// with a clean separation of concerns and proper interface abstractions.
|
||||
package repositories
|
||||
|
||||
import (
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
)
|
||||
|
||||
// CacheRepository handles cache-related database operations
|
||||
// Implements CacheRepositoryInterface
|
||||
type CacheRepository struct {
|
||||
*BaseRepository
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
)
|
||||
|
||||
// CharacterRepository handles character-related database operations
|
||||
// Implements CharacterRepositoryInterface
|
||||
type CharacterRepository struct {
|
||||
*BaseRepository
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user