Problem: After and Before are not working really well
Solution: Filter after and before and only add both when more items are available
This commit is contained in:
parent
75914514ec
commit
6bf8417451
|
@ -127,13 +127,13 @@ WHERE "channel_id" = $1
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
} else {
|
} else {
|
||||||
args = append(args, b)
|
args = append(args, b)
|
||||||
qb.WriteString(` AND "published_at" < $2`)
|
qb.WriteString(` AND "published_at" >= $2`)
|
||||||
}
|
}
|
||||||
} else if after != "" {
|
} else if after != "" {
|
||||||
b, err := time.Parse(time.RFC3339, after)
|
b, err := time.Parse(time.RFC3339, after)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
args = append(args, b)
|
args = append(args, b)
|
||||||
qb.WriteString(` AND "published_at" > $2`)
|
qb.WriteString(` AND "published_at" < $2`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
qb.WriteString(` ORDER BY "published_at" DESC LIMIT 10`)
|
qb.WriteString(` ORDER BY "published_at" DESC LIMIT 10`)
|
||||||
|
@ -181,8 +181,12 @@ WHERE "channel_id" = $1
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: should only be set of there are more items available
|
// TODO: should only be set of there are more items available
|
||||||
// tl.Paging.Before = last
|
if hasMoreBefore(conn, tl.Items[0].Published) {
|
||||||
tl.Paging.After = last
|
tl.Paging.Before = tl.Items[0].Published
|
||||||
|
}
|
||||||
|
if hasMoreAfter(conn, last) {
|
||||||
|
tl.Paging.After = last
|
||||||
|
}
|
||||||
|
|
||||||
if tl.Items == nil {
|
if tl.Items == nil {
|
||||||
tl.Items = []microsub.Item{}
|
tl.Items = []microsub.Item{}
|
||||||
|
@ -191,6 +195,24 @@ WHERE "channel_id" = $1
|
||||||
return tl, nil
|
return tl, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func hasMoreBefore(conn *sql.Conn, before string) bool {
|
||||||
|
row := conn.QueryRowContext(context.Background(), `SELECT COUNT(*) FROM "items" WHERE "published_at" >= $1`, before)
|
||||||
|
var count int
|
||||||
|
if err := row.Scan(&count); err == sql.ErrNoRows {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return count > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func hasMoreAfter(conn *sql.Conn, after string) bool {
|
||||||
|
row := conn.QueryRowContext(context.Background(), `SELECT COUNT(*) FROM "items" WHERE "published_at" < $1`, after)
|
||||||
|
var count int
|
||||||
|
if err := row.Scan(&count); err == sql.ErrNoRows {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return count > 0
|
||||||
|
}
|
||||||
|
|
||||||
// Count
|
// Count
|
||||||
func (p *postgresStream) Count() (int, error) {
|
func (p *postgresStream) Count() (int, error) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user