poc of functions
This commit is contained in:
89
internal/valkeydb/db.go
Normal file
89
internal/valkeydb/db.go
Normal file
@@ -0,0 +1,89 @@
|
||||
package valkeydb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/redis/go-redis/v9"
|
||||
)
|
||||
|
||||
type DbItem map[string]any
|
||||
|
||||
type ValkeyDB struct {
|
||||
client *redis.Client
|
||||
name string
|
||||
}
|
||||
|
||||
func NewValkeyDB(client *redis.Client, dbName string) *ValkeyDB {
|
||||
return &ValkeyDB{
|
||||
client: client,
|
||||
name: dbName,
|
||||
}
|
||||
}
|
||||
|
||||
func (db *ValkeyDB) GetName() string {
|
||||
return db.name
|
||||
}
|
||||
|
||||
type Table[T any] struct {
|
||||
Name string
|
||||
db *ValkeyDB
|
||||
}
|
||||
|
||||
func NewTable[T any](db *ValkeyDB, tableName string) *Table[T] {
|
||||
return &Table[T]{
|
||||
Name: fmt.Sprintf("%s:%s", db.GetName(), tableName),
|
||||
db: db,
|
||||
}
|
||||
}
|
||||
|
||||
func (t *Table[T]) createItemHash(id string) string {
|
||||
return fmt.Sprintf("%s:%s", t.Name, id)
|
||||
}
|
||||
|
||||
func (t *Table[T]) createNewId() (string, string) {
|
||||
newId := uuid.New().String()
|
||||
hash := t.createItemHash(newId)
|
||||
return hash, newId
|
||||
}
|
||||
|
||||
func (t *Table[T]) Insert(ctx context.Context, item *T) (string, error) {
|
||||
hash, newId := t.createNewId()
|
||||
jItem, err := json.Marshal(t)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
cmd := t.db.client.HSet(ctx, hash, "$", string(jItem))
|
||||
if cmd.Err() != nil {
|
||||
return "", err
|
||||
}
|
||||
return newId, nil
|
||||
}
|
||||
|
||||
func (t *Table[T]) Get(ctx context.Context, id string) (*T, error) {
|
||||
hash := t.createItemHash(id)
|
||||
cmd := t.db.client.HGet(ctx, hash, "$")
|
||||
err := cmd.Err()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var res T
|
||||
err = json.Unmarshal([]byte(cmd.Val()), &res)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &res, nil
|
||||
}
|
||||
|
||||
func (t *Table[T]) Remove(ctx context.Context, id string) error {
|
||||
hash := t.createItemHash(id)
|
||||
cmd := t.db.client.HDel(ctx, hash)
|
||||
err := cmd.Err()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user