diff --git a/server/db/db.go b/server/db/db.go index 5f35cc9..79a5af2 100644 --- a/server/db/db.go +++ b/server/db/db.go @@ -5,6 +5,7 @@ import ( "github.com/authorizerdev/authorizer/server/constants" "github.com/authorizerdev/authorizer/server/enum" + "github.com/google/uuid" "gorm.io/driver/mysql" "gorm.io/driver/postgres" "gorm.io/driver/sqlite" @@ -18,7 +19,7 @@ type Manager interface { GetUsers() ([]User, error) GetUserByEmail(email string) (User, error) GetUserByID(email string) (User, error) - UpdateVerificationTime(verifiedAt int64, id uint) error + UpdateVerificationTime(verifiedAt int64, id uuid.UUID) error AddVerification(verification VerificationRequest) (VerificationRequest, error) GetVerificationByToken(token string) (VerificationRequest, error) DeleteToken(email string) error diff --git a/server/db/roles.go b/server/db/roles.go index 2506ad0..cb9c5b2 100644 --- a/server/db/roles.go +++ b/server/db/roles.go @@ -1,15 +1,31 @@ package db -import "log" +import ( + "log" + + "github.com/google/uuid" + "gorm.io/gorm" + "gorm.io/gorm/clause" +) type Role struct { - ID uint `gorm:"primaryKey"` - Role string + ID uuid.UUID `gorm:"type:uuid;"` + Role string `gorm:"unique"` +} + +func (r *Role) BeforeCreate(tx *gorm.DB) (err error) { + r.ID = uuid.New() + + return } // SaveRoles function to save roles func (mgr *manager) SaveRoles(roles []Role) error { - res := mgr.db.Create(&roles) + res := mgr.db.Clauses( + clause.OnConflict{ + OnConstraint: "authorizer_roles_role_key", + DoNothing: true, + }).Create(&roles) if res.Error != nil { log.Println(`Error saving roles`) return res.Error diff --git a/server/db/user.go b/server/db/user.go index 8af9409..d16143d 100644 --- a/server/db/user.go +++ b/server/db/user.go @@ -4,11 +4,13 @@ import ( "log" "time" + "github.com/google/uuid" + "gorm.io/gorm" "gorm.io/gorm/clause" ) type User struct { - ID uint `gorm:"primaryKey"` + ID uuid.UUID `gorm:"type:uuid;"` FirstName string LastName string Email string `gorm:"unique"` @@ -21,6 +23,12 @@ type User struct { Roles string } +func (u *User) BeforeCreate(tx *gorm.DB) (err error) { + u.ID = uuid.New() + + return +} + // SaveUser function to add user even with email conflict func (mgr *manager) SaveUser(user User) (User, error) { result := mgr.db.Clauses( @@ -42,7 +50,7 @@ func (mgr *manager) UpdateUser(user User) (User, error) { result := mgr.db.Clauses( clause.OnConflict{ UpdateAll: true, - Columns: []clause.Column{{Name: "id"}}, + Columns: []clause.Column{{Name: "email"}}, }).Create(&user) if result.Error != nil { @@ -85,7 +93,7 @@ func (mgr *manager) GetUserByID(id string) (User, error) { return user, nil } -func (mgr *manager) UpdateVerificationTime(verifiedAt int64, id uint) error { +func (mgr *manager) UpdateVerificationTime(verifiedAt int64, id uuid.UUID) error { user := &User{ ID: id, } diff --git a/server/db/verificationRequests.go b/server/db/verificationRequests.go index c99fe1d..18a4ba1 100644 --- a/server/db/verificationRequests.go +++ b/server/db/verificationRequests.go @@ -3,12 +3,14 @@ package db import ( "log" + "github.com/google/uuid" + "gorm.io/gorm" "gorm.io/gorm/clause" ) type VerificationRequest struct { - ID uint `gorm:"primaryKey"` - Token string `gorm:"index"` + ID uuid.UUID `gorm:"type:uuid;"` + Token string `gorm:"index"` Identifier string ExpiresAt int64 CreatedAt int64 `gorm:"autoCreateTime"` @@ -16,6 +18,12 @@ type VerificationRequest struct { Email string `gorm:"unique"` } +func (v *VerificationRequest) BeforeCreate(tx *gorm.DB) (err error) { + v.ID = uuid.New() + + return +} + // AddVerification function to add verification record func (mgr *manager) AddVerification(verification VerificationRequest) (VerificationRequest, error) { result := mgr.db.Clauses(clause.OnConflict{