From 0797588e402528097fbf208ae61f90e09730bbd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Delattre?= Date: Thu, 16 Apr 2020 17:47:18 +0200 Subject: [PATCH] Add the user's last seen date in the admin panel --- backend/models/users.go | 12 +++++++++++- frontend/js/components/admins/user.js | 4 +++- frontend/js/components/admins/userList.js | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/backend/models/users.go b/backend/models/users.go index 51c9f3a..2d7322f 100644 --- a/backend/models/users.go +++ b/backend/models/users.go @@ -4,6 +4,7 @@ import ( "database/sql" "errors" "fmt" + "time" "github.com/jmoiron/sqlx" "github.com/jmoiron/sqlx/types" @@ -25,7 +26,15 @@ const ( RETURNING *;` deleteUserQuery = `DELETE FROM users WHERE id=:id;` - getAllUsersQuery = `SELECT * FROM users order by created_at;` + getAllUsersQuery = ` + SELECT u.*, tok.last_seen + FROM users u + LEFT OUTER JOIN ( + SELECT username, MAX(last_used) AS last_seen + FROM tokens GROUP BY username + ) AS tok + ON u.name = tok.username; + ` getPolochonUsersQuery = `SELECT * FROM users WHERE polochon_id = $1;` ) @@ -51,6 +60,7 @@ type User struct { PolochonID sql.NullString `json:"polochon_id" db:"polochon_id"` PolochonActivated bool `json:"polochon_activated" db:"polochon_activated"` Polochon *Polochon `json:"polochon"` + LastSeen *time.Time `json:"last_seen" db:"last_seen"` } // NewPapiClient creates a new papi client for the given user diff --git a/frontend/js/components/admins/user.js b/frontend/js/components/admins/user.js index 461f504..6d47286 100644 --- a/frontend/js/components/admins/user.js +++ b/frontend/js/components/admins/user.js @@ -1,4 +1,5 @@ import React from "react"; +import moment from "moment"; import PropTypes from "prop-types"; import { useSelector } from "react-redux"; @@ -7,10 +8,10 @@ import { UserEdit } from "./userEdit"; export const User = ({ id }) => { const user = useSelector((state) => state.admin.users.get(id)); const polochon = user.polochon; + const lastSeen = moment(user.last_seen, "YYYY-MM-DDTHH:mm:ss.SZ"); return ( - {user.id} {user.name} { } > + {lastSeen.isValid() ? lastSeen.fromNow() : "-"} diff --git a/frontend/js/components/admins/userList.js b/frontend/js/components/admins/userList.js index 1932311..9485a69 100644 --- a/frontend/js/components/admins/userList.js +++ b/frontend/js/components/admins/userList.js @@ -24,13 +24,13 @@ export const UserList = () => { - +
# Name Activated Admin Polochon URL Polochon token Polochon activatedLast seen Actions