@@ -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+
698713func (db * DB ) UpdateFailedLogin (userID uint ) error {
699714 now := time .Now ()
700715 return db .Transaction (func (tx * gorm.DB ) error {
0 commit comments