Skip to content

Commit 773034e

Browse files
authored
Merge pull request #161 from mraerino/fix/order-list-from-to
Fix error when querying by creation range
2 parents b4db710 + 8ee1f4d commit 773034e

File tree

4 files changed

+31
-20
lines changed

4 files changed

+31
-20
lines changed

api/download.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,11 @@ func (a *API) DownloadList(w http.ResponseWriter, r *http.Request) error {
110110
orderTable := a.db.NewScope(models.Order{}).QuotedTableName()
111111
downloadsTable := a.db.NewScope(models.Download{}).QuotedTableName()
112112

113-
query := a.db.Joins("join " + orderTable + " as orders ON " + downloadsTable + ".order_id = orders.id and orders.payment_state = 'paid'")
113+
query := a.db.Joins("join " + orderTable + " as orders ON " + downloadsTable + ".order_id = " + orderTable + ".id and " + orderTable + ".payment_state = 'paid'")
114114
if order != nil {
115-
query = query.Where("orders.id = ?", order.ID)
115+
query = query.Where(orderTable+".id = ?", order.ID)
116116
} else {
117-
query = query.Where("orders.user_id = ?", claims.Subject)
117+
query = query.Where(orderTable+".user_id = ?", claims.Subject)
118118
}
119119

120120
offset, limit, err := paginate(w, r, query.Model(&models.Download{}))

api/order_test.go

+10
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,16 @@ func TestOrdersList(t *testing.T) {
333333
extractPayload(t, http.StatusOK, recorder, &orders)
334334
assert.Len(t, orders, 1)
335335
})
336+
t.Run("RangeWithParams", func(t *testing.T) {
337+
test := NewRouteTest(t)
338+
token := test.Data.testUserToken
339+
url := fmt.Sprintf("/orders?per_page=50&page=1&from=%d&billing_countries=dcland", test.Data.firstOrder.CreatedAt.Unix())
340+
recorder := test.TestEndpoint(http.MethodGet, url, nil, token)
341+
342+
orders := []models.Order{}
343+
extractPayload(t, http.StatusOK, recorder, &orders)
344+
assert.Len(t, orders, 2)
345+
})
336346
})
337347
t.Run("Pagination", func(t *testing.T) {
338348
test := NewRouteTest(t)

api/params.go

+14-13
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ var sortFields = map[string]string{
2727
}
2828

2929
func parsePaymentQueryParams(query *gorm.DB, params url.Values) (*gorm.DB, error) {
30-
query = addFilters(query, query.NewScope(models.Transaction{}).QuotedTableName(), params, []string{
30+
transactionTable := query.NewScope(models.Transaction{}).QuotedTableName()
31+
query = addFilters(query, transactionTable, params, []string{
3132
"processor_id",
3233
"user_id",
3334
"order_id",
@@ -38,18 +39,18 @@ func parsePaymentQueryParams(query *gorm.DB, params url.Values) (*gorm.DB, error
3839
})
3940

4041
if values, exists := params["min_amount"]; exists {
41-
query = query.Where("amount >= ?", values[0])
42+
query = query.Where(transactionTable+".amount >= ?", values[0])
4243
}
4344

4445
if values, exists := params["max_amount"]; exists {
45-
query = query.Where("amount <= ?", values[0])
46+
query = query.Where(transactionTable+".amount <= ?", values[0])
4647
}
4748

4849
query, err := parseLimitQueryParam(query, params)
4950
if err != nil {
5051
return nil, err
5152
}
52-
return parseTimeQueryParams(query, params)
53+
return parseTimeQueryParams(query, transactionTable, params)
5354
}
5455

5556
func parseUserBulkDeleteParams(query *gorm.DB, params url.Values) (*gorm.DB, error) {
@@ -78,7 +79,7 @@ func parseUserQueryParams(query *gorm.DB, params url.Values) (*gorm.DB, error) {
7879
if err != nil {
7980
return nil, err
8081
}
81-
return parseTimeQueryParams(query, params)
82+
return parseTimeQueryParams(query, userTable, params)
8283
}
8384

8485
func sortField(value string) string {
@@ -123,11 +124,13 @@ func addNegativeAddressFilter(query *gorm.DB, params url.Values, queryField stri
123124
}
124125

125126
func parseOrderParams(query *gorm.DB, params url.Values) (*gorm.DB, error) {
127+
orderTable := query.NewScope(models.Order{}).QuotedTableName()
128+
126129
if tax := params.Get("tax"); tax != "" {
127130
if tax == "yes" || tax == "true" {
128-
query = query.Where("taxes > 0")
131+
query = query.Where(orderTable + ".taxes > 0")
129132
} else {
130-
query = query.Where("taxes = 0")
133+
query = query.Where(orderTable + ".taxes = 0")
131134
}
132135
}
133136

@@ -159,8 +162,6 @@ func parseOrderParams(query *gorm.DB, params url.Values) (*gorm.DB, error) {
159162
query = query.Order("created_at desc")
160163
}
161164

162-
orderTable := query.NewScope(models.Order{}).QuotedTableName()
163-
164165
if items := params.Get("items"); items != "" {
165166
lineItemTable := query.NewScope(models.LineItem{}).QuotedTableName()
166167
statement := "JOIN " + lineItemTable + " as line_item on line_item.order_id = " +
@@ -193,7 +194,7 @@ func parseOrderParams(query *gorm.DB, params url.Values) (*gorm.DB, error) {
193194
"coupon_code",
194195
})
195196

196-
return parseTimeQueryParams(query, params)
197+
return parseTimeQueryParams(query, orderTable, params)
197198
}
198199

199200
func parseLimitQueryParam(query *gorm.DB, params url.Values) (*gorm.DB, error) {
@@ -229,16 +230,16 @@ func getTimeQueryParams(params url.Values) (from *time.Time, to *time.Time, err
229230
return
230231
}
231232

232-
func parseTimeQueryParams(query *gorm.DB, params url.Values) (*gorm.DB, error) {
233+
func parseTimeQueryParams(query *gorm.DB, tableName string, params url.Values) (*gorm.DB, error) {
233234
from, to, err := getTimeQueryParams(params)
234235
if err != nil {
235236
return nil, err
236237
}
237238
if from != nil {
238-
query = query.Where("created_at >= ?", from)
239+
query = query.Where(tableName+".created_at >= ?", from)
239240
}
240241
if to != nil {
241-
query = query.Where("created_at <= ?", to)
242+
query = query.Where(tableName+".created_at <= ?", to)
242243
}
243244
return query, nil
244245
}

api/reports.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func (a *API) SalesReport(w http.ResponseWriter, r *http.Request) error {
3232
Where("payment_state = 'paid' AND instance_id = ?", instanceID).
3333
Group("currency")
3434

35-
query, err := parseTimeQueryParams(query, r.URL.Query())
35+
query, err := parseTimeQueryParams(query, query.NewScope(models.Order{}).QuotedTableName(), r.URL.Query())
3636
if err != nil {
3737
return badRequestError(err.Error())
3838
}
@@ -67,16 +67,16 @@ func (a *API) ProductsReport(w http.ResponseWriter, r *http.Request) error {
6767
Group("sku, path, currency").
6868
Order("total desc")
6969

70-
query = query.Where("orders.instance_id = ?", instanceID)
70+
query = query.Where(ordersTable+".instance_id = ?", instanceID)
7171
from, to, err := getTimeQueryParams(r.URL.Query())
7272
if err != nil {
7373
return badRequestError(err.Error())
7474
}
7575
if from != nil {
76-
query = query.Where("orders.created_at >= ?", from)
76+
query = query.Where(ordersTable+".created_at >= ?", from)
7777
}
7878
if to != nil {
79-
query.Where("orders.created_at <= ?", to)
79+
query.Where(ordersTable+".created_at <= ?", to)
8080
}
8181

8282
rows, err := query.Rows()

0 commit comments

Comments
 (0)