Files
eko/internal/server/api/database.go

68 lines
1.5 KiB
Go

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() {
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")
pragmas := []string{
"PRAGMA journal_mode = WAL;",
"PRAGMA synchronous = NORMAL;",
"PRAGMA temp_store = MEMORY;",
"PRAGMA mmap_size = 30000000000;",
}
for _, pragma := range pragmas {
_, err := db.Exec(pragma)
assert.NoError(err, "DB pragmas should always execute with no errors")
}
log.Println("database connection ready to be used")
}
func DB() *sql.DB {
return db
}
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",
})
}