diff --git a/storage/store.go b/storage/store.go index 9751ddd..e1c31f7 100644 --- a/storage/store.go +++ b/storage/store.go @@ -45,6 +45,19 @@ func saveValue(db kvs.KVDB, tableName string, ownerID kvs.UUID, rowID uint32, v return kvs.LoadID(v, rowID) } +func (s Store) Delete(owner kvs.UUID, value Value, rowID uint32) error { + db := s.db + + blankEntries := kvs.ConvertToBlankEntries(value.TableName(), owner, rowID, value) + for _, ent := range blankEntries { + db.Update(func(txn *badger.Txn) error { + return txn.Delete(ent.Key()) + }) + } + + return nil +} + func Load[T Value](s Store, dest T, owner kvs.UUID, rowID uint32) error { db := s.db diff --git a/storage/store_test.go b/storage/store_test.go index 59fa920..e8f08fc 100644 --- a/storage/store_test.go +++ b/storage/store_test.go @@ -24,6 +24,33 @@ type Cake struct { func (b Cake) TableName() string { return "cakes" } +func TestStoreAndLoadMultipleBalloonsSuccess(t *testing.T) { + is := is.New(t) + + db, err := kvs.NewMemKVDB() + is.NoErr(err) + defer db.Close() + + store := storage.New(db) + defer store.Close() + + bigRedBalloon := Balloon{Color: "RED", Size: 695} + smallYellowBalloon := Balloon{Color: "YELLOW", Size: 112} + mediumWhiteBalloon := Balloon{Color: "WHITE", Size: 366} + is.NoErr(store.Save(kvs.RootOwner{}, &bigRedBalloon)) + is.NoErr(store.Save(kvs.RootOwner{}, &smallYellowBalloon)) + is.NoErr(store.Save(kvs.RootOwner{}, &mediumWhiteBalloon)) + + bs, err := storage.LoadAll(store, Balloon{}, kvs.RootOwner{}) + is.NoErr(err) + + is.True(len(bs) == 3) + + is.Equal(bs[0], Balloon{ID: 0, Color: "RED", Size: 695}) + is.Equal(bs[1], Balloon{ID: 1, Color: "YELLOW", Size: 112}) + is.Equal(bs[2], Balloon{ID: 2, Color: "WHITE", Size: 366}) +} + func TestStoreMultipleAndUpdateSingleBalloonsSuccess(t *testing.T) { is := is.New(t) @@ -55,7 +82,7 @@ func TestStoreMultipleAndUpdateSingleBalloonsSuccess(t *testing.T) { is.Equal(bs[2], Balloon{ID: 2, Color: "WHITE", Size: 366}) } -func TestStoreAndLoadMultipleBalloonsSuccess(t *testing.T) { +func TestStoreAndDeleteSingleBalloonSuccess(t *testing.T) { is := is.New(t) db, err := kvs.NewMemKVDB() @@ -77,9 +104,12 @@ func TestStoreAndLoadMultipleBalloonsSuccess(t *testing.T) { is.True(len(bs) == 3) - is.Equal(bs[0], Balloon{ID: 0, Color: "RED", Size: 695}) - is.Equal(bs[1], Balloon{ID: 1, Color: "YELLOW", Size: 112}) - is.Equal(bs[2], Balloon{ID: 2, Color: "WHITE", Size: 366}) + is.NoErr(store.Delete(kvs.RootOwner{}, &smallYellowBalloon, smallYellowBalloon.ID)) + + bs, err = storage.LoadAll(store, Balloon{}, kvs.RootOwner{}) + is.NoErr(err) + + is.True(len(bs) == 2) } func TestStoreLoadMultipleLoadIndividualBalloonsSuccess(t *testing.T) {