From 6e9304e291379e47d31eb44ea6c84167d3b0f7d9 Mon Sep 17 00:00:00 2001 From: Abram Lawendy <28400414+dark06@users.noreply.github.com> Date: Mon, 3 Feb 2025 11:58:45 +0100 Subject: [PATCH 1/4] Add user enums "admin" and "user" --- main_test.go | 4 +++- models.go | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/main_test.go b/main_test.go index 60a388f7..f47fc909 100644 --- a/main_test.go +++ b/main_test.go @@ -9,9 +9,11 @@ import ( // TEST_DRIVERS: sqlite, mysql, postgres, sqlserver func TestGORM(t *testing.T) { - user := User{Name: "jinzhu"} + user := User{Name: "jinzhu", UserType: ADMIN} + user2 := User{Name: "jinzhu2", UserType: USER} DB.Create(&user) + DB.Create(&user2) var result User if err := DB.First(&result, user.ID).Error; err != nil { diff --git a/models.go b/models.go index 692a6842..2659fa8e 100644 --- a/models.go +++ b/models.go @@ -11,6 +11,13 @@ import ( // He works in a Company (belongs to), he has a Manager (belongs to - single-table), and also managed a Team (has many - single-table) // He speaks many languages (many to many) and has many friends (many to many - single-table) // His pet also has one Toy (has one - polymorphic) +type UserType string + +const ( + ADMIN UserType = "admin" + USER UserType = "user" +) + type User struct { gorm.Model Name string @@ -27,6 +34,7 @@ type User struct { Languages []Language `gorm:"many2many:UserSpeak"` Friends []*User `gorm:"many2many:user_friends"` Active bool + UserType UserType `gorm:"type:enum('admin', 'user');default:'user'"` } type Account struct { From abfd37bc736e53850886cfd86444857c2c0f9b63 Mon Sep 17 00:00:00 2001 From: Abram Lawendy <28400414+dark06@users.noreply.github.com> Date: Mon, 3 Feb 2025 12:00:12 +0100 Subject: [PATCH 2/4] enable workflow --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5ba5bbe3..2aaec947 100644 --- a/README.md +++ b/README.md @@ -44,3 +44,4 @@ We are using the following configuration run your code (GORM's latest master bra We have prepared some structs with relationships in [https://github.com/go-gorm/playground/blob/master/models.go](https://github.com/go-gorm/playground/blob/master/models.go) that you can use for your tests ## Happy Hacking! + From e272433d30655e359b002e704064991a6555d1a8 Mon Sep 17 00:00:00 2001 From: Abram Lawendy <28400414+dark06@users.noreply.github.com> Date: Mon, 3 Feb 2025 12:12:44 +0100 Subject: [PATCH 3/4] disable drop table from run migrations --- db.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/db.go b/db.go index ccab03ed..f3384bf7 100644 --- a/db.go +++ b/db.go @@ -89,10 +89,10 @@ func RunMigrations() { DB.Migrator().DropTable("user_friends", "user_speaks") - if err = DB.Migrator().DropTable(allModels...); err != nil { - log.Printf("Failed to drop table, got error %v\n", err) - os.Exit(1) - } + // if err = DB.Migrator().DropTable(allModels...); err != nil { + // log.Printf("Failed to drop table, got error %v\n", err) + // os.Exit(1) + // } if err = DB.AutoMigrate(allModels...); err != nil { log.Printf("Failed to auto migrate, but got error %v\n", err) From eb0116bf7053504d44509d29122b4a35b29cb9a8 Mon Sep 17 00:00:00 2001 From: Abram Lawendy <28400414+dark06@users.noreply.github.com> Date: Mon, 3 Feb 2025 12:17:00 +0100 Subject: [PATCH 4/4] now extend the UserTypes by adding "viewer" --- .github/workflows/tests.yml | 6 +++--- main_test.go | 2 ++ models.go | 3 ++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index e3ea1970..ef39f832 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -35,7 +35,7 @@ jobs: run: GORM_DIALECT=sqlite ./test.sh mysql: - needs: sqlite + # needs: sqlite strategy: matrix: dbversion: ['mysql:latest'] # 'mysql:5.7', 'mysql:5.6' @@ -79,7 +79,7 @@ jobs: run: GORM_ENABLE_CACHE=true GORM_DIALECT=mysql GORM_DSN="gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&parseTime=True" ./test.sh postgres: - needs: sqlite + # needs: sqlite strategy: matrix: dbversion: ['postgres:latest'] # 'postgres:11', 'postgres:10' @@ -123,7 +123,7 @@ jobs: run: GORM_ENABLE_CACHE=true GORM_DIALECT=postgres GORM_DSN="user=gorm password=gorm dbname=gorm host=localhost port=9920 sslmode=disable TimeZone=Asia/Shanghai" ./test.sh sqlserver: - needs: sqlite + # needs: sqlite strategy: matrix: go: ['1.21'] diff --git a/main_test.go b/main_test.go index f47fc909..7287aea4 100644 --- a/main_test.go +++ b/main_test.go @@ -11,9 +11,11 @@ import ( func TestGORM(t *testing.T) { user := User{Name: "jinzhu", UserType: ADMIN} user2 := User{Name: "jinzhu2", UserType: USER} + user3 := User{Name: "jinzhu2", UserType: VIEWER} DB.Create(&user) DB.Create(&user2) + DB.Create(&user3) var result User if err := DB.First(&result, user.ID).Error; err != nil { diff --git a/models.go b/models.go index 2659fa8e..cf1ed26c 100644 --- a/models.go +++ b/models.go @@ -16,6 +16,7 @@ type UserType string const ( ADMIN UserType = "admin" USER UserType = "user" + VIEWER UserType = "viewer" ) type User struct { @@ -34,7 +35,7 @@ type User struct { Languages []Language `gorm:"many2many:UserSpeak"` Friends []*User `gorm:"many2many:user_friends"` Active bool - UserType UserType `gorm:"type:enum('admin', 'user');default:'user'"` + UserType UserType `gorm:"type:enum('admin', 'user', 'viewer');default:'user'"` } type Account struct {