probo/lib/store/participant.go
2023-12-21 17:38:05 +01:00

58 lines
1.2 KiB
Go

package store
import (
"os"
"git.andreafazzi.eu/andrea/probo/lib/models"
"github.com/gocarina/gocsv"
)
type ParticipantStore struct {
*FilterStore[*models.Participant]
}
func NewParticipantStore() *ParticipantStore {
store := new(ParticipantStore)
store.FilterStore = NewFilterStore[*models.Participant]()
return store
}
func (s *ParticipantStore) ImportCSV(path string) ([]*models.Participant, error) {
file, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, os.ModePerm)
if err != nil {
return nil, err
}
defer file.Close()
participants := []*models.Participant{}
if err := gocsv.UnmarshalFile(file, &participants); err != nil {
return nil, err
}
return participants, nil
}
func (s *ParticipantStore) FilterInGroup(group *models.Group, filter map[string]string) []*models.Participant {
participants := s.ReadAll()
if filter == nil {
return participants
}
filteredParticipants := s.Filter(participants, func(p *models.Participant) bool {
for pk, pv := range p.Attributes {
for fk, fv := range filter {
if pk == fk && pv == fv {
return true
}
}
}
return false
})
group.Participants = filteredParticipants
return group.Participants
}