summaryrefslogtreecommitdiff
path: root/internal/server/api
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2024-11-02 20:12:18 +0200
committerKyren223 <Kyren223@proton.me>2024-11-02 20:12:18 +0200
commita637ea9c335c385985a23510a4174d837fb51faf (patch)
tree211dac907d4cfcf67d4d994fd6dae7928d90e240 /internal/server/api
parent996840205417820e3928b724b20bfed152048fda (diff)
feat: client can now send messages and the server saves thme in DB
Diffstat (limited to 'internal/server/api')
-rw-r--r--internal/server/api/api.go9
-rw-r--r--internal/server/api/database.go36
2 files changed, 43 insertions, 2 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go
index 8f9e6c6..3d4d274 100644
--- a/internal/server/api/api.go
+++ b/internal/server/api/api.go
@@ -15,7 +15,7 @@ func SendMessage(ctx context.Context, request *packet.SendMessage) packet.Payloa
sess, ok := session.FromContext(ctx)
assert.Assert(ok, "context in process packet should always have a session")
- if (request.ReceiverID != nil) != (request.FrequencyID != nil) {
+ if (request.ReceiverID != nil) == (request.FrequencyID != nil) {
return &packet.ErrorMessage{Error: "either receiver id or frequency id must exist"}
}
@@ -43,4 +43,11 @@ func SendMessage(ctx context.Context, request *packet.SendMessage) packet.Payloa
}
func GetMessages(ctx context.Context, request *packet.GetMessagesRange) packet.Payload {
+ queries := data.New(db)
+ messages, err := queries.ListMessages(ctx)
+ if err != nil {
+ log.Println("database error when retrieving messages:", err)
+ return &packet.ErrorMessage{Error: "internal server error"}
+ }
+ return &packet.Messages{Messages: messages}
}
diff --git a/internal/server/api/database.go b/internal/server/api/database.go
index 7057393..3546395 100644
--- a/internal/server/api/database.go
+++ b/internal/server/api/database.go
@@ -1,16 +1,23 @@
package api
import (
+ "context"
+ "crypto/ed25519"
"database/sql"
"log"
+ _ "github.com/mattn/go-sqlite3"
+
+ "github.com/kyren223/eko/internal/data"
"github.com/kyren223/eko/pkg/assert"
+ "github.com/kyren223/eko/pkg/snowflake"
)
var db *sql.DB
func ConnectToDatabase() {
- db, err := sql.Open("sqlite3", "server.db")
+ var err error
+ db, err = sql.Open("sqlite3", "file:server.db?cache=shared")
assert.NoError(err, "DB should always be accessible")
assert.AddFlush(db)
log.Println("established connection with the database")
@@ -30,6 +37,33 @@ func ConnectToDatabase() {
}
func CloseDatabase() {
+ assert.NotNil(db, "db should only be closed if it exists")
db.Close()
log.Println("connection with database closed")
}
+
+func demo() {
+ ctx := context.Background()
+ node := snowflake.NewNode(1)
+ pubKey, _, _ := ed25519.GenerateKey(nil)
+
+ queries := data.New(db)
+ user, _ := queries.CreateUser(ctx, data.CreateUserParams{
+ ID: node.Generate(),
+ PublicKey: pubKey,
+ })
+ user, _ = queries.SetUserName(ctx, data.SetUserNameParams{
+ ID: user.ID,
+ Name: "admin",
+ })
+ network, _ := queries.CreateNetwork(ctx, data.CreateNetworkParams{
+ ID: node.Generate(),
+ Name: "global",
+ OwnerID: user.ID,
+ })
+ _, _ = queries.CreateFrequency(ctx, data.CreateFrequencyParams{
+ ID: node.Generate(),
+ NetworkID: network.ID,
+ Name: "general",
+ })
+}