From 223e4b9863bbeea4ce26755d3d75b468192eee8c Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 16 Nov 2024 23:47:30 -0800 Subject: [PATCH 1/3] Fix GetInactiveUsers --- models/fixtures/user.yml | 1 + models/user/user.go | 19 +++++++++++++------ models/user/user_test.go | 15 +++++++++++++++ 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/models/fixtures/user.yml b/models/fixtures/user.yml index 1044e487f8146..6150616d9c630 100644 --- a/models/fixtures/user.yml +++ b/models/fixtures/user.yml @@ -332,6 +332,7 @@ repo_admin_change_team_access: false theme: "" keep_activity_private: false + created_unix: 1730468968 - id: 10 diff --git a/models/user/user.go b/models/user/user.go index c1cb988e43dc9..74b34c89685f6 100644 --- a/models/user/user.go +++ b/models/user/user.go @@ -37,6 +37,7 @@ import ( "golang.org/x/text/runes" "golang.org/x/text/transform" "golang.org/x/text/unicode/norm" + "xorm.io/builder" ) @@ -48,19 +49,19 @@ const ( UserTypeIndividual UserType = iota // Historic reason to make it starts at 0. // UserTypeOrganization defines an organization - UserTypeOrganization + UserTypeOrganization // 1 // UserTypeUserReserved reserves a (non-existing) user, i.e. to prevent a spam user from re-registering after being deleted, or to reserve the name until the user is actually created later on - UserTypeUserReserved + UserTypeUserReserved // 2 // UserTypeOrganizationReserved reserves a (non-existing) organization, to be used in combination with UserTypeUserReserved - UserTypeOrganizationReserved + UserTypeOrganizationReserved // 3 // UserTypeBot defines a bot user - UserTypeBot + UserTypeBot // 4 // UserTypeRemoteUser defines a remote user for federated users - UserTypeRemoteUser + UserTypeRemoteUser // 5 ) const ( @@ -884,7 +885,13 @@ func UpdateUserCols(ctx context.Context, u *User, cols ...string) error { // GetInactiveUsers gets all inactive users func GetInactiveUsers(ctx context.Context, olderThan time.Duration) ([]*User, error) { - var cond builder.Cond = builder.Eq{"is_active": false} + var cond builder.Cond = builder.And( + builder.Eq{"is_active": false}, + builder.Or( // only plain user + builder.Eq{"`type`": UserTypeIndividual}, + builder.Eq{"`type`": UserTypeUserReserved}, + ), + ) if olderThan > 0 { cond = cond.And(builder.Lt{"created_unix": time.Now().Add(-olderThan).Unix()}) diff --git a/models/user/user_test.go b/models/user/user_test.go index bc1abc64512c7..6baaf8edc1b50 100644 --- a/models/user/user_test.go +++ b/models/user/user_test.go @@ -588,3 +588,18 @@ func TestDisabledUserFeatures(t *testing.T) { assert.True(t, user_model.IsFeatureDisabledWithLoginType(user, f)) } } + +func TestGetInactiveUsers(t *testing.T) { + assert.NoError(t, unittest.PrepareTestDatabase()) + + // all inactive users + // user1's createdunix is 1730468968 + users, err := user_model.GetInactiveUsers(db.DefaultContext, 0) + assert.NoError(t, err) + assert.Len(t, users, 1) + fmt.Println("ddd", time.Now().Unix()) + interval := time.Now().Unix() - 1730468968 + 3600*24 + users, err = user_model.GetInactiveUsers(db.DefaultContext, time.Duration(interval*int64(time.Second))) + assert.NoError(t, err) + assert.Len(t, users, 0) +} From 703864e92579f3b89c3ad4d2714407a5b88b56ee Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 17 Nov 2024 09:50:34 -0800 Subject: [PATCH 2/3] Fix lint --- models/user/user.go | 2 +- models/user/user_test.go | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/models/user/user.go b/models/user/user.go index 74b34c89685f6..8cb1be1000c47 100644 --- a/models/user/user.go +++ b/models/user/user.go @@ -885,7 +885,7 @@ func UpdateUserCols(ctx context.Context, u *User, cols ...string) error { // GetInactiveUsers gets all inactive users func GetInactiveUsers(ctx context.Context, olderThan time.Duration) ([]*User, error) { - var cond builder.Cond = builder.And( + cond := builder.And( builder.Eq{"is_active": false}, builder.Or( // only plain user builder.Eq{"`type`": UserTypeIndividual}, diff --git a/models/user/user_test.go b/models/user/user_test.go index 6baaf8edc1b50..6701be39a5536 100644 --- a/models/user/user_test.go +++ b/models/user/user_test.go @@ -597,7 +597,6 @@ func TestGetInactiveUsers(t *testing.T) { users, err := user_model.GetInactiveUsers(db.DefaultContext, 0) assert.NoError(t, err) assert.Len(t, users, 1) - fmt.Println("ddd", time.Now().Unix()) interval := time.Now().Unix() - 1730468968 + 3600*24 users, err = user_model.GetInactiveUsers(db.DefaultContext, time.Duration(interval*int64(time.Second))) assert.NoError(t, err) From 58f09992c1d8b80d6cee24a6d523a47114ede1a2 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 17 Nov 2024 10:21:58 -0800 Subject: [PATCH 3/3] Fix checks --- models/user/user.go | 1 - 1 file changed, 1 deletion(-) diff --git a/models/user/user.go b/models/user/user.go index 8cb1be1000c47..a2d9166291909 100644 --- a/models/user/user.go +++ b/models/user/user.go @@ -37,7 +37,6 @@ import ( "golang.org/x/text/runes" "golang.org/x/text/transform" "golang.org/x/text/unicode/norm" - "xorm.io/builder" )