11import { NextFunction , Request , Response } from "express" ;
22import { Controller } from "./controller.js" ;
3+ import { getDbClient } from "../../server/utils/db.js" ;
34
45export class UsersController extends Controller {
56
67 public static async get ( request : Request , response : Response , next : NextFunction ) {
78 const currentPath = request . path ;
89
910 try {
11+ const user = ( request as any ) . user ;
12+ if ( ! user || user . role !== "admin" ) {
13+ const usersData = {
14+ ...Controller . defaultConfig ,
15+ title : `Users Management - ${ Controller . defaultConfig . title } ` ,
16+ page : "users" ,
17+ currentPath,
18+ users : [ ] ,
19+ usersError : "Admin access required."
20+ } ;
21+
22+ response . status ( 403 ) . render ( "layouts/main" , usersData ) ;
23+ return ;
24+ }
25+
26+ const sql = getDbClient ( ) ;
27+ const usersResult = await sql `
28+ SELECT
29+ id, username, email, name, avatar, role,
30+ is_active, last_login_at, created_at, updated_at
31+ FROM users
32+ ORDER BY created_at DESC
33+ ` ;
34+
35+ const users = usersResult . map ( ( userRow : any ) => ( {
36+ id : userRow . id ,
37+ username : userRow . username ,
38+ email : userRow . email ,
39+ name : userRow . name ,
40+ avatar : userRow . avatar ,
41+ role : userRow . role ,
42+ is_active : userRow . is_active ,
43+ last_login_at : userRow . last_login_at ,
44+ created_at : userRow . created_at ,
45+ updated_at : userRow . updated_at
46+ } ) ) ;
47+
1048 // Render users page
1149 const usersData = {
1250 ...Controller . defaultConfig ,
1351 title : `Users Management - ${ Controller . defaultConfig . title } ` ,
1452 page : 'users' ,
15- currentPath
53+ currentPath,
54+ users,
55+ usersError : ""
1656 } ;
1757
1858 response . render ( 'layouts/main' , usersData ) ;
@@ -25,7 +65,8 @@ export class UsersController extends Controller {
2565 title : `Users Management - ${ Controller . defaultConfig . title } ` ,
2666 page : 'users' ,
2767 currentPath,
28- error : 'Failed to load users page'
68+ users : [ ] ,
69+ usersError : 'Failed to load users page'
2970 } ;
3071
3172 response . render ( 'layouts/main' , usersData ) ;
0 commit comments