chore: add twt endpoints
This commit is contained in:
parent
2fdc43b7de
commit
5c97bfb182
89
http.go
89
http.go
@ -6,6 +6,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"slices"
|
"slices"
|
||||||
"sort"
|
"sort"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -104,6 +105,86 @@ func httpServer(c *console, app *appState) error {
|
|||||||
reg.WriteTo(w)
|
reg.WriteTo(w)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
http.HandleFunc("/api/plain/twt", func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
ctx, span := otel.Span(r.Context())
|
||||||
|
defer span.End()
|
||||||
|
|
||||||
|
limit := 100
|
||||||
|
if v, ok := strconv.Atoi(r.URL.Query().Get("limit")); ok == nil {
|
||||||
|
limit = v
|
||||||
|
}
|
||||||
|
offset := 0
|
||||||
|
if v, ok := strconv.Atoi(r.URL.Query().Get("offset")); ok == nil {
|
||||||
|
offset = v
|
||||||
|
}
|
||||||
|
|
||||||
|
args := []any{limit, offset}
|
||||||
|
|
||||||
|
uriqry := ""
|
||||||
|
if u := r.URL.Query().Get("uri"); u != "" {
|
||||||
|
uriqry = "and uri = ?"
|
||||||
|
args = append([]any{u}, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
|
||||||
|
rows, err := db.QueryContext(
|
||||||
|
ctx,
|
||||||
|
`SELECT
|
||||||
|
feed_id,
|
||||||
|
hash,
|
||||||
|
conv,
|
||||||
|
nick,
|
||||||
|
uri,
|
||||||
|
text
|
||||||
|
FROM twts
|
||||||
|
JOIN (
|
||||||
|
SELECT
|
||||||
|
feed_id,
|
||||||
|
nick,
|
||||||
|
uri
|
||||||
|
FROM feeds
|
||||||
|
where state not in ('frozen', 'permanantly-dead')
|
||||||
|
`+uriqry+`
|
||||||
|
) using (feed_id)
|
||||||
|
order by ulid desc
|
||||||
|
limit ?
|
||||||
|
offset ?
|
||||||
|
`, args...,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
span.RecordError(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
|
var twts []types.Twt
|
||||||
|
for rows.Next() {
|
||||||
|
var o struct {
|
||||||
|
FeedID string
|
||||||
|
Hash string
|
||||||
|
Conv string
|
||||||
|
Dt string
|
||||||
|
Nick string
|
||||||
|
URI string
|
||||||
|
Text string
|
||||||
|
}
|
||||||
|
err = rows.Scan(&o.FeedID, &o.Hash, &o.Conv, &o.Nick, &o.URI, &o.Text)
|
||||||
|
if err != nil {
|
||||||
|
span.RecordError(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
twter := types.NewTwter(o.Nick, o.URI)
|
||||||
|
o.Text = strings.ReplaceAll(o.Text, "\n", "\u2028")
|
||||||
|
twt, _ := lextwt.ParseLine(o.Text, &twter)
|
||||||
|
twts = append(twts, twt)
|
||||||
|
}
|
||||||
|
var preamble lextwt.Comments
|
||||||
|
preamble = append(preamble, lextwt.NewComment("# self = /api/plain/twts"))
|
||||||
|
|
||||||
|
reg := lextwt.NewTwtRegistry(preamble, twts)
|
||||||
|
reg.WriteTo(w)
|
||||||
|
})
|
||||||
|
|
||||||
http.HandleFunc("/api/plain/users", func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("/api/plain/users", func(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx, span := otel.Span(r.Context())
|
ctx, span := otel.Span(r.Context())
|
||||||
defer span.End()
|
defer span.End()
|
||||||
@ -136,10 +217,10 @@ func httpServer(c *console, app *appState) error {
|
|||||||
var twts []types.Twt
|
var twts []types.Twt
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var o struct {
|
var o struct {
|
||||||
FeedID string
|
FeedID string
|
||||||
URI string
|
URI string
|
||||||
Nick string
|
Nick string
|
||||||
Dt TwtTime
|
Dt TwtTime
|
||||||
LastTwtOn TwtTime
|
LastTwtOn TwtTime
|
||||||
}
|
}
|
||||||
err = rows.Scan(&o.FeedID, &o.URI, &o.Nick, &o.Dt, &o.LastTwtOn)
|
err = rows.Scan(&o.FeedID, &o.URI, &o.Nick, &o.Dt, &o.LastTwtOn)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user