Skip to content

Commit da3274a

Browse files
committed
feat: sort by last active
1 parent fb97c24 commit da3274a

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

backend/src/database/users.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,12 @@ func (db *DB) GetCurrentUsers(args *models.QueryContext, role string) ([]models.
4444
return nil, newGetRecordsDBError(err, "users")
4545
}
4646
users := make([]models.User, 0, args.PerPage)
47-
if err := tx.Order(adjustUserOrderBy(args.OrderClause("users.name_last desc"))).
47+
orderClause := adjustUserOrderBy(args.OrderClause("users.name_last desc"))
48+
if strings.Contains(orderClause, "last_login") {
49+
tx = tx.Joins("LEFT JOIN login_metrics ON login_metrics.user_id = users.id")
50+
orderClause = adjustLastLoginOrderBy(orderClause)
51+
}
52+
if err := tx.Order(orderClause).
4853
Offset(args.CalcOffset()).
4954
Limit(args.PerPage).
5055
Find(&users).
@@ -695,6 +700,16 @@ func adjustUserOrderBy(arg string) string {
695700
return arg
696701
}
697702

703+
func adjustLastLoginOrderBy(arg string) string {
704+
if strings.Contains(arg, "last_login desc") {
705+
return strings.Replace(arg, "last_login desc", "login_metrics.last_login desc NULLS LAST", 1)
706+
}
707+
if strings.Contains(arg, "last_login asc") {
708+
return strings.Replace(arg, "last_login asc", "login_metrics.last_login asc NULLS FIRST", 1)
709+
}
710+
return arg
711+
}
712+
698713
func (db *DB) UpdateFailedLogin(userID uint) error {
699714
now := time.Now()
700715
return db.Transaction(func(tx *gorm.DB) error {

frontend/src/Pages/AdminManagement.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ export default function AdminManagement() {
173173
enumType={{
174174
'Name (A-Z)': 'name_last asc',
175175
'Name (Z-A)': 'name_last desc',
176+
'Last Active (Newest)': 'last_login desc',
177+
'Last Active (Oldest)': 'last_login asc',
176178
'Account Created (Newest) ': 'created_at desc',
177179
'Account Created (Oldest) ': 'created_at asc'
178180
}}

frontend/src/Pages/StudentManagement.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,8 @@ export default function StudentManagement() {
167167
setState={setSortQuery}
168168
enumType={{
169169
...FilterResidentNames,
170+
'Last Active (Newest)': 'last_login desc',
171+
'Last Active (Oldest)': 'last_login asc',
170172
'Account Created (Newest) ': 'created_at desc',
171173
'Account Created (Oldest)': 'created_at asc'
172174
}}

0 commit comments

Comments
 (0)