Skip to content

Commit

Permalink
Not going one at a time with offset
Browse files Browse the repository at this point in the history
  • Loading branch information
henrod committed May 9, 2017
1 parent 32805db commit c96b519
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 41 deletions.
26 changes: 3 additions & 23 deletions api/offer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1111,8 +1111,8 @@ var _ = Describe("Offer Template Handler", func() {
Expect(pages).To(Equal(float64(0)))
})

It("should return three offers with no limit and offset 2", func() {
offset := 2
It("should return no offers with no limit and offset 1 (second page)", func() {
offset := 1
url := fmt.Sprintf("/offers?game-id=offers-game&offset=%d", offset)
request, _ := http.NewRequest("GET", url, nil)

Expand All @@ -1125,27 +1125,7 @@ var _ = Describe("Offer Template Handler", func() {
Expect(err).NotTo(HaveOccurred())

offers := obj["offers"].([]interface{})
Expect(offers).To(HaveLen(3))

pages := obj["pages"].(float64)
Expect(pages).To(Equal(float64(1)))
})

It("should return three offers with no limit and offset 2", func() {
offset := 2
url := fmt.Sprintf("/offers?game-id=offers-game&offset=%d", offset)
request, _ := http.NewRequest("GET", url, nil)

app.Router.ServeHTTP(recorder, request)
Expect(recorder.Header().Get("Content-Type")).To(Equal("application/json"))

Expect(recorder.Code).To(Equal(http.StatusOK))
var obj map[string]interface{}
err := json.Unmarshal(recorder.Body.Bytes(), &obj)
Expect(err).NotTo(HaveOccurred())

offers := obj["offers"].([]interface{})
Expect(offers).To(HaveLen(3))
Expect(offers).To(BeEmpty())

pages := obj["pages"].(float64)
Expect(pages).To(Equal(float64(1)))
Expand Down
31 changes: 16 additions & 15 deletions models/offer.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,22 +152,8 @@ func ListOffers(
mr *MixedMetricsReporter,
) ([]*Offer, int, error) {
offers := []*Offer{}
err := mr.WithDatastoreSegment("offers", SegmentSelect, func() error {
return db.
Select("*").
From("offers").
Where("game_id = $1", gameID).
OrderBy("created_at").
Limit(limit).
Offset(offset).
QueryStructs(&offers)
})
if err != nil {
return offers, 0, err
}

var numberOffers int
err = mr.WithDatastoreSegment("offers", SegmentSelect, func() error {
err := mr.WithDatastoreSegment("offers", SegmentSelect, func() error {
return db.
Select("COUNT(*)").
From("offers").
Expand All @@ -184,6 +170,21 @@ func ListOffers(
if numberOffers%int(limit) != 0 {
pages = pages + 1
}

start := offset * limit
err = mr.WithDatastoreSegment("offers", SegmentSelect, func() error {
return db.
Select("*").
From("offers").
Where("game_id = $1", gameID).
OrderBy("created_at").
Limit(limit).
Offset(start).
QueryStructs(&offers)
})
if err != nil {
return offers, 0, err
}
}

return offers, pages, nil
Expand Down
6 changes: 3 additions & 3 deletions models/offer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -201,13 +201,13 @@ var _ = Describe("Offer Models", func() {
Expect(pages).To(Equal(pages))
})

It("should return one offer with limit 2 and offset 4", func() {
It("should return no offer with limit 2 and offset 3", func() {
var limit uint64 = 2
var offset uint64 = 4
var offset uint64 = 3
var pages int = 5/2 + 1
games, pages, err := models.ListOffers(db, "offers-game", limit, offset, nil)
Expect(err).NotTo(HaveOccurred())
Expect(games).To(HaveLen(1))
Expect(games).To(BeEmpty())
Expect(pages).To(Equal(pages))
})

Expand Down

0 comments on commit c96b519

Please sign in to comment.