Skip to content

Commit e29a208

Browse files
committed
update the query to created_at_before and created_at_after
1 parent c0ff163 commit e29a208

File tree

8 files changed

+87
-40
lines changed

8 files changed

+87
-40
lines changed

coderd/database/dbmem/dbmem.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5648,10 +5648,20 @@ func (q *FakeQuerier) GetUsers(_ context.Context, params database.GetUsersParams
56485648
users = usersFilteredByRole
56495649
}
56505650

5651-
if !params.CreatedAt.IsZero() {
5651+
if !params.CreatedAtBefore.IsZero() {
56525652
usersFilteredByCreatedAt := make([]database.User, 0, len(users))
56535653
for i, user := range users {
5654-
if user.CreatedAt.Equal(params.CreatedAt) {
5654+
if user.CreatedAt.Before(params.CreatedAtBefore) {
5655+
usersFilteredByCreatedAt = append(usersFilteredByCreatedAt, users[i])
5656+
}
5657+
}
5658+
users = usersFilteredByCreatedAt
5659+
}
5660+
5661+
if !params.CreatedAtAfter.IsZero() {
5662+
usersFilteredByCreatedAt := make([]database.User, 0, len(users))
5663+
for i, user := range users {
5664+
if user.CreatedAt.After(params.CreatedAtAfter) {
56555665
usersFilteredByCreatedAt = append(usersFilteredByCreatedAt, users[i])
56565666
}
56575667
}

coderd/database/modelqueries.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,8 @@ func (q *sqlQuerier) GetAuthorizedUsers(ctx context.Context, arg GetUsersParams,
390390
pq.Array(arg.RbacRole),
391391
arg.LastSeenBefore,
392392
arg.LastSeenAfter,
393-
arg.CreatedAt,
393+
arg.CreatedAtBefore,
394+
arg.CreatedAtAfter,
394395
arg.OffsetOpt,
395396
arg.LimitOpt,
396397
)

coderd/database/queries.sql.go

Lines changed: 20 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/users.sql

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,13 @@ WHERE
201201
END
202202
-- Filter by created_at
203203
AND CASE
204-
WHEN @created_at :: timestamp with time zone != '0001-01-01 00:00:00Z' THEN
205-
DATE(created_at) = DATE(@created_at)
204+
WHEN @created_at_before :: timestamp with time zone != '0001-01-01 00:00:00Z' THEN
205+
created_at <= @created_at_before
206+
ELSE true
207+
END
208+
AND CASE
209+
WHEN @created_at_after :: timestamp with time zone != '0001-01-01 00:00:00Z' THEN
210+
created_at >= @created_at_after
206211
ELSE true
207212
END
208213
-- End of filters

coderd/searchquery/search.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,13 @@ func Users(query string) (database.GetUsersParams, []codersdk.ValidationError) {
6565

6666
parser := httpapi.NewQueryParamParser()
6767
filter := database.GetUsersParams{
68-
Search: parser.String(values, "", "search"),
69-
Status: httpapi.ParseCustomList(parser, values, []database.UserStatus{}, "status", httpapi.ParseEnum[database.UserStatus]),
70-
RbacRole: parser.Strings(values, []string{}, "role"),
71-
LastSeenAfter: parser.Time3339Nano(values, time.Time{}, "last_seen_after"),
72-
LastSeenBefore: parser.Time3339Nano(values, time.Time{}, "last_seen_before"),
73-
CreatedAt: parser.Time3339Nano(values, time.Time{}, "created_at"),
68+
Search: parser.String(values, "", "search"),
69+
Status: httpapi.ParseCustomList(parser, values, []database.UserStatus{}, "status", httpapi.ParseEnum[database.UserStatus]),
70+
RbacRole: parser.Strings(values, []string{}, "role"),
71+
LastSeenAfter: parser.Time3339Nano(values, time.Time{}, "last_seen_after"),
72+
LastSeenBefore: parser.Time3339Nano(values, time.Time{}, "last_seen_before"),
73+
CreatedAtAfter: parser.Time3339Nano(values, time.Time{}, "created_at_after"),
74+
CreatedAtBefore: parser.Time3339Nano(values, time.Time{}, "created_at_before"),
7475
}
7576
parser.ErrorExcessParams(values)
7677
return filter, parser.Errors

coderd/users.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -311,15 +311,16 @@ func (api *API) GetUsers(rw http.ResponseWriter, r *http.Request) ([]database.Us
311311
}
312312

313313
userRows, err := api.Database.GetUsers(ctx, database.GetUsersParams{
314-
AfterID: paginationParams.AfterID,
315-
Search: params.Search,
316-
Status: params.Status,
317-
RbacRole: params.RbacRole,
318-
LastSeenBefore: params.LastSeenBefore,
319-
LastSeenAfter: params.LastSeenAfter,
320-
CreatedAt: params.CreatedAt,
321-
OffsetOpt: int32(paginationParams.Offset),
322-
LimitOpt: int32(paginationParams.Limit),
314+
AfterID: paginationParams.AfterID,
315+
Search: params.Search,
316+
Status: params.Status,
317+
RbacRole: params.RbacRole,
318+
LastSeenBefore: params.LastSeenBefore,
319+
LastSeenAfter: params.LastSeenAfter,
320+
CreatedAtAfter: params.CreatedAtAfter,
321+
CreatedAtBefore: params.CreatedAtBefore,
322+
OffsetOpt: int32(paginationParams.Offset),
323+
LimitOpt: int32(paginationParams.Limit),
323324
})
324325
if err != nil {
325326
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{

coderd/users_test.go

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1467,7 +1467,6 @@ func TestUsersFilter(t *testing.T) {
14671467

14681468
firstUser, err := client.User(ctx, codersdk.Me)
14691469
require.NoError(t, err, "fetch me")
1470-
createdAt := firstUser.CreatedAt
14711470

14721471
// Noon on Jan 18 is the "now" for this test for last_seen timestamps.
14731472
// All these values are equal
@@ -1657,13 +1656,34 @@ func TestUsersFilter(t *testing.T) {
16571656
},
16581657
},
16591658
{
1660-
Name: "CreatedAt",
1659+
Name: "CreatedAtBefore",
16611660
Filter: codersdk.UsersRequest{
1662-
SearchQuery: fmt.Sprintf(`created_at:%q`, createdAt.Format(time.RFC3339)),
1661+
SearchQuery: `created_at_before:"2023-01-31T23:59:59Z"`,
16631662
},
16641663
FilterF: func(_ codersdk.UsersRequest, u codersdk.User) bool {
1665-
target := time.Date(2023, 1, 18, 12, 0, 0, 0, time.UTC)
1666-
return u.CreatedAt.Equal(target)
1664+
end := time.Date(2023, 1, 31, 23, 59, 59, 0, time.UTC)
1665+
return u.CreatedAt.Before(end)
1666+
},
1667+
},
1668+
{
1669+
Name: "CreatedAtAfter",
1670+
Filter: codersdk.UsersRequest{
1671+
SearchQuery: `created_at_after:"2023-01-01T00:00:00Z"`,
1672+
},
1673+
FilterF: func(_ codersdk.UsersRequest, u codersdk.User) bool {
1674+
start := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC)
1675+
return u.CreatedAt.After(start)
1676+
},
1677+
},
1678+
{
1679+
Name: "CreatedAtRange",
1680+
Filter: codersdk.UsersRequest{
1681+
SearchQuery: `created_at_after:"2023-01-01T00:00:00Z" created_at_before:"2023-01-31T23:59:59Z"`,
1682+
},
1683+
FilterF: func(_ codersdk.UsersRequest, u codersdk.User) bool {
1684+
start := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC)
1685+
end := time.Date(2023, 1, 31, 23, 59, 59, 0, time.UTC)
1686+
return u.CreatedAt.After(start) && u.CreatedAt.Before(end)
16671687
},
16681688
},
16691689
}

docs/admin/users/index.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,8 @@ to use the Coder's filter query:
187187
- To find admin users, use the filter `role:admin`.
188188
- To find users who have not been active since July 2023:
189189
`status:active last_seen_before:"2023-07-01T00:00:00Z"`
190-
- To find users created at January 18, 2023: `created_at:"2023-01-18T00:00:00Z"`
190+
- To find users who were created between January 1 and January 18, 2023:
191+
`created_at_before:"2023-01-18T00:00:00Z" created_at_after:"2023-01-01T23:59:59Z"`
191192

192193
The following filters are supported:
193194

@@ -199,4 +200,5 @@ The following filters are supported:
199200
- `last_seen_before` and `last_seen_after` - The last time a user has used the
200201
platform (e.g. logging in, any API requests, connecting to workspaces). Uses
201202
the RFC3339Nano format.
202-
- `created_at` - The time a user was created. Uses the RFC3339Nano format.
203+
- `created_at_before` and `created_at_after` - The time a user was created. Uses
204+
the RFC3339Nano format.

0 commit comments

Comments
 (0)