Add before handling
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Peter Stuifzand 2021-05-12 22:04:49 +02:00
parent 9c4a166b45
commit 34daae0d9e
Signed by: peter
GPG Key ID: 374322D56E5209E8

View File

@ -3,6 +3,7 @@ package timeline
import ( import (
"database/sql" "database/sql"
"fmt" "fmt"
"strings"
"time" "time"
"p83.nl/go/ekster/pkg/microsub" "p83.nl/go/ekster/pkg/microsub"
@ -75,31 +76,48 @@ CREATE TABLE IF NOT EXISTS "items" (
// Items // Items
func (p *postgresStream) Items(before, after string) (microsub.Timeline, error) { func (p *postgresStream) Items(before, after string) (microsub.Timeline, error) {
query := ` var args []interface{}
SELECT "id", "uid", "data", "created_at", "is_read" args = append(args, p.channelID)
var qb strings.Builder
qb.WriteString(`
SELECT "id", "uid", "data", "created_at", "is_read", "published_at"
FROM "items" FROM "items"
WHERE "channel_id" = $1 WHERE "channel_id" = $1
ORDER BY "published_at" `)
` if before != "" {
b, err := time.Parse(time.RFC3339, before)
if err == nil {
args = append(args, b)
qb.WriteString(` AND "published_at" < $2`)
}
}
qb.WriteString(` ORDER BY "published_at"`)
rows, err := p.database.Query(query, p.channelID) rows, err := p.database.Query(qb.String(), args...)
if err != nil { if err != nil {
return microsub.Timeline{}, fmt.Errorf("while query: %w", err) return microsub.Timeline{}, fmt.Errorf("while query: %w", err)
} }
var tl microsub.Timeline var tl microsub.Timeline
var first, last string
for rows.Next() { for rows.Next() {
var id int var id int
var uid string var uid string
var item microsub.Item var item microsub.Item
var createdAt time.Time var createdAt time.Time
var isRead int var isRead int
var publishedAt string
err = rows.Scan(&id, &uid, &item, &createdAt, &isRead) err = rows.Scan(&id, &uid, &item, &createdAt, &isRead, &publishedAt)
if err != nil { if err != nil {
break break
} }
if first == "" {
first = publishedAt
}
last = publishedAt
item.Read = isRead == 1 item.Read = isRead == 1
item.ID = uid item.ID = uid
@ -116,6 +134,9 @@ ORDER BY "published_at"
return tl, err return tl, err
} }
tl.Paging.Before = first
tl.Paging.After = last
return tl, nil return tl, nil
} }