diff --git a/backend/app/services/tenant.go b/backend/app/services/tenant.go index 32aa88e..6c81aeb 100644 --- a/backend/app/services/tenant.go +++ b/backend/app/services/tenant.go @@ -65,8 +65,3 @@ func (t *tenant) SetUserRole(ctx context.Context, tenantID, userID int64, role . } return nil } - -// Users -func (t *tenant) Users(ctx context.Context, tenantID int64) ([]*models.User, int64, error) { - return nil, 0, nil -} diff --git a/backend/app/services/user.go b/backend/app/services/user.go index 20dd489..d52ee8d 100644 --- a/backend/app/services/user.go +++ b/backend/app/services/user.go @@ -5,6 +5,7 @@ import ( "quyun/v2/app/requests" "quyun/v2/database/models" + "quyun/v2/pkg/consts" "github.com/pkg/errors" "go.ipao.vip/gen" @@ -34,16 +35,23 @@ func (t *user) FindByUsername(ctx context.Context, username string) (*models.Use } func (t *user) Create(ctx context.Context, user *models.User) (*models.User, error) { - if err := user.EncryptPassword(ctx); err != nil { - return nil, errors.Wrap(err, "encrypt user password failed") - } - if err := user.Create(ctx); err != nil { return nil, errors.Wrapf(err, "Create user failed, %s", user.Username) } return user, nil } +// SetStatus +func (t *user) SetStatus(ctx context.Context, userID int64, status consts.UserStatus) error { + m, err := t.FindByID(ctx, userID) + if err != nil { + return err + } + + m.Status = status + return m.Save(ctx) +} + type UserPageFilter struct { requests.Pagination requests.SortQueryFilter diff --git a/backend/database/.transform.yaml b/backend/database/.transform.yaml index cfe0699..984f49f 100644 --- a/backend/database/.transform.yaml +++ b/backend/database/.transform.yaml @@ -40,3 +40,5 @@ field_relate: table: users pivot: tenant_users json: users + join_foreign_key: tenant_id + join_references: user_id diff --git a/backend/database/models/tenants.gen.go b/backend/database/models/tenants.gen.go index 43674eb..f0ddca8 100644 --- a/backend/database/models/tenants.gen.go +++ b/backend/database/models/tenants.gen.go @@ -28,7 +28,7 @@ type Tenant struct { ExpiredAt time.Time `gorm:"column:expired_at;type:timestamp with time zone" json:"expired_at"` CreatedAt time.Time `gorm:"column:created_at;type:timestamp with time zone;not null;default:now()" json:"created_at"` UpdatedAt time.Time `gorm:"column:updated_at;type:timestamp with time zone;not null;default:now()" json:"updated_at"` - Users []*User `gorm:"many2many:tenant_users" json:"users,omitempty"` + Users []*User `gorm:"joinForeignKey:TenantID;joinReferences:UserID;many2many:tenant_users" json:"users,omitempty"` } // Quick operations without importing query package diff --git a/backend/database/models/tenants.go b/backend/database/models/tenants.go new file mode 100644 index 0000000..5c96555 --- /dev/null +++ b/backend/database/models/tenants.go @@ -0,0 +1,12 @@ +package models + +import ( + "go.ipao.vip/gen/types" + "gorm.io/gorm" +) + +// BeforeCreate +func (m *Tenant) BeforeCreate(tx *gorm.DB) error { + m.UUID = types.NewUUIDv4() + return nil +} diff --git a/backend/database/models/users.go b/backend/database/models/users.go index 510802d..fd15cd4 100644 --- a/backend/database/models/users.go +++ b/backend/database/models/users.go @@ -15,20 +15,17 @@ func (m *User) ComparePassword(ctx context.Context, password string) bool { return err == nil } -func (m *User) EncryptPassword(ctx context.Context) error { - bytes, err := bcrypt.GenerateFromPassword([]byte(m.Password), bcrypt.DefaultCost) - if err != nil { - return err - } - m.Password = string(bytes) - return nil -} - func (m *User) HasRole(ctx context.Context, role consts.Role) bool { return lo.Contains(m.Roles, role) } // BeforeCreate func (m *User) BeforeCreate(tx *gorm.DB) error { - return m.EncryptPassword(tx.Statement.Context) + bytes, err := bcrypt.GenerateFromPassword([]byte(m.Password), bcrypt.DefaultCost) + if err != nil { + return err + } + m.Password = string(bytes) + + return nil }