From c5064f6bbd06596ba1eb002904b9572427d71fc6 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Sat, 2 Nov 2024 13:14:03 +0200 Subject: feat: client and server api changes to accomedate DB --- internal/client/api/api.go | 23 ++++++++++++++++------- internal/client/client.go | 6 +++++- 2 files changed, 21 insertions(+), 8 deletions(-) (limited to 'internal/client') diff --git a/internal/client/api/api.go b/internal/client/api/api.go index 56cf054..9cfa1d4 100644 --- a/internal/client/api/api.go +++ b/internal/client/api/api.go @@ -1,29 +1,38 @@ package api import ( + "errors" + "fmt" "log" tea "github.com/charmbracelet/bubbletea" "github.com/kyren223/eko/internal/client/gateway" + "github.com/kyren223/eko/internal/data" "github.com/kyren223/eko/internal/packet" "github.com/kyren223/eko/pkg/assert" ) +type AppendMessage data.Message + func SendMessage(message string) tea.Cmd { return func() tea.Msg { log.Println("request SendMessage sent") request := packet.SendMessage{Content: message} - responsePayload, ok := <-gateway.Send(&request) + response, ok := <-gateway.Send(&request) if !ok { - log.Println("request timeout") - return "" + log.Println() + return errors.New("request timeout") } log.Println("request SendMessage received response") - response := responsePayload.(*packet.ErrorMessage) - assert.Assert(ok, "server should return an ErrorMessage response for a SendMessage request") - assert.Assert(response.IsOk(), "server should always return an OK if we didn't mess up") - return "" + switch response := response.(type) { + case *packet.ErrorMessage: + return errors.New(response.Error) + case *packet.Messages: + assert.Assert(len(response.Messages) == 1, "server must return only the one message that was sent") + return AppendMessage(response.Messages[0]) + } + return fmt.Errorf("received invalid response from server: %v", response.Type()) } } diff --git a/internal/client/client.go b/internal/client/client.go index 598772b..b091343 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -135,7 +135,11 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case *packet.Messages: slices.SortFunc(msg.Messages, func(a, b data.Message) int { - if a.ID - b.ID < 0 { return -1 } else { return 1 } + if a.ID-b.ID < 0 { + return -1 + } else { + return 1 + } }) m.messages = []string{} -- cgit v1.3.1