[MM-56206] Allow for proper paging and sorting (#25726)
Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
485ae6ae4e
Коммит
5c061a6f75
@@ -2297,17 +2297,28 @@ func (us SqlUserStore) GetUserReport(filter *model.UserReportOptions) ([]*model.
|
||||
Select(selectColumns...).
|
||||
From("Users u").
|
||||
LeftJoin("Status s ON s.UserId = u.Id").
|
||||
Where(sq.Or{
|
||||
sq.Gt{filter.SortColumn: filter.LastSortColumnValue},
|
||||
sq.And{
|
||||
sq.Eq{filter.SortColumn: filter.LastSortColumnValue},
|
||||
sq.Gt{"u.Id": filter.LastUserId},
|
||||
},
|
||||
}).
|
||||
Where(sq.Expr("u.Id NOT IN (SELECT UserId FROM Bots)")).
|
||||
GroupBy("u.Id").
|
||||
OrderBy(sortColumnValue, "u.Id")
|
||||
|
||||
if (filter.Direction == "up" && !filter.SortDesc) || (filter.Direction == "down" && filter.SortDesc) {
|
||||
query = query.Where(sq.Or{
|
||||
sq.Lt{filter.SortColumn: filter.FromColumnValue},
|
||||
sq.And{
|
||||
sq.Eq{filter.SortColumn: filter.FromColumnValue},
|
||||
sq.Lt{"u.Id": filter.FromId},
|
||||
},
|
||||
})
|
||||
} else {
|
||||
query = query.Where(sq.Or{
|
||||
sq.Gt{filter.SortColumn: filter.FromColumnValue},
|
||||
sq.And{
|
||||
sq.Eq{filter.SortColumn: filter.FromColumnValue},
|
||||
sq.Gt{"u.Id": filter.FromId},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
if filter.PageSize > 0 {
|
||||
query = query.Limit(uint64(filter.PageSize))
|
||||
}
|
||||
|
||||
@@ -6321,11 +6321,62 @@ func testGetUserReport(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||
t.Run("should return correct paging", func(t *testing.T) {
|
||||
userReport, err := ss.User().GetUserReport(&model.UserReportOptions{
|
||||
ReportingBaseOptions: model.ReportingBaseOptions{
|
||||
SortColumn: "Username",
|
||||
PageSize: 50,
|
||||
LastSortColumnValue: u2.Username,
|
||||
SortColumn: "Username",
|
||||
Direction: "down",
|
||||
PageSize: 50,
|
||||
FromColumnValue: u2.Username,
|
||||
FromId: u2.Id,
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, userReport)
|
||||
require.Equal(t, 1, len(userReport))
|
||||
|
||||
require.NotNil(t, userReport[0])
|
||||
require.Equal(t, u3.Username, userReport[0].Username)
|
||||
|
||||
userReport, err = ss.User().GetUserReport(&model.UserReportOptions{
|
||||
ReportingBaseOptions: model.ReportingBaseOptions{
|
||||
SortColumn: "Username",
|
||||
SortDesc: true,
|
||||
Direction: "down",
|
||||
PageSize: 50,
|
||||
FromColumnValue: u2.Username,
|
||||
FromId: u2.Id,
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, userReport)
|
||||
require.Equal(t, 1, len(userReport))
|
||||
|
||||
require.NotNil(t, userReport[0])
|
||||
require.Equal(t, u1.Username, userReport[0].Username)
|
||||
|
||||
userReport, err = ss.User().GetUserReport(&model.UserReportOptions{
|
||||
ReportingBaseOptions: model.ReportingBaseOptions{
|
||||
SortColumn: "Username",
|
||||
Direction: "up",
|
||||
PageSize: 50,
|
||||
FromColumnValue: u2.Username,
|
||||
FromId: u2.Id,
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, userReport)
|
||||
require.Equal(t, 1, len(userReport))
|
||||
|
||||
require.NotNil(t, userReport[0])
|
||||
require.Equal(t, u1.Username, userReport[0].Username)
|
||||
|
||||
userReport, err = ss.User().GetUserReport(&model.UserReportOptions{
|
||||
ReportingBaseOptions: model.ReportingBaseOptions{
|
||||
SortColumn: "Username",
|
||||
SortDesc: true,
|
||||
Direction: "up",
|
||||
PageSize: 50,
|
||||
FromColumnValue: u2.Username,
|
||||
FromId: u2.Id,
|
||||
},
|
||||
LastUserId: u2.Id,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, userReport)
|
||||
|
||||
Ссылка в новой задаче
Block a user