feat: add basic app
This commit is contained in:
parent
d4c1af4831
commit
c94098afef
13 changed files with 1850 additions and 0 deletions
105
internal/training/inmemory_repository.go
Normal file
105
internal/training/inmemory_repository.go
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
package training
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type InMemoryRepository struct {
|
||||
m sync.Mutex
|
||||
nextID ID
|
||||
|
||||
trainings map[ID]*Training
|
||||
}
|
||||
|
||||
type InMemoryPricingRepository struct{}
|
||||
|
||||
func NewInMemoryRepository() *InMemoryRepository {
|
||||
return &InMemoryRepository{
|
||||
m: sync.Mutex{},
|
||||
nextID: 1,
|
||||
trainings: make(map[ID]*Training),
|
||||
}
|
||||
}
|
||||
|
||||
func (r *InMemoryRepository) FindAll(_ context.Context) ([]Training, error) {
|
||||
r.m.Lock()
|
||||
defer r.m.Unlock()
|
||||
|
||||
var trainings []Training
|
||||
for _, t := range r.trainings {
|
||||
trainings = append(trainings, *t)
|
||||
}
|
||||
|
||||
return trainings, nil
|
||||
}
|
||||
|
||||
func (r *InMemoryRepository) FindByID(_ context.Context, id ID) (*Training, error) {
|
||||
r.m.Lock()
|
||||
defer r.m.Unlock()
|
||||
|
||||
t, ok := r.trainings[id]
|
||||
if !ok {
|
||||
return nil, &ErrNotFound{}
|
||||
}
|
||||
return t, nil
|
||||
}
|
||||
|
||||
func (r *InMemoryRepository) Create(_ context.Context, training *Training) error {
|
||||
r.m.Lock()
|
||||
defer r.m.Unlock()
|
||||
|
||||
training.id = r.nextID
|
||||
r.nextID++
|
||||
r.trainings[training.id] = training
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *InMemoryRepository) Update(_ context.Context, training *Training) error {
|
||||
r.m.Lock()
|
||||
defer r.m.Unlock()
|
||||
|
||||
if _, ok := r.trainings[training.id]; !ok {
|
||||
return &ErrNotFound{}
|
||||
}
|
||||
|
||||
r.trainings[training.id] = training
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *InMemoryRepository) Publish(_ context.Context, id ID) error {
|
||||
r.m.Lock()
|
||||
defer r.m.Unlock()
|
||||
|
||||
t, ok := r.trainings[id]
|
||||
if !ok {
|
||||
return &ErrNotFound{}
|
||||
}
|
||||
t.published = true
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *InMemoryRepository) Unpublish(_ context.Context, id ID) error {
|
||||
r.m.Lock()
|
||||
defer r.m.Unlock()
|
||||
|
||||
t, ok := r.trainings[id]
|
||||
if !ok {
|
||||
return &ErrNotFound{}
|
||||
}
|
||||
t.published = false
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *InMemoryRepository) Retire(_ context.Context, id ID) error {
|
||||
r.m.Lock()
|
||||
defer r.m.Unlock()
|
||||
|
||||
t, ok := r.trainings[id]
|
||||
if !ok {
|
||||
return &ErrNotFound{}
|
||||
}
|
||||
t.retired = true
|
||||
return nil
|
||||
}
|
||||
Reference in a new issue