Storm ArtistRepository and PropertyRepository complete.

This commit is contained in:
Deluan
2020-01-10 16:13:07 -05:00
committed by Deluan Quintão
parent aebb960831
commit 0ca691b37f
11 changed files with 92 additions and 27 deletions
+25 -13
View File
@@ -10,6 +10,7 @@ var _ = Describe("ArtistRepository", func() {
var repo domain.ArtistRepository
BeforeEach(func() {
Db().Drop(&_Artist{})
repo = NewArtistRepository()
})
@@ -24,18 +25,29 @@ var _ = Describe("ArtistRepository", func() {
Expect(repo.Get("1")).To(Equal(artist))
})
It("purges inactive records", func() {
data := domain.Artists{
{ID: "1", Name: "Saara Saara"},
{ID: "2", Name: "Kraftwerk"},
{ID: "3", Name: "The Beatles"},
}
active := domain.Artists{
{ID: "1"}, {ID: "3"},
}
for _, a := range data {
repo.Put(&a)
}
Expect(repo.PurgeInactive(active)).To(Equal([]string{"2"}))
Describe("PurgeInactive", func() {
var data domain.Artists
BeforeEach(func() {
data = domain.Artists{
{ID: "1", Name: "Saara Saara"},
{ID: "2", Name: "Kraftwerk"},
{ID: "3", Name: "The Beatles"},
}
for _, a := range data {
repo.Put(&a)
}
})
It("purges inactive records", func() {
active := domain.Artists{{ID: "1"}, {ID: "3"}}
Expect(repo.PurgeInactive(active)).To(Equal([]string{"2"}))
})
It("doesn't delete anything if all is active", func() {
active := domain.Artists{{ID: "1"}, {ID: "2"}, {ID: "3"}}
Expect(repo.PurgeInactive(active)).To(BeEmpty())
})
})
})
+9 -1
View File
@@ -1,6 +1,7 @@
package storm
import (
"github.com/asdine/storm"
"github.com/cloudsonic/sonic-server/domain"
)
@@ -25,7 +26,14 @@ func (r *propertyRepository) Get(id string) (string, error) {
}
func (r *propertyRepository) DefaultGet(id string, defaultValue string) (string, error) {
return defaultValue, nil
value, err := r.Get(id)
if err == storm.ErrNotFound {
return defaultValue, nil
}
if err != nil {
return defaultValue, err
}
return value, nil
}
var _ domain.PropertyRepository = (*propertyRepository)(nil)
@@ -0,0 +1,30 @@
package storm
import (
"github.com/cloudsonic/sonic-server/domain"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("PropertyRepository", func() {
var repo domain.PropertyRepository
BeforeEach(func() {
Db().Drop(propertyBucket)
repo = NewPropertyRepository()
})
It("saves and retrieves data", func() {
Expect(repo.Put("1", "test")).To(BeNil())
Expect(repo.Get("1")).To(Equal("test"))
})
It("returns default if data is not found", func() {
Expect(repo.DefaultGet("2", "default")).To(Equal("default"))
})
It("returns value if found", func() {
Expect(repo.Put("3", "test")).To(BeNil())
Expect(repo.DefaultGet("3", "default")).To(Equal("test"))
})
})
+12 -2
View File
@@ -34,12 +34,18 @@ func (r *stormRepository) Exists(id string) (bool, error) {
return err != storm.ErrNotFound, nil
}
func (r *stormRepository) getID(record interface{}) string {
v := reflect.ValueOf(record).Elem()
id := v.FieldByName("ID").String()
return id
}
func (r *stormRepository) purgeInactive(ids []string) (deleted []string, err error) {
query := Db().Select(q.Not(q.In("ID", ids)))
// Collect IDs that will be deleted
err = query.Each(r.bucket, func(record interface{}) error {
v := reflect.ValueOf(record).Elem()
id := v.FieldByName("ID").String()
id := r.getID(record)
deleted = append(deleted, id)
return nil
})
@@ -47,6 +53,10 @@ func (r *stormRepository) purgeInactive(ids []string) (deleted []string, err err
return nil, err
}
if len(deleted) == 0 {
return
}
err = query.Delete(r.bucket)
if err != nil {
return nil, err