diff --git a/server.js b/server.js index 97b16bb..65064c2 100644 --- a/server.js +++ b/server.js @@ -14,6 +14,9 @@ const path = require("path"); const VERSION = "1.0.0"; const TABLE_NAME = process.env.TABLE_NAME || "crud_items"; +// SERVICE_NAME — какое приложение добавило строку (колонка created_by). +// Задаётся в json_env манифеста для каждого сервиса (flask / lucee / nodejs). +const SERVICE_NAME = process.env.SERVICE_NAME || "nodejs"; const PORT = process.env.PORT || 3000; const pool = new Pool({ @@ -32,15 +35,26 @@ app.set("view engine", "ejs"); app.set("views", path.join(__dirname, "views")); // --- Инициализация БД --- +// Таблица выставочная: кроме id/value — две метки: created_at (когда добавлено) +// и created_by (какое приложение добавило). ALTER ... IF NOT EXISTS досыпает +// колонки в таблицу, созданную прошлой версией приложения, не теряя данные. async function initDB() { const client = await pool.connect(); try { await client.query(` CREATE TABLE IF NOT EXISTS ${TABLE_NAME} ( - id SERIAL PRIMARY KEY, - value TEXT NOT NULL DEFAULT '' + id SERIAL PRIMARY KEY, + value TEXT NOT NULL DEFAULT '', + created_at TIMESTAMPTZ NOT NULL DEFAULT now(), + created_by TEXT NOT NULL DEFAULT '' ) `); + await client.query( + `ALTER TABLE ${TABLE_NAME} ADD COLUMN IF NOT EXISTS created_at TIMESTAMPTZ NOT NULL DEFAULT now()` + ); + await client.query( + `ALTER TABLE ${TABLE_NAME} ADD COLUMN IF NOT EXISTS created_by TEXT NOT NULL DEFAULT ''` + ); } finally { client.release(); } @@ -52,14 +66,14 @@ app.get("/", async (req, res) => { let editRow = null; if (req.query.edit) { const result = await pool.query( - `SELECT id, value FROM ${TABLE_NAME} WHERE id = $1`, + `SELECT id, value, created_at, created_by FROM ${TABLE_NAME} WHERE id = $1`, [parseInt(req.query.edit)] ); if (result.rows.length > 0) editRow = result.rows[0]; } const result = await pool.query( - `SELECT id, value FROM ${TABLE_NAME} ORDER BY id` + `SELECT id, value, created_at, created_by FROM ${TABLE_NAME} ORDER BY id` ); res.render("index", { @@ -78,7 +92,11 @@ app.post("/", async (req, res) => { const { action, value, id } = req.body; if (action === "create") { - await pool.query(`INSERT INTO ${TABLE_NAME} (value) VALUES ($1)`, [value || ""]); + // created_at ставит СУБД (DEFAULT now()), created_by — имя этого сервиса + await pool.query( + `INSERT INTO ${TABLE_NAME} (value, created_by) VALUES ($1, $2)`, + [value || "", SERVICE_NAME] + ); } else if (action === "update") { await pool.query(`UPDATE ${TABLE_NAME} SET value = $1 WHERE id = $2`, [ value || "", diff --git a/views/index.ejs b/views/index.ejs index 2472a23..5dbd98e 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -23,7 +23,7 @@ - + @@ -33,6 +33,8 @@ + +
IDVALUEIDVALUEДОБАВЛЕНОКЕМ
<%= row.id %> <%= row.value %><%= row.created_at ? new Date(row.created_at).toLocaleString('ru-RU') : '' %><%= row.created_by %> ✏️