86 lines
1.7 KiB
Go
86 lines
1.7 KiB
Go
package store
|
|
|
|
import (
|
|
"math/rand"
|
|
"os"
|
|
"strconv"
|
|
|
|
"git.andreafazzi.eu/andrea/probo/pkg/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 := make([]*models.Participant, 0)
|
|
|
|
if err := gocsv.UnmarshalFile(file, &participants); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
memParticipants := make([]*models.Participant, 0)
|
|
|
|
for _, p := range participants {
|
|
if p.Token == "" {
|
|
p.Token = generateToken()
|
|
}
|
|
memParticipant, err := s.Create(p)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
memParticipants = append(memParticipants, memParticipant)
|
|
}
|
|
|
|
return memParticipants, nil
|
|
|
|
}
|
|
|
|
func generateToken() string {
|
|
// Generate six random numbers from 1 to 9
|
|
var token string
|
|
for i := 0; i < 6; i++ {
|
|
randomNumber := rand.Intn(9) + 1
|
|
token += strconv.Itoa(randomNumber)
|
|
}
|
|
|
|
return token
|
|
}
|
|
|
|
// 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
|
|
// }
|