1
0
Fork 0
This repository has been archived on 2025-09-02. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
mareshq-yggdrasil/pkg/training/repository.go

90 lines
1.9 KiB
Go

package training
type TrainingRepository interface {
Create(training *Training) error
FindByID(id TrainingID) (*Training, error)
FindAll() ([]Training, error)
Update(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,
Description: "",
})
repo.Create(&Training{
Name: "Terraform",
Days: 1,
Description: "",
})
repo.Create(&Training{
Name: "RKE2",
Days: 1,
Description: "",
})
repo.Create(&Training{
Name: "GitHub Actions",
Days: 1,
Description: "",
})
repo.Create(&Training{
Name: "GitLab CI",
Days: 1,
Description: "",
})
repo.Create(&Training{
Name: "Prometheus",
Days: 2,
Description: "",
})
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(training *Training) error {
r.trainings[training.ID] = *training
return nil
}
func (r *InMemoryTrainingRepository) Delete(id TrainingID) error {
_, ok := r.trainings[id]
if !ok {
return ErrTrainingNotFound
}
delete(r.trainings, id)
return nil
}