45 lines
822 B
Go
45 lines
822 B
Go
package services
|
|
|
|
import (
|
|
"encoding/csv"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type Member struct {
|
|
Name string
|
|
Email string
|
|
}
|
|
|
|
func ParseMembersFromBytes(year int, fileBytes []byte) ([]Member, error) {
|
|
reader := csv.NewReader(strings.NewReader(string(fileBytes)))
|
|
records, err := reader.ReadAll()
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "failed to read CSV from bytes")
|
|
}
|
|
|
|
var members []Member
|
|
for i, record := range records {
|
|
if i == 0 {
|
|
continue // Skip the first line (column headers)
|
|
}
|
|
if len(record) < 4 {
|
|
continue
|
|
}
|
|
firstName := record[1]
|
|
lastName := record[2]
|
|
email := record[3]
|
|
members = append(members, Member{
|
|
Name: fmt.Sprintf("%s %s", firstName, lastName),
|
|
Email: email,
|
|
})
|
|
}
|
|
|
|
if len(members) == 0 {
|
|
members = []Member{}
|
|
}
|
|
|
|
return members, nil
|
|
} |