diff options
Diffstat (limited to 'srv/api/chat.go')
-rw-r--r-- | srv/api/chat.go | 41 |
1 files changed, 41 insertions, 0 deletions
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, + }) + }) +} |