This commit is contained in:
parent
9c4a166b45
commit
34daae0d9e
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user