participant.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package file
  2. import (
  3. "git.andreafazzi.eu/andrea/probo/pkg/models"
  4. "git.andreafazzi.eu/andrea/probo/pkg/store"
  5. )
  6. type ParticipantFileStore struct {
  7. *FileStore[*models.Participant, *store.ParticipantStore]
  8. }
  9. func NewParticipantFileStore(config *FileStoreConfig[*models.Participant, *store.ParticipantStore]) (*ParticipantFileStore, error) {
  10. var err error
  11. pStore := new(ParticipantFileStore)
  12. pStore.FileStore, err = NewFileStore[*models.Participant, *store.ParticipantStore](config, store.NewParticipantStore())
  13. if err != nil {
  14. return nil, err
  15. }
  16. return pStore, nil
  17. }
  18. func NewDefaultParticipantFileStore() (*ParticipantFileStore, error) {
  19. return NewParticipantFileStore(
  20. &FileStoreConfig[*models.Participant, *store.ParticipantStore]{
  21. FilePathConfig: FilePathConfig{GetDefaultParticipantsDir(), "participant", ".json"},
  22. IndexDirFunc: DefaultIndexDirFunc[*models.Participant, *store.ParticipantStore],
  23. CreateEntityFunc: func() *models.Participant {
  24. return &models.Participant{
  25. Attributes: make(map[string]string),
  26. }
  27. },
  28. },
  29. )
  30. }
  31. func (ps *ParticipantFileStore) ImportCSV(path string) ([]*models.Participant, error) {
  32. participants, err := ps.FileStore.Storer.ImportCSV(path)
  33. if err != nil {
  34. return nil, err
  35. }
  36. for _, p := range participants {
  37. _, err := ps.Create(p)
  38. if err != nil {
  39. return nil, err
  40. }
  41. }
  42. return participants, nil
  43. }