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}