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, }) 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(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 }