mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-04 10:21:40 +00:00
feature/driver indexed db (#12)
* fix: update commitizen version * feat: add WASM build tags to db actions * feat: Update all actions to follow `AddAsset` for error handling * feat: remove database dependency in dwn and motr commands * feat: add basic info form to registration view * feat: implement basic browser navigation component * refactor: move database related files to middleware * fix: remove unused test command * fix: update source directory for buf-publish workflow
This commit is contained in:
@@ -1,330 +0,0 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/onsonr/sonr/internal/db/orm"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// createInitialTables creates the initial tables in the database.
|
||||
func createInitialTables(db *gorm.DB) (*DB, error) {
|
||||
err := db.AutoMigrate(
|
||||
&orm.Account{},
|
||||
&orm.Asset{},
|
||||
&orm.Credential{},
|
||||
&orm.Keyshare{},
|
||||
&orm.Permission{},
|
||||
&orm.Profile{},
|
||||
&orm.Property{},
|
||||
)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create table: %w", err)
|
||||
}
|
||||
|
||||
return &DB{db}, nil
|
||||
}
|
||||
|
||||
// AddAccount adds a new account to the database
|
||||
func (db *DB) AddAccount(account *orm.Account) error {
|
||||
tx := db.Create(account)
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to add account: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetAccount gets an account from the database
|
||||
func (db *DB) GetAccount(account *orm.Account) error {
|
||||
tx := db.First(account)
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to get account: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateAccount updates an existing account in the database
|
||||
func (db *DB) UpdateAccount(account *orm.Account) error {
|
||||
tx := db.Save(account)
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to update account: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteAccount deletes an existing account from the database
|
||||
func (db *DB) DeleteAccount(account *orm.Account) error {
|
||||
tx := db.Delete(account)
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to delete account: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddAsset adds a new asset to the database
|
||||
func (db *DB) AddAsset(asset *orm.Asset) error {
|
||||
tx := db.Create(asset)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to add asset: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetAsset gets an asset from the database
|
||||
func (db *DB) GetAsset(asset *orm.Asset) error {
|
||||
tx := db.First(asset)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to get asset: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateAsset updates an existing asset in the database
|
||||
func (db *DB) UpdateAsset(asset *orm.Asset) error {
|
||||
tx := db.Save(asset)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to update asset: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteAsset deletes an existing asset from the database
|
||||
func (db *DB) DeleteAsset(asset *orm.Asset) error {
|
||||
tx := db.Delete(asset)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to delete asset: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddCredential adds a new credential to the database
|
||||
func (db *DB) AddCredential(credential *orm.Credential) error {
|
||||
tx := db.Create(credential)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to add credential: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetCredential gets an credential from the database
|
||||
func (db *DB) GetCredential(credential *orm.Credential) error {
|
||||
tx := db.First(credential)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to get credential: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateCredential updates an existing credential in the database
|
||||
func (db *DB) UpdateCredential(credential *orm.Credential) error {
|
||||
tx := db.Save(credential)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to update credential: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteCredential deletes an existing credential from the database
|
||||
func (db *DB) DeleteCredential(credential *orm.Credential) error {
|
||||
tx := db.Delete(credential)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to delete credential: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddKeyshare adds a new keyshare to the database
|
||||
func (db *DB) AddKeyshare(keyshare *orm.Keyshare) error {
|
||||
tx := db.Create(keyshare)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to add keyshare: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetKeyshare gets an keyshare from the database
|
||||
func (db *DB) GetKeyshare(keyshare *orm.Keyshare) error {
|
||||
tx := db.First(keyshare)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to get keyshare: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateKeyshare updates an existing keyshare in the database
|
||||
func (db *DB) UpdateKeyshare(keyshare *orm.Keyshare) error {
|
||||
tx := db.Save(keyshare)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to update keyshare: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteKeyshare deletes an existing keyshare from the database
|
||||
func (db *DB) DeleteKeyshare(keyshare *orm.Keyshare) error {
|
||||
tx := db.Delete(keyshare)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to delete keyshare: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddPermission adds a new permission to the database
|
||||
func (db *DB) AddPermission(permission *orm.Permission) error {
|
||||
tx := db.Create(permission)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to add permission: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetPermission gets an permission from the database
|
||||
func (db *DB) GetPermission(permission *orm.Permission) error {
|
||||
tx := db.First(permission)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to get permission: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdatePermission updates an existing permission in the database
|
||||
func (db *DB) UpdatePermission(permission *orm.Permission) error {
|
||||
tx := db.Save(permission)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to update permission: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeletePermission deletes an existing permission from the database
|
||||
func (db *DB) DeletePermission(permission *orm.Permission) error {
|
||||
tx := db.Delete(permission)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to delete permission: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddProfile adds a new profile to the database
|
||||
func (db *DB) AddProfile(profile *orm.Profile) error {
|
||||
tx := db.Create(profile)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to add profile: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetProfile gets an profile from the database
|
||||
func (db *DB) GetProfile(profile *orm.Profile) error {
|
||||
tx := db.First(profile)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to get profile: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateProfile updates an existing profile in the database
|
||||
func (db *DB) UpdateProfile(profile *orm.Profile) error {
|
||||
tx := db.Save(profile)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to update profile: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteProfile deletes an existing profile from the database
|
||||
func (db *DB) DeleteProfile(profile *orm.Profile) error {
|
||||
tx := db.Delete(profile)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to delete profile: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddProperty adds a new property to the database
|
||||
func (db *DB) AddProperty(property *orm.Property) error {
|
||||
tx := db.Create(property)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to add property: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetProperty gets an property from the database
|
||||
func (db *DB) GetProperty(property *orm.Property) error {
|
||||
tx := db.First(property)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to get property: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateProperty updates an existing property in the database
|
||||
func (db *DB) UpdateProperty(property *orm.Property) error {
|
||||
tx := db.Save(property)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to update property: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteProperty deletes an existing property from the database
|
||||
func (db *DB) DeleteProperty(property *orm.Property) error {
|
||||
tx := db.Delete(property)
|
||||
|
||||
if tx.Error != nil {
|
||||
return fmt.Errorf("failed to delete property: %w", tx.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
|
||||
"github.com/ncruces/go-sqlite3/gormlite"
|
||||
"golang.org/x/crypto/argon2"
|
||||
"gorm.io/gorm"
|
||||
"lukechampine.com/adiantum/hbsh"
|
||||
"lukechampine.com/adiantum/hpolyc"
|
||||
)
|
||||
|
||||
type DB struct {
|
||||
*gorm.DB
|
||||
}
|
||||
|
||||
func New(opts ...DBOption) (*DB, error) {
|
||||
config := &DBConfig{
|
||||
fileName: "vault.db",
|
||||
}
|
||||
for _, opt := range opts {
|
||||
opt(config)
|
||||
}
|
||||
gormdb, err := gorm.Open(gormlite.Open(config.ConnectionString()))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
db, err := createInitialTables(gormdb)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return db, nil
|
||||
}
|
||||
|
||||
// HBSH creates an HBSH cipher given a key.
|
||||
func (c *DB) HBSH(key []byte) *hbsh.HBSH {
|
||||
if len(key) != 32 {
|
||||
// Key is not appropriate, return nil.
|
||||
return nil
|
||||
}
|
||||
return hpolyc.New(key)
|
||||
}
|
||||
|
||||
// KDF gets a key from a secret.
|
||||
func (c *DB) KDF(secret string) []byte {
|
||||
if secret == "" {
|
||||
// No secret is given, generate a random key.
|
||||
key := make([]byte, 32)
|
||||
n, _ := rand.Read(key)
|
||||
return key[:n]
|
||||
}
|
||||
// Hash the secret with a KDF.
|
||||
return argon2.IDKey([]byte(secret), []byte("hpolyc"), 3, 64*1024, 4, 32)
|
||||
}
|
||||
@@ -1,195 +0,0 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"github.com/labstack/echo/v4"
|
||||
"github.com/onsonr/sonr/internal/db/orm"
|
||||
)
|
||||
|
||||
func (db *DB) ServeEcho(e *echo.Group) {
|
||||
e.GET("/accounts", db.HandleAccount)
|
||||
e.GET("/assets", db.HandleAsset)
|
||||
e.GET("/credentials", db.HandleCredential)
|
||||
e.GET("/keyshares", db.HandleKeyshare)
|
||||
e.GET("/permissions", db.HandlePermission)
|
||||
e.GET("/profiles", db.HandleProfile)
|
||||
e.GET("/properties", db.HandleProperty)
|
||||
}
|
||||
|
||||
func (db *DB) HandleAccount(c echo.Context) error {
|
||||
data := new(orm.Account)
|
||||
if err := c.Bind(data); err != nil {
|
||||
return err
|
||||
}
|
||||
// Check the method for GET, POST, PUT, DELETE
|
||||
switch c.Request().Method {
|
||||
case echo.POST:
|
||||
|
||||
if err := db.AddAccount(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, "OK")
|
||||
case echo.PUT:
|
||||
|
||||
if err := db.UpdateAccount(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, "OK")
|
||||
case echo.DELETE:
|
||||
if err := db.DeleteAccount(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, nil)
|
||||
}
|
||||
return c.JSON(200, data)
|
||||
}
|
||||
|
||||
func (db *DB) HandleAsset(c echo.Context) error {
|
||||
data := new(orm.Asset)
|
||||
if err := c.Bind(data); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch c.Request().Method {
|
||||
case echo.POST:
|
||||
if err := db.AddAsset(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, "OK")
|
||||
case echo.PUT:
|
||||
if err := db.UpdateAsset(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, "OK")
|
||||
case echo.DELETE:
|
||||
if err := db.DeleteAsset(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, "OK")
|
||||
}
|
||||
return c.JSON(200, data)
|
||||
}
|
||||
|
||||
func (db *DB) HandleCredential(c echo.Context) error {
|
||||
data := new(orm.Credential)
|
||||
if err := c.Bind(data); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch c.Request().Method {
|
||||
case echo.POST:
|
||||
if err := db.AddCredential(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, "OK")
|
||||
case echo.PUT:
|
||||
if err := db.UpdateCredential(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, "OK")
|
||||
case echo.DELETE:
|
||||
if err := db.DeleteCredential(data); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return c.JSON(200, data)
|
||||
}
|
||||
|
||||
func (db *DB) HandleKeyshare(c echo.Context) error {
|
||||
data := new(orm.Keyshare)
|
||||
if err := c.Bind(data); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch c.Request().Method {
|
||||
case echo.POST:
|
||||
if err := db.AddKeyshare(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, "OK")
|
||||
case echo.PUT:
|
||||
if err := db.UpdateKeyshare(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, "OK")
|
||||
case echo.DELETE:
|
||||
if err := db.DeleteKeyshare(data); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return c.JSON(200, data)
|
||||
}
|
||||
|
||||
func (db *DB) HandlePermission(c echo.Context) error {
|
||||
data := new(orm.Permission)
|
||||
if err := c.Bind(data); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch c.Request().Method {
|
||||
case echo.POST:
|
||||
if err := db.AddPermission(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, "OK")
|
||||
case echo.PUT:
|
||||
if err := db.UpdatePermission(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, "OK")
|
||||
case echo.DELETE:
|
||||
if err := db.DeletePermission(data); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return c.JSON(200, data)
|
||||
}
|
||||
|
||||
func (db *DB) HandleProfile(c echo.Context) error {
|
||||
data := new(orm.Profile)
|
||||
if err := c.Bind(data); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch c.Request().Method {
|
||||
case echo.POST:
|
||||
if err := db.AddProfile(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, "OK")
|
||||
case echo.PUT:
|
||||
if err := db.UpdateProfile(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, "OK")
|
||||
case echo.DELETE:
|
||||
if err := db.DeleteProfile(data); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return c.JSON(200, data)
|
||||
}
|
||||
|
||||
func (db *DB) HandleProperty(c echo.Context) error {
|
||||
data := new(orm.Property)
|
||||
if err := c.Bind(data); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
switch c.Request().Method {
|
||||
case echo.POST:
|
||||
if err := db.AddProperty(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, "OK")
|
||||
case echo.PUT:
|
||||
if err := db.UpdateProperty(data); err != nil {
|
||||
return err
|
||||
}
|
||||
return c.JSON(200, "OK")
|
||||
case echo.DELETE:
|
||||
if err := db.DeleteProperty(data); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return c.JSON(200, data)
|
||||
}
|
||||
@@ -1,131 +0,0 @@
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package idb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"syscall/js"
|
||||
|
||||
"github.com/hack-pad/go-indexeddb/idb"
|
||||
)
|
||||
|
||||
// Model is an interface that must be implemented by types used with Table
|
||||
type Model interface {
|
||||
Table() string
|
||||
}
|
||||
|
||||
// Table is a generic wrapper around IDB for easier database operations on a specific table
|
||||
type Table[T Model] struct {
|
||||
db *idb.Database
|
||||
dbName string
|
||||
keyPath string
|
||||
}
|
||||
|
||||
// NewTable creates a new Table instance
|
||||
func NewTable[T Model](dbName string, version uint, keyPath string) (*Table[T], error) {
|
||||
ctx := context.Background()
|
||||
factory := idb.Global()
|
||||
|
||||
var model T
|
||||
tableName := model.Table()
|
||||
|
||||
openRequest, err := factory.Open(ctx, dbName, version, func(db *idb.Database, oldVersion, newVersion uint) error {
|
||||
_, err := db.CreateObjectStore(tableName, idb.ObjectStoreOptions{
|
||||
KeyPath: js.ValueOf(keyPath),
|
||||
})
|
||||
return err
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
db, err := openRequest.Await(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Table[T]{
|
||||
db: db,
|
||||
dbName: dbName,
|
||||
keyPath: keyPath,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Insert adds a new record to the table
|
||||
func (t *Table[T]) Insert(data T) error {
|
||||
tx, err := t.db.Transaction(idb.TransactionReadWrite, data.Table())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer tx.Commit()
|
||||
|
||||
objectStore, err := tx.ObjectStore(data.Table())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
jsonData, err := json.Marshal(data)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = objectStore.Add(js.ValueOf(string(jsonData)))
|
||||
return err
|
||||
}
|
||||
|
||||
// Query retrieves a record from the table based on a key
|
||||
func (t *Table[T]) Query(key interface{}) (T, error) {
|
||||
var result T
|
||||
|
||||
tx, err := t.db.Transaction(idb.TransactionReadOnly, result.Table())
|
||||
if err != nil {
|
||||
return result, err
|
||||
}
|
||||
defer tx.Commit()
|
||||
|
||||
objectStore, err := tx.ObjectStore(result.Table())
|
||||
if err != nil {
|
||||
return result, err
|
||||
}
|
||||
|
||||
request, err := objectStore.Get(js.ValueOf(key))
|
||||
if err != nil {
|
||||
return result, err
|
||||
}
|
||||
|
||||
value, err := request.Await(context.Background())
|
||||
if err != nil {
|
||||
return result, err
|
||||
}
|
||||
|
||||
if value.IsUndefined() || value.IsNull() {
|
||||
return result, errors.New("record not found")
|
||||
}
|
||||
|
||||
err = json.Unmarshal([]byte(value.String()), &result)
|
||||
return result, err
|
||||
}
|
||||
|
||||
// Delete removes a record from the table based on a key
|
||||
func (t *Table[T]) Delete(key interface{}) error {
|
||||
var model T
|
||||
tx, err := t.db.Transaction(idb.TransactionReadWrite, model.Table())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer tx.Commit()
|
||||
|
||||
objectStore, err := tx.ObjectStore(model.Table())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = objectStore.Delete(js.ValueOf(key))
|
||||
return err
|
||||
}
|
||||
|
||||
// Close closes the database connection
|
||||
func (t *Table[T]) Close() error {
|
||||
return t.db.Close()
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
_ "github.com/ncruces/go-sqlite3/embed"
|
||||
"github.com/onsonr/sonr/internal/db/orm"
|
||||
)
|
||||
|
||||
type DBOption func(config *DBConfig)
|
||||
|
||||
func WitDir(dir string) DBOption {
|
||||
return func(config *DBConfig) {
|
||||
config.Dir = dir
|
||||
}
|
||||
}
|
||||
|
||||
func WithSecretKey(secretKey string) DBOption {
|
||||
return func(config *DBConfig) {
|
||||
config.SecretKey = secretKey
|
||||
}
|
||||
}
|
||||
|
||||
type DBConfig struct {
|
||||
Dir string
|
||||
SecretKey string
|
||||
|
||||
fileName string
|
||||
initialAccounts []*orm.Account
|
||||
initialAssets []*orm.Asset
|
||||
initialCredentials []*orm.Credential
|
||||
initialKeyshares []*orm.Keyshare
|
||||
initialPermissions []*orm.Permission
|
||||
initialProfiles []*orm.Profile
|
||||
initialProperties []*orm.Property
|
||||
}
|
||||
|
||||
func (config *DBConfig) ConnectionString() string {
|
||||
connStr := "file:"
|
||||
connStr += config.fileName
|
||||
return connStr
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||
package orm
|
||||
|
||||
type Account struct {
|
||||
Id uint `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"`
|
||||
|
||||
Name string `pkl:"name" json:"name,omitempty" param:"name"`
|
||||
|
||||
Address string `pkl:"address" json:"address,omitempty" param:"address"`
|
||||
|
||||
PublicKey string `pkl:"publicKey" json:"publicKey,omitempty" param:"publicKey"`
|
||||
|
||||
CreatedAt *string `pkl:"createdAt" json:"createdAt,omitempty" param:"createdAt"`
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||
package orm
|
||||
|
||||
type Asset struct {
|
||||
Id uint `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"`
|
||||
|
||||
Name string `pkl:"name" json:"name,omitempty" param:"name"`
|
||||
|
||||
Symbol string `pkl:"symbol" json:"symbol,omitempty" param:"symbol"`
|
||||
|
||||
Decimals int `pkl:"decimals" json:"decimals,omitempty" param:"decimals"`
|
||||
|
||||
ChainId *int `pkl:"chainId" json:"chainId,omitempty" param:"chainId"`
|
||||
|
||||
CreatedAt *string `pkl:"createdAt" json:"createdAt,omitempty" param:"createdAt"`
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||
package orm
|
||||
|
||||
type Chain struct {
|
||||
Id uint `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"`
|
||||
|
||||
Name string `pkl:"name" json:"name,omitempty" param:"name"`
|
||||
|
||||
NetworkId string `pkl:"networkId" json:"networkId,omitempty" param:"networkId"`
|
||||
|
||||
CreatedAt *string `pkl:"createdAt" json:"createdAt,omitempty" param:"createdAt"`
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||
package orm
|
||||
|
||||
type Credential struct {
|
||||
Id uint `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"`
|
||||
|
||||
Subject string `pkl:"subject" json:"subject,omitempty" param:"subject"`
|
||||
|
||||
Controller string `pkl:"controller" json:"controller,omitempty" param:"controller"`
|
||||
|
||||
AttestationType string `pkl:"attestationType" json:"attestationType,omitempty" param:"attestationType"`
|
||||
|
||||
Origin string `pkl:"origin" json:"origin,omitempty" param:"origin"`
|
||||
|
||||
CredentialId string `pkl:"credentialId" json:"credentialId,omitempty" param:"credentialId"`
|
||||
|
||||
PublicKey string `pkl:"publicKey" json:"publicKey,omitempty" param:"publicKey"`
|
||||
|
||||
Transport string `pkl:"transport" json:"transport,omitempty" param:"transport"`
|
||||
|
||||
SignCount uint `pkl:"signCount" json:"signCount,omitempty" param:"signCount"`
|
||||
|
||||
UserPresent bool `pkl:"userPresent" json:"userPresent,omitempty" param:"userPresent"`
|
||||
|
||||
UserVerified bool `pkl:"userVerified" json:"userVerified,omitempty" param:"userVerified"`
|
||||
|
||||
BackupEligible bool `pkl:"backupEligible" json:"backupEligible,omitempty" param:"backupEligible"`
|
||||
|
||||
BackupState bool `pkl:"backupState" json:"backupState,omitempty" param:"backupState"`
|
||||
|
||||
CloneWarning bool `pkl:"cloneWarning" json:"cloneWarning,omitempty" param:"cloneWarning"`
|
||||
|
||||
CreatedAt *string `pkl:"createdAt" json:"createdAt,omitempty" param:"createdAt"`
|
||||
|
||||
UpdatedAt *string `pkl:"updatedAt" json:"updatedAt,omitempty" param:"updatedAt"`
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||
package orm
|
||||
|
||||
type Keyshare struct {
|
||||
Id uint `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"`
|
||||
|
||||
Data string `pkl:"data" json:"data,omitempty" param:"data"`
|
||||
|
||||
Role int `pkl:"role" json:"role,omitempty" param:"role"`
|
||||
|
||||
CreatedAt *string `pkl:"createdAt" json:"createdAt,omitempty" param:"createdAt"`
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||
package orm
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/apple/pkl-go/pkl"
|
||||
)
|
||||
|
||||
type Orm struct {
|
||||
}
|
||||
|
||||
// LoadFromPath loads the pkl module at the given path and evaluates it into a Orm
|
||||
func LoadFromPath(ctx context.Context, path string) (ret *Orm, err error) {
|
||||
evaluator, err := pkl.NewEvaluator(ctx, pkl.PreconfiguredOptions)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
cerr := evaluator.Close()
|
||||
if err == nil {
|
||||
err = cerr
|
||||
}
|
||||
}()
|
||||
ret, err = Load(ctx, evaluator, pkl.FileSource(path))
|
||||
return ret, err
|
||||
}
|
||||
|
||||
// Load loads the pkl module at the given source and evaluates it with the given evaluator into a Orm
|
||||
func Load(ctx context.Context, evaluator pkl.Evaluator, source *pkl.ModuleSource) (*Orm, error) {
|
||||
var ret Orm
|
||||
if err := evaluator.EvaluateModule(ctx, source, &ret); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &ret, nil
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||
package orm
|
||||
|
||||
type Permission struct {
|
||||
Id uint `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"`
|
||||
|
||||
ServiceId string `pkl:"serviceId" json:"serviceId,omitempty" param:"serviceId"`
|
||||
|
||||
Grants string `pkl:"grants" json:"grants,omitempty" param:"grants"`
|
||||
|
||||
Scopes string `pkl:"scopes" json:"scopes,omitempty" param:"scopes"`
|
||||
|
||||
CreatedAt *string `pkl:"createdAt" json:"createdAt,omitempty" param:"createdAt"`
|
||||
|
||||
UpdatedAt *string `pkl:"updatedAt" json:"updatedAt,omitempty" param:"updatedAt"`
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||
package orm
|
||||
|
||||
type Profile struct {
|
||||
Id string `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"`
|
||||
|
||||
Subject string `pkl:"subject" json:"subject,omitempty" param:"subject"`
|
||||
|
||||
Controller string `pkl:"controller" json:"controller,omitempty" param:"controller"`
|
||||
|
||||
OriginUri *string `pkl:"originUri" json:"originUri,omitempty" param:"originUri"`
|
||||
|
||||
PublicMetadata *string `pkl:"publicMetadata" json:"publicMetadata,omitempty" param:"publicMetadata"`
|
||||
|
||||
PrivateMetadata *string `pkl:"privateMetadata" json:"privateMetadata,omitempty" param:"privateMetadata"`
|
||||
|
||||
CreatedAt *string `pkl:"createdAt" json:"createdAt,omitempty" param:"createdAt"`
|
||||
|
||||
UpdatedAt *string `pkl:"updatedAt" json:"updatedAt,omitempty" param:"updatedAt"`
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||
package orm
|
||||
|
||||
type Property struct {
|
||||
Id uint `pkl:"id" gorm:"primaryKey,autoIncrement" json:"id,omitempty" query:"id"`
|
||||
|
||||
ProfileId string `pkl:"profileId" json:"profileId,omitempty" param:"profileId"`
|
||||
|
||||
Key string `pkl:"key" json:"key,omitempty" param:"key"`
|
||||
|
||||
Accumulator string `pkl:"accumulator" json:"accumulator,omitempty" param:"accumulator"`
|
||||
|
||||
PropertyKey string `pkl:"propertyKey" json:"propertyKey,omitempty" param:"propertyKey"`
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||
package orm
|
||||
|
||||
import "github.com/apple/pkl-go/pkl"
|
||||
|
||||
func init() {
|
||||
pkl.RegisterMapping("orm", Orm{})
|
||||
pkl.RegisterMapping("orm#Account", Account{})
|
||||
pkl.RegisterMapping("orm#Asset", Asset{})
|
||||
pkl.RegisterMapping("orm#Chain", Chain{})
|
||||
pkl.RegisterMapping("orm#Credential", Credential{})
|
||||
pkl.RegisterMapping("orm#Profile", Profile{})
|
||||
pkl.RegisterMapping("orm#Property", Property{})
|
||||
pkl.RegisterMapping("orm#Keyshare", Keyshare{})
|
||||
pkl.RegisterMapping("orm#Permission", Permission{})
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
package orm
|
||||
|
||||
func (a *Account) Table() string {
|
||||
return "accounts"
|
||||
}
|
||||
|
||||
func (a *Asset) Table() string {
|
||||
return "assets"
|
||||
}
|
||||
|
||||
func (a *Credential) Table() string {
|
||||
return "credentials"
|
||||
}
|
||||
|
||||
func (a *Keyshare) Table() string {
|
||||
return "keyshares"
|
||||
}
|
||||
|
||||
func (a *Permission) Table() string {
|
||||
return "permissions"
|
||||
}
|
||||
|
||||
func (a *Profile) Table() string {
|
||||
return "profiles"
|
||||
}
|
||||
|
||||
func (a *Property) Table() string {
|
||||
return "properties"
|
||||
}
|
||||
Reference in New Issue
Block a user