Files
HostKeeper/pkg/storage/storage.go
T
swanadiva 33947816b7 feat: complete Tasks 1-3 (setup, models+storage, config management)
- 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
2026-06-22 16:09:02 +07:00

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"
)