From adb793034a803a0e899bdc6738cb0ce24134f5dc Mon Sep 17 00:00:00 2001 From: Vojtech Mares Date: Sat, 4 May 2024 15:16:41 +0200 Subject: [PATCH] feat(training): add InMemoryRepository for mocking --- pkg/training/error.go | 7 ++++ pkg/training/repository.go | 79 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 pkg/training/error.go create mode 100644 pkg/training/repository.go diff --git a/pkg/training/error.go b/pkg/training/error.go new file mode 100644 index 0000000..69ca6fe --- /dev/null +++ b/pkg/training/error.go @@ -0,0 +1,7 @@ +package training + +import "errors" + +var ( + ErrTrainingNotFound = errors.New("training not found") +) diff --git a/pkg/training/repository.go b/pkg/training/repository.go new file mode 100644 index 0000000..986a72e --- /dev/null +++ b/pkg/training/repository.go @@ -0,0 +1,79 @@ +package training + +type TrainingRepository interface { + Create(training *Training) error + FindByID(id TrainingID) (*Training, error) + FindAll() ([]Training, error) + Update(id TrainingID, training *Training) error + Delete(id TrainingID) error +} + +type InMemoryTrainingRepository struct { + trainings map[TrainingID]Training +} + +func NewInMemoryTrainingRepository() *InMemoryTrainingRepository { + repo := &InMemoryTrainingRepository{ + trainings: make(map[TrainingID]Training), + } + + repo.Create(&Training{ + Name: "Kubernetes", + Days: 2, + }) + repo.Create(&Training{ + Name: "Terraform", + Days: 1, + }) + repo.Create(&Training{ + Name: "RKE2", + Days: 1, + }) + repo.Create(&Training{ + Name: "GitHub Actions", + Days: 1, + }) + repo.Create(&Training{ + Name: "GitLab CI", + Days: 1, + }) + repo.Create(&Training{ + Name: "Prometheus", + Days: 2, + }) + + return repo +} + +func (r *InMemoryTrainingRepository) Create(training *Training) error { + training.ID = NewTrainingID() + r.trainings[training.ID] = *training + return nil +} + +func (r *InMemoryTrainingRepository) FindByID(id TrainingID) (*Training, error) { + training, ok := r.trainings[id] + if !ok { + return nil, ErrTrainingNotFound + } + return &training, nil +} + +func (r *InMemoryTrainingRepository) FindAll() ([]Training, error) { + + trainings := make([]Training, 0, len(r.trainings)) + for _, training := range r.trainings { + trainings = append(trainings, training) + } + return trainings, nil +} + +func (r *InMemoryTrainingRepository) Update(id TrainingID, training *Training) error { + r.trainings[id] = *training + return nil +} + +func (r *InMemoryTrainingRepository) Delete(id TrainingID) error { + delete(r.trainings, id) + return nil +}