main
 1package db
 2
 3import (
 4	"gitlab.com/mokhax/sparkled/pkg/domain"
 5	"gitlab.com/mokhax/sparkled/pkg/pls"
 6)
 7
 8type Repository interface {
 9	All() []*domain.Sparkle
10	Each(func(*domain.Sparkle))
11	Save(*domain.Sparkle) error
12}
13
14type inMemoryRepository struct {
15	sparkles []*domain.Sparkle
16}
17
18func NewRepository() Repository {
19	return &inMemoryRepository{
20		sparkles: []*domain.Sparkle{},
21	}
22}
23
24func (r *inMemoryRepository) All() []*domain.Sparkle {
25	return r.sparkles
26}
27
28func (r *inMemoryRepository) Each(visitor func(item *domain.Sparkle)) {
29	for _, item := range r.All() {
30		visitor(item)
31	}
32}
33
34func (r *inMemoryRepository) Save(item *domain.Sparkle) error {
35	if err := item.Validate(); err != nil {
36		return err
37	}
38
39	if item.ID == "" {
40		item.ID = pls.GenerateULID()
41	}
42
43	r.sparkles = append(r.sparkles, item)
44	return nil
45}