package api import ( "cmp" "net/http" "slices" ) // handleChats lists the bot's chats, ordered by id. The bot talks to // people only one to one, so its chats are its contacts, and a chat's // id is its contact's. func (h *handlers) handleChats() http.HandlerFunc { type chat struct { ID int64 `json:"id"` DisplayName string `json:"display_name"` ContactDeleted bool `json:"contact_deleted"` } type response struct { Chats []chat `json:"chats"` } return func(w http.ResponseWriter, r *http.Request) { contacts, err := h.client.Contacts(r.Context(), h.userID) if err != nil { h.log.Error("listing the chats", "error", err) h.respondError(w, http.StatusInternalServerError, "the chats could not be read") return } chats := make([]chat, 0, len(contacts)) for _, c := range contacts { chats = append(chats, chat{ ID: c.ContactID, DisplayName: c.Profile.DisplayName, ContactDeleted: c.Deleted(), }) } slices.SortFunc(chats, func(a, b chat) int { return cmp.Compare(a.ID, b.ID) }) h.respond(w, http.StatusOK, response{Chats: chats}) } }