mirror of
https://github.com/hanzoai/commerce.git
synced 2026-10-30 15:08:42 +00:00
Multi-tenant commerce and billing: orders, subscriptions, invoices, plans, usage metering and a credit ledger. One Go binary. MIT OR Apache-2.0. Claude-Session: https://claude.ai/code/session_01SAtaDFm8VDiWrhYHNNtxMw
95 lines
2.1 KiB
Go
95 lines
2.1 KiB
Go
package indiegogo
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
. "github.com/hanzoai/commerce/types"
|
|
)
|
|
|
|
const igTimeLayout = "2006-01-02 15:04:05 -0700"
|
|
|
|
// Represents a row in an Indiegogo CSV
|
|
type Row struct {
|
|
TokenID string // NOTE: This was manually added.
|
|
PerkID string
|
|
PledgeID string
|
|
FulfillmentStatus string
|
|
FundingDate time.Time
|
|
PaymentMethod string
|
|
Appearance string
|
|
Name string
|
|
Email string
|
|
Amount string
|
|
Perk string
|
|
ShippingName string
|
|
ShippingAddress Address
|
|
|
|
// Not in row, generated by us
|
|
FirstName string
|
|
LastName string
|
|
}
|
|
|
|
func NewRow(row []string) Row {
|
|
// Trim all strings to start
|
|
for i, s := range row {
|
|
row[i] = strings.TrimSpace(s)
|
|
}
|
|
|
|
r := Row{
|
|
TokenID: row[0],
|
|
PerkID: row[1],
|
|
PledgeID: row[2],
|
|
FulfillmentStatus: row[3],
|
|
PaymentMethod: row[5],
|
|
Appearance: row[6],
|
|
Name: row[7],
|
|
Email: row[8],
|
|
Amount: row[9],
|
|
Perk: row[10],
|
|
ShippingName: row[11],
|
|
FirstName: "",
|
|
LastName: "",
|
|
}
|
|
|
|
address := Address{
|
|
Line1: row[12],
|
|
Line2: row[13],
|
|
City: row[14],
|
|
State: row[15],
|
|
PostalCode: row[16],
|
|
Country: row[17],
|
|
}
|
|
|
|
// Try to parse funding date
|
|
if date, err := time.Parse(igTimeLayout, row[4]); err != nil {
|
|
r.FundingDate = time.Now().UTC()
|
|
} else {
|
|
r.FundingDate = date.UTC()
|
|
}
|
|
|
|
// Normalize various bits
|
|
r.Email = strings.ToLower(r.Email)
|
|
|
|
// Title case name
|
|
name := strings.SplitN(r.ShippingName, " ", 2)
|
|
|
|
if len(name) > 0 {
|
|
r.FirstName = strings.TrimSpace(strings.Title(strings.ToLower(name[0])))
|
|
}
|
|
if len(name) > 1 {
|
|
r.LastName = strings.TrimSpace(strings.Title(strings.ToLower(name[1])))
|
|
}
|
|
|
|
// Da fuq, Indiegogo?
|
|
address.PostalCode = strings.Trim(address.PostalCode, "=")
|
|
address.PostalCode = strings.Trim(address.PostalCode, "\"")
|
|
|
|
address.City = strings.Title(strings.ToLower(row[14]))
|
|
address.State = strings.Title(strings.ToLower(row[15]))
|
|
|
|
r.ShippingAddress = address
|
|
|
|
return r
|
|
}
|