Monorepo for Tangled
tangled.org
1package xrpc
2
3import (
4 "net/http"
5 "strconv"
6
7 "tangled.org/core/api/tangled"
8 "tangled.org/core/knotserver/db"
9 xrpcerr "tangled.org/core/xrpc/errors"
10)
11
12func (x *Xrpc) ListMembers(w http.ResponseWriter, r *http.Request) {
13 p, err := parseListParams(r)
14 if err != nil {
15 writeError(w, xrpcerr.NewXrpcError(
16 xrpcerr.WithTag("InvalidRequest"),
17 xrpcerr.WithMessage(err.Error()),
18 ), http.StatusBadRequest)
19 return
20 }
21
22 members, next, err := db.ListKnotMembers(x.Db, p)
23 if err != nil {
24 x.Logger.Error("failed to list knot members", "error", err)
25 writeError(w, xrpcerr.NewXrpcError(
26 xrpcerr.WithTag("InternalServerError"),
27 xrpcerr.WithMessage("failed to list knot members"),
28 ), http.StatusInternalServerError)
29 return
30 }
31
32 response := tangled.KnotListMembers_Output{
33 Items: mapSlice(members, func(m db.KnotMember) *tangled.KnotListMembers_ListItem {
34 return &tangled.KnotListMembers_ListItem{
35 Subject: m.Subject.String(),
36 AddedBy: m.Did.String(),
37 CreatedAt: m.Created,
38 }
39 }),
40 }
41 if next != nil {
42 cur := strconv.Itoa(*next)
43 response.Cursor = &cur
44 }
45
46 x.writeJson(w, response)
47}