memory.*Storage.GetPlaces   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 8
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 7
dl 0
loc 8
c 0
b 0
f 0
rs 10
nop 1
1
package memory
2
3
import (
4
	"context"
5
	"sync"
6
	"sync/atomic"
7
8
	"github.com/cronnoss/tk-api/internal/storage/models"
9
)
10
11
type mapShow map[int64]*models.Show
12
13
type mapEvent map[int64]*models.Event
14
15
type mapPlace map[int64]*models.Place
16
17
type Storage struct {
18
	dataShow  mapShow
19
	dataEvent mapEvent
20
	dataPlace mapPlace
21
	mu        sync.RWMutex
22
}
23
24
var GenID int64
25
26
func getNewIDSafe() int64 {
27
	return atomic.AddInt64(&GenID, 1)
28
}
29
30
func New() *Storage {
31
	return &Storage{
32
		dataShow:  make(mapShow),
33
		dataEvent: make(mapEvent),
34
		dataPlace: make(mapPlace),
35
		mu:        sync.RWMutex{},
36
	}
37
}
38
39
func (s *Storage) Connect(_ context.Context) error {
40
	return nil
41
}
42
43
func (s *Storage) Close(_ context.Context) error {
44
	return nil
45
}
46
47
// GetShows returns shows.
48
func (s *Storage) GetShows(_ context.Context) ([]models.Show, error) {
49
	s.mu.Lock()
50
	defer s.mu.Unlock()
51
	sliceS := []models.Show{}
52
	for _, v := range s.dataShow {
53
		sliceS = append(sliceS, *v)
54
	}
55
	return sliceS, nil
56
}
57
58
// CreateShows creates shows.
59
func (s *Storage) CreateShows(_ context.Context, shows []models.Show) ([]models.Show, error) {
60
	s.mu.Lock()
61
	defer s.mu.Unlock()
62
	for i := range shows {
63
		shows[i].ID = getNewIDSafe()
64
		s.dataShow[shows[i].ID] = &shows[i]
65
	}
66
	return shows, nil
67
}
68
69
// CreateShow creates a show.
70
func (s *Storage) CreateShow(_ context.Context, show models.Show) (models.Show, error) {
71
	s.mu.Lock()
72
	defer s.mu.Unlock()
73
	show.ID = getNewIDSafe()
74
	s.dataShow[show.ID] = &show
75
	return show, nil
76
}
77
78
// GetEvents returns events.
79
func (s *Storage) GetEvents(_ context.Context) ([]models.Event, error) {
80
	s.mu.Lock()
81
	defer s.mu.Unlock()
82
	sliceE := []models.Event{}
83
	for _, v := range s.dataEvent {
84
		sliceE = append(sliceE, *v)
85
	}
86
	return sliceE, nil
87
}
88
89
// CreateEvents creates events.
90
func (s *Storage) CreateEvents(_ context.Context, events []models.Event) ([]models.Event, error) {
91
	s.mu.Lock()
92
	defer s.mu.Unlock()
93
	for i := range events {
94
		events[i].ID = getNewIDSafe()
95
		s.dataEvent[events[i].ID] = &events[i]
96
	}
97
	return events, nil
98
}
99
100
// CreateEvent creates an event.
101
func (s *Storage) CreateEvent(_ context.Context, event models.Event) (models.Event, error) {
102
	s.mu.Lock()
103
	defer s.mu.Unlock()
104
	event.ID = getNewIDSafe()
105
	s.dataEvent[event.ID] = &event
106
	return event, nil
107
}
108
109
// GetPlaces returns places.
110
func (s *Storage) GetPlaces(_ context.Context) ([]models.Place, error) {
111
	s.mu.Lock()
112
	defer s.mu.Unlock()
113
	sliceP := []models.Place{}
114
	for _, v := range s.dataPlace {
115
		sliceP = append(sliceP, *v)
116
	}
117
	return sliceP, nil
118
}
119
120
// CreatePlaces creates places.
121
func (s *Storage) CreatePlaces(_ context.Context, places []models.Place) ([]models.Place, error) {
122
	s.mu.Lock()
123
	defer s.mu.Unlock()
124
	for i := range places {
125
		places[i].ID = getNewIDSafe()
126
		s.dataPlace[places[i].ID] = &places[i]
127
	}
128
	return places, nil
129
}
130
131
// CreatePlace creates a place.
132
func (s *Storage) CreatePlace(_ context.Context, place models.Place) (models.Place, error) {
133
	s.mu.Lock()
134
	defer s.mu.Unlock()
135
	place.ID = getNewIDSafe()
136
	s.dataPlace[place.ID] = &place
137
	return place, nil
138
}
139