in api.go [260:310]
func (h apiHandlers) postOrderCSV(c *gin.Context) {
customerID, err := strconv.Atoi(c.PostForm("customer"))
if err != nil {
err := errors.Wrap(err, "failed to parse customer ID")
c.AbortWithError(http.StatusBadRequest, err)
return
}
fileHeader, err := c.FormFile("file")
if err != nil {
err := errors.Wrap(err, "failed get CSV file")
c.AbortWithError(http.StatusBadRequest, err)
return
}
file, err := fileHeader.Open()
if err != nil {
err := errors.Wrap(err, "failed open CSV file")
c.AbortWithError(http.StatusInternalServerError, err)
return
}
defer file.Close()
var lines []ProductOrderLine
r := csv.NewReader(file)
for {
record, err := r.Read()
if err == io.EOF {
break
} else if err != nil {
err := errors.Wrap(err, "failed to parse CSV file")
c.AbortWithError(http.StatusBadRequest, err)
return
}
productID, err := strconv.Atoi(record[0])
if err != nil {
err := errors.Wrap(err, "failed to parse product ID")
c.AbortWithError(http.StatusBadRequest, err)
return
}
amount, err := strconv.Atoi(record[1])
if err != nil {
err := errors.Wrap(err, "failed to parse order amount")
c.AbortWithError(http.StatusBadRequest, err)
return
}
lines = append(lines, ProductOrderLine{
Product: Product{ID: productID},
Amount: amount,
})
}
h.postOrderCommon(c, customerID, lines)
}