NZCovidBot/internal/nzcovidbot/csv.go

99 lines
2.3 KiB
Go

package nzcovidbot
import (
"encoding/csv"
"fmt"
"strings"
)
// Slice of updated located
type UpdatedLocations struct {
Locations []UpdatedRow
}
// Updated data
type UpdatedRow struct {
ChangeType string // ADDED, REMOVED, MODIFIED
DiscordData string // Formatted Row data
TwitterData string // Formatted Row data
}
// Struct of updated locations
var updatedLocations UpdatedLocations
// parseCsvRow Build into struct for output later
func parseCsvRow(changeType string, data string) {
newRow := UpdatedRow{
ChangeType: changeType,
DiscordData: formatCsvDiscordRow(data),
TwitterData: formatCsvTwitterRow(data),
}
updatedLocations.Locations = append(updatedLocations.Locations, newRow)
}
// formatCsvDiscordRow Format the string to a tidy string for the interwebs
func formatCsvDiscordRow(data string) string {
// Split string
r := csv.NewReader(strings.NewReader(data))
r.Comma = ','
fields, err := r.Read()
if err != nil {
fmt.Println(err)
return ""
}
c := make([]string, 0)
c = append(c, fields...)
return fmt.Sprintf("**%s** %s on _%s_ - _%s_", c[1], c[2], c[4], c[5])
}
// formatCsvTwitterRow Format the string to a tidy string for the interwebs
func formatCsvTwitterRow(data string) string {
// Split string
r := csv.NewReader(strings.NewReader(data))
r.Comma = ','
fields, err := r.Read()
if err != nil {
fmt.Println(err)
return ""
}
c := make([]string, 0)
c = append(c, fields...)
return fmt.Sprintf("**%s** - %s\n_%s_ - _%s_", c[1], c[2], c[4], c[5])
}
func getPostableDiscordData() string {
if len(updatedLocations.Locations) == 0 {
return ""
}
rows := make([]string, 0)
for _, location := range updatedLocations.Locations {
if location.ChangeType == "REMOVED" {
rows = append(rows, fmt.Sprintf("REMOVED: %s", location.DiscordData))
} else {
rows = append(rows, location.DiscordData)
}
}
return strings.Join(rows, "\n\n")
}
func getPostableTwitterData() string {
if len(updatedLocations.Locations) == 0 {
return ""
}
rows := make([]string, 0)
for _, location := range updatedLocations.Locations {
if location.ChangeType == "REMOVED" {
rows = append(rows, fmt.Sprintf("REMOVED: %s", location.TwitterData))
} else {
rows = append(rows, location.TwitterData)
}
}
return strings.Join(rows, "\n\n")
}