1
0
Fork 0

feat(training): TrainingDateRepository: add FindUpcomingByTrainingID() and FindAllUpcoming() methods

This commit is contained in:
Vojtěch Mareš 2024-05-05 16:22:55 +02:00
parent 2dcaa4c646
commit 606854d1d5
Signed by: vojtech.mares
GPG key ID: C6827B976F17240D

View file

@ -2,6 +2,7 @@ package training
import (
"sync"
"time"
"github.com/shopspring/decimal"
"gitlab.mareshq.com/hq/yggdrasil/internal/currency"
@ -248,6 +249,8 @@ type TrainingDateRepository interface {
FindByID(id TrainingDateID) (*TrainingDate, error)
FindAll() ([]TrainingDate, error)
FindAllByTrainingID(trainingID TrainingID) ([]TrainingDate, error)
FindUpcomingByTrainingID(trainingID TrainingID) ([]TrainingDate, error)
FindAllUpcoming() ([]TrainingDate, error)
Update(trainingDate *TrainingDate) error
Delete(id TrainingDateID) error
}
@ -313,6 +316,37 @@ func (r *InMemoryTrainingDateRepository) FindAllByTrainingID(trainingID Training
return dates, nil
}
func (r *InMemoryTrainingDateRepository) FindUpcomingByTrainingID(trainingID TrainingID) ([]TrainingDate, error) {
r.lock.RLock()
defer r.lock.RUnlock()
now := time.Now()
var dates []TrainingDate
for _, id := range r.trainingToDates[trainingID] {
date := r.trainingDates[id]
if date.Date.After(now) {
dates = append(dates, date)
}
}
return dates, nil
}
func (r *InMemoryTrainingDateRepository) FindAllUpcoming() ([]TrainingDate, error) {
r.lock.RLock()
defer r.lock.RUnlock()
now := time.Now()
var dates []TrainingDate
for _, date := range r.trainingDates {
if date.Date.After(now) {
dates = append(dates, date)
}
}
return dates, nil
}
func (r *InMemoryTrainingDateRepository) Update(trainingDate *TrainingDate) error {
r.lock.Lock()
defer r.lock.Unlock()