58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package syncstate
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/internal/domain/syncstate"
|
|
"codeberg.org/mapleopentech/monorepo/native/desktop/maplefile/pkg/storage"
|
|
)
|
|
|
|
const syncStateKey = "sync_state"
|
|
|
|
type repository struct {
|
|
storage storage.Storage
|
|
}
|
|
|
|
// ProvideRepository creates a new syncstate repository for Wire
|
|
func ProvideRepository(storage storage.Storage) syncstate.Repository {
|
|
return &repository{storage: storage}
|
|
}
|
|
|
|
func (r *repository) Get() (*syncstate.SyncState, error) {
|
|
data, err := r.storage.Get(syncStateKey)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to get sync state: %w", err)
|
|
}
|
|
if data == nil {
|
|
// Return empty sync state if none exists
|
|
return syncstate.NewSyncState(), nil
|
|
}
|
|
|
|
var state syncstate.SyncState
|
|
if err := json.Unmarshal(data, &state); err != nil {
|
|
return nil, fmt.Errorf("failed to unmarshal sync state: %w", err)
|
|
}
|
|
|
|
return &state, nil
|
|
}
|
|
|
|
func (r *repository) Save(state *syncstate.SyncState) error {
|
|
data, err := json.Marshal(state)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to marshal sync state: %w", err)
|
|
}
|
|
|
|
if err := r.storage.Set(syncStateKey, data); err != nil {
|
|
return fmt.Errorf("failed to save sync state: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (r *repository) Reset() error {
|
|
if err := r.storage.Delete(syncStateKey); err != nil {
|
|
return fmt.Errorf("failed to reset sync state: %w", err)
|
|
}
|
|
return nil
|
|
}
|