From bec64827d19d64aae86ca3d2b26de800b427a540 Mon Sep 17 00:00:00 2001 From: Brian Picciano Date: Wed, 18 Aug 2021 17:13:25 -0600 Subject: implement basic chat history endpoint --- srv/api/chat.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 srv/api/chat.go (limited to 'srv/api/chat.go') diff --git a/srv/api/chat.go b/srv/api/chat.go new file mode 100644 index 0000000..84fffde --- /dev/null +++ b/srv/api/chat.go @@ -0,0 +1,41 @@ +package api + +import ( + "errors" + "fmt" + "net/http" + + "github.com/mediocregopher/blog.mediocregopher.com/srv/chat" +) + +func (a *api) chatHistoryHandler() http.Handler { + return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { + limit, err := strToInt(r.FormValue("limit"), 0) + if err != nil { + badRequest(rw, r, fmt.Errorf("invalid limit parameter: %w", err)) + return + } + + cursor := r.FormValue("cursor") + + cursor, msgs, err := a.params.GlobalRoom.History(r.Context(), chat.HistoryOpts{ + Limit: limit, + Cursor: cursor, + }) + + if argErr := (chat.ErrInvalidArg{}); errors.As(err, &argErr) { + badRequest(rw, r, argErr.Err) + return + } else if err != nil { + internalServerError(rw, r, err) + } + + jsonResult(rw, r, struct { + Cursor string `json:"cursor"` + Messages []chat.Message `json:"messages"` + }{ + Cursor: cursor, + Messages: msgs, + }) + }) +} -- cgit v1.2.3