From 4bc1e5806a5d6ab6b87199dbb366c4ae54823701 Mon Sep 17 00:00:00 2001
From: alex <alex@alexloehr.net>
Date: Thu, 15 May 2025 21:14:43 +0000
Subject: [PATCH] adding REST routes

---
 lib/db.js |   19 ++++++++++++++-----
 app.js    |   22 ++++++++++++++++++++++
 tst.js    |    2 ++
 3 files changed, 38 insertions(+), 5 deletions(-)

diff --git a/app.js b/app.js
new file mode 100644
index 0000000..c2eef5e
--- /dev/null
+++ b/app.js
@@ -0,0 +1,22 @@
+const fastify = require('fastify')({
+   logger: true
+})
+const db = require("./lib/db")
+
+/////////////////////////////////////////////////////////////////////////
+
+fastify.get('/api/users', async function (req, res) {
+   const {offset, limit} = req.query
+   const users = await db.getUsers(offset, limit)
+   return res.send(users)
+})
+
+/////////////////////////////////////////////////////////////////////////
+
+fastify.listen({ port: 4101 }, function (err, address) {
+   if (err) {
+      fastify.log.error(err)
+      process.exit(1)
+   }
+   // Server is now listening on ${address}
+})
diff --git a/lib/db.js b/lib/db.js
index 3ff3fc7..61b297f 100644
--- a/lib/db.js
+++ b/lib/db.js
@@ -27,7 +27,7 @@
 
 /////////////////////////////////////////////////////////////////////////
 
-async function getUsers (limit = 10, offset = 0) {
+async function getUsers (offset = 0, limit = 10) {
    const sel = `usr_id, login, firstname, lastname, gender, email, institution, street, city, zipcode, country, department, active`
    // TODO user defined fields
 
@@ -40,13 +40,20 @@
        OFFSET ${offset}
       `
    )
-   return results
+   const count = await getUserCount()
+   return {
+      total: count,
+      offset, limit,
+      data: results,
+   }
 }
 
 async function getUserCount () {
    const pool = await poolP
    const [results, fields] = await pool.query(
-      `SELECT COUNT(*) FROM ilias.usr_data AS ud WHERE login REGEXP '^[0-9]+$'`
+      `SELECT COUNT(*)
+       FROM ilias.usr_data AS ud
+       WHERE login REGEXP '^[0-9]+$'`
    )
    return results[0]["COUNT(*)"]
 }
@@ -59,7 +66,8 @@
    const [results, fields] = await pool.query(
       `SELECT ${sel}
        FROM ilias.usr_data AS ud
-       WHERE login = '${login}' AND login REGEXP '^[0-9]+$'`
+       WHERE login = '${login}'
+         AND login REGEXP '^[0-9]+$'`
    )
    return results
 }
@@ -72,7 +80,8 @@
    const [results, fields] = await pool.query(
       `SELECT ${sel}
        FROM ilias.usr_data AS ud
-       WHERE usr_id = '${userId}' AND login REGEXP '^[0-9]+$'`
+       WHERE usr_id = '${userId}'
+         AND login REGEXP '^[0-9]+$'`
    )
    return results
 }
diff --git a/tst.js b/tst.js
index daaa8c5..fc30d66 100644
--- a/tst.js
+++ b/tst.js
@@ -19,9 +19,11 @@
    const user2 = await db.getUserByUserId(317)
    console.log("user2", user2)
 
+   const start = new Date()
    const users = await db.getUsers(10,0)
    const users2 = users.map(({usr_id,login,firstname,lastname,email,institution}) => ({usr_id,login,firstname,lastname,institution}))
    console.table(users2)
+   console.log(new Date() - start + "ms")
 
    const count = await db.getUserCount()
    console.log("count",count)

--
Gitblit v1.8.0