summaryrefslogtreecommitdiff
path: root/internal/server/api/api.go
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2024-11-03 19:33:30 +0200
committerKyren223 <Kyren223@proton.me>2024-11-03 19:33:30 +0200
commitff3140a4089819489130a0908178a63eff20f708 (patch)
treedef568e1deca7461f814e55af7d9e09720e0b0ae /internal/server/api/api.go
parenta637ea9c335c385985a23510a4174d837fb51faf (diff)
feat: add username and timestamp to messages
Diffstat (limited to 'internal/server/api/api.go')
-rw-r--r--internal/server/api/api.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go
index 3d4d274..f932fbb 100644
--- a/internal/server/api/api.go
+++ b/internal/server/api/api.go
@@ -2,13 +2,17 @@ package api
import (
"context"
+ "crypto/ed25519"
+ "database/sql"
"log"
+ "strconv"
"strings"
"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 {
@@ -51,3 +55,33 @@ func GetMessages(ctx context.Context, request *packet.GetMessagesRange) packet.P
}
return &packet.Messages{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)
+ if err == sql.ErrNoRows {
+ id := node.Generate()
+ user, err = queries.CreateUser(ctx, data.CreateUserParams{
+ ID: id,
+ Name: "User" + strconv.FormatInt(id.Time() % 1000, 10),
+ PublicKey: pubKey,
+ })
+ }
+ if err != nil {
+ return data.User{}, err
+ }
+ return user, nil
+}