33947816b7
- Task 1: Project setup (go.mod, Makefile, .gitignore, main.go) - Task 2: Core data models (Host, KeyPair, Snippet, AppConfig) + JSON storage layer - Task 3: Configuration management with cross-platform path support (macOS/Linux/Windows) - Updated PROJECT_STATE.md with progress tracking
49 lines
1.7 KiB
Go
49 lines
1.7 KiB
Go
package storage
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.tukangketik.id/swanadiva/hostkeeper/internal/models"
|
|
)
|
|
|
|
// Storage defines the interface for data persistence
|
|
type Storage interface {
|
|
// Host operations
|
|
ListHosts(ctx context.Context) ([]*models.Host, error)
|
|
GetHost(ctx context.Context, id string) (*models.Host, error)
|
|
SaveHost(ctx context.Context, host *models.Host) error
|
|
DeleteHost(ctx context.Context, id string) error
|
|
|
|
// KeyPair operations
|
|
ListKeyPairs(ctx context.Context) ([]*models.KeyPair, error)
|
|
GetKeyPair(ctx context.Context, id string) (*models.KeyPair, error)
|
|
SaveKeyPair(ctx context.Context, keyPair *models.KeyPair) error
|
|
DeleteKeyPair(ctx context.Context, id string) error
|
|
|
|
// Snippet operations
|
|
ListSnippets(ctx context.Context) ([]*models.Snippet, error)
|
|
GetSnippet(ctx context.Context, id string) (*models.Snippet, error)
|
|
SaveSnippet(ctx context.Context, snippet *models.Snippet) error
|
|
DeleteSnippet(ctx context.Context, id string) error
|
|
|
|
// Export/Import
|
|
ExportData(ctx context.Context) (*ExportData, error)
|
|
ImportData(ctx context.Context, data *ExportData, strategy MergeStrategy) error
|
|
}
|
|
|
|
// ExportData represents the data structure for export/import
|
|
type ExportData struct {
|
|
Hosts []*models.Host `json:"hosts"`
|
|
KeyPairs []*models.KeyPair `json:"key_pairs"`
|
|
Snippets []*models.Snippet `json:"snippets"`
|
|
}
|
|
|
|
// MergeStrategy defines how imported data is merged with existing data
|
|
type MergeStrategy string
|
|
|
|
const (
|
|
// MergeStrategyReplace replaces all existing data with imported data
|
|
MergeStrategyReplace MergeStrategy = "replace"
|
|
// MergeStrategyMerge keeps existing data and adds only new items
|
|
MergeStrategyMerge MergeStrategy = "merge"
|
|
) |