From e415a13211316cb804752c18833a10057bc0994c Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Wed, 27 Nov 2024 11:14:36 +0200 Subject: Reimplemented existing server APIs --- internal/server/api/api.go | 42 ++++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 24 deletions(-) (limited to 'internal/server/api') diff --git a/internal/server/api/api.go b/internal/server/api/api.go index f60e0ec..6c8d51a 100644 --- a/internal/server/api/api.go +++ b/internal/server/api/api.go @@ -11,14 +11,10 @@ import ( "github.com/kyren223/eko/internal/data" "github.com/kyren223/eko/internal/packet" "github.com/kyren223/eko/internal/server/session" - "github.com/kyren223/eko/pkg/assert" "github.com/kyren223/eko/pkg/snowflake" ) -func SendMessage(ctx context.Context, request *packet.SendMessage) packet.Payload { - sess, ok := session.FromContext(ctx) - assert.Assert(ok, "context in process packet should always have a session") - +func SendMessage(ctx context.Context, sess *session.Session, request *packet.SendMessage) packet.Payload { if (request.ReceiverID != nil) == (request.FrequencyID != nil) { return &packet.Error{Error: "either receiver id or frequency id must exist"} } @@ -28,27 +24,38 @@ func SendMessage(ctx context.Context, request *packet.SendMessage) packet.Payloa return &packet.Error{Error: "message content must not be blank"} } - node := sess.Manager().Node() - queries := data.New(db) message, err := queries.CreateMessage(ctx, data.CreateMessageParams{ - ID: node.Generate(), + ID: sess.Manager().Node().Generate(), SenderID: sess.ID(), Content: content, FrequencyID: request.FrequencyID, ReceiverID: request.ReceiverID, }) if err != nil { - log.Println(sess.Addr(), "SendMessage database error:", err) + log.Println(sess.Addr(), "database error:", err, "in SendMessage") return &packet.Error{Error: "internal server error"} } return &packet.MessagesInfo{Messages: []data.Message{message}} } -func GetMessages(ctx context.Context, request *packet.RequestMessages) packet.Payload { +func RequestMessages(ctx context.Context, sess *session.Session, request *packet.RequestMessages) packet.Payload { queries := data.New(db) - messages, err := queries.GetFrequencyMessages(ctx, request.FrequencyID) + var messages []data.Message + var err error + + if request.FrequencyID != nil && request.ReceiverID == nil { + messages, err = queries.GetFrequencyMessages(ctx, request.FrequencyID) + } else if request.ReceiverID != nil && request.FrequencyID == nil { + messages, err = queries.GetDirectMessages(ctx, data.GetDirectMessagesParams{ + User1: sess.ID(), + User2: request.ReceiverID, + }) + } else { + return &packet.Error{Error: "either receiver id or frequency id must exist"} + } + if err != nil { log.Println("database error when retrieving messages:", err) return &packet.Error{Error: "internal server error"} @@ -56,19 +63,6 @@ func GetMessages(ctx context.Context, request *packet.RequestMessages) packet.Pa return &packet.MessagesInfo{Messages: messages} } -// func GetUserById(ctx context.Context, request *packet.GetUserByID) packet.Payload { -// queries := data.New(db) -// user, err := queries.GetUserById(ctx, request.UserID) -// if err == sql.ErrNoRows { -// return &packet.Users{Users: []data.User{}} -// } -// if err != nil { -// log.Println("database error when retrieving user by id:", err) -// return &packet.ErrorMessage{Error: "internal server error"} -// } -// return &packet.Users{Users: []data.User{user}} -// } - func CreateOrGetUser(ctx context.Context, node *snowflake.Node, pubKey ed25519.PublicKey) (data.User, error) { queries := data.New(db) user, err := queries.GetUserByPublicKey(ctx, pubKey) -- cgit v1.3.1