From 1dcf4f691cd0b60a9b9a13a81221a47123dbb1b9 Mon Sep 17 00:00:00 2001 From: jimmy Date: Sat, 10 Sep 2022 23:45:15 +1200 Subject: [PATCH] Add session store fix crud func --- api/models/db.go | 25 ++++++++----- api/test/models/db_test.go | 72 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 api/test/models/db_test.go diff --git a/api/models/db.go b/api/models/db.go index b9e7680..2ec6446 100644 --- a/api/models/db.go +++ b/api/models/db.go @@ -5,11 +5,13 @@ import ( "log" "os" + "github.com/wader/gormstore/v2" "gorm.io/driver/sqlite" "gorm.io/gorm" ) var db *gorm.DB +var store *gormstore.Store func Init() { if _, err := os.Stat("/data/database.db"); errors.Is(err, os.ErrNotExist) { @@ -35,25 +37,30 @@ func DB() *gorm.DB { return db } -func create(d interface{}) error { - return DB().Create(&d).Error +func Store() *gormstore.Store { + if store == nil { + store = gormstore.NewOptions(DB(), gormstore.Options{}, []byte(os.Getenv("HASHKEY")), []byte("BLOCKKEY")) + } + return store } -func read(d *interface{}) error { +func Create(d interface{}) error { + return DB().Create(d).Error +} + +func Read(d interface{}) error { return DB().First(d, d).Error } -func readAll(d interface{}, offset, limit int) ([]interface{}, error) { - var data []interface{} - err := DB().Offset(offset).Limit(limit).Where(&d).Find(&data).Error - return data, err +func ReadAll(d interface{}, offset, limit int) error { + return DB().Offset(offset).Limit(limit).Find(d).Error } -func update(d interface{}, where string, f interface{}) error { +func Update(d interface{}, where string, f interface{}) error { return DB().Model(d).Where(where+" = ?", f).Updates(d).Error } -func delete(d interface{}) error { +func Delete(d interface{}) error { return DB().Delete(d).Error } diff --git a/api/test/models/db_test.go b/api/test/models/db_test.go new file mode 100644 index 0000000..6a8aa3b --- /dev/null +++ b/api/test/models/db_test.go @@ -0,0 +1,72 @@ +package models_test + +import ( + "magmise/models" + "testing" +) + +type Test struct { + Name string +} + +func TestDB(t *testing.T) { + // Create table + models.DB().AutoMigrate(&models.User{}) + + user := models.User{Username: "test"} + + //Create + if err := models.Create(&user); err != nil { + t.Fatal(err) + } + + t.Log("\033[33mShould error with unique contraint\033[0m") + if err := models.Create(&user); err == nil { + t.Fatal(err) + } + + // Read + if err := models.Read(&user); err != nil { + t.Fatal(err) + } + + // Create more rows + user = models.User{Username: "test2"} + models.Create(&user) + user = models.User{Username: "test3"} + models.Create(&user) + user = models.User{Username: "test4"} + models.Create(&user) + + // Get second and third row + var users []models.User + if err := models.ReadAll(&users, 1, 2); err != nil { + t.Fatal(err) + } + if users[0].Username != "test2" { + t.Fatal("Offset failed\n", users) + } + + if len(users) != 2 { + t.Fatal("Limit failed\n", users) + } + + // Update + user.Password = "b" + if err := models.Update(&user, "username", user.Username); err != nil { + t.Fatal(err) + } + // Check Update + if err := models.Read(&user); err != nil { + t.Fatal(err) + } + if user.Password != "b" { + t.Fatal("failed update") + } + + // Delete + if err := models.Delete(&user); err != nil { + t.Fatal(err) + } + models.DB().Migrator().DropTable(&models.User{}) +}