diff --git a/Application.cfc b/Application.cfc
index 826418d..c47aa84 100644
--- a/Application.cfc
+++ b/Application.cfc
@@ -70,6 +70,10 @@
+
+
+
+
@@ -78,17 +82,56 @@
+
+
+ CREATE TABLE IF NOT EXISTS #request.logTableName# (
+ id SERIAL PRIMARY KEY,
+ action TEXT NOT NULL,
+ text TEXT,
+ request_id TEXT,
+ target_id INTEGER,
+ queued_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+ processed_at TIMESTAMP,
+ status TEXT DEFAULT 'queued'
+ )
+
+
+ UPDATE #request.logTableName#
+ SET processed_at = NOW(), status = 'done'
+ WHERE status = 'queued'
+ AND action IN ('create','update')
+ AND request_id IS NOT NULL
+ AND EXISTS (
+ SELECT 1 FROM #request.tableName#
+ WHERE test_data LIKE '%' || '[req:' || request_id || ']%'
+ )
+
+
+ UPDATE #request.logTableName#
+ SET processed_at = NOW(), status = 'done'
+ WHERE status = 'queued'
+ AND action = 'delete'
+ AND target_id IS NOT NULL
+ AND NOT EXISTS (
+ SELECT 1 FROM #request.tableName# WHERE id = target_id
+ )
+
+
+
+
+
+
-
-
+
+
@@ -96,8 +139,9 @@
-
-
+
+
+
@@ -105,7 +149,7 @@
-
+
@@ -113,10 +157,20 @@
+
+ INSERT INTO #request.logTableName# (action, text, request_id, target_id, queued_at, status)
+ VALUES (
+ ,
+ ,
+ ,
+ ,
+ NOW(),
+ 'queued'
+ )
+
-
diff --git a/query.cfm b/query.cfm
index bac82bc..eb6f652 100644
--- a/query.cfm
+++ b/query.cfm
@@ -8,58 +8,59 @@
:root { --nubes-blue: #005BFF; --nubes-dark: #1A1A1A; --nubes-grey: #F8F9FA; --nubes-border: #E5E7EB; --nubes-green: #0f9d58; --nubes-red: #d93025; }
body { font-family: 'Segoe UI', Tahoma, sans-serif; margin: 0; padding: 0; background: var(--nubes-grey); color: var(--nubes-dark); }
.header-bg { position: sticky; top: 0; z-index: 1000; background: #fff; border-bottom: 1px solid var(--nubes-border); padding: 15px 0; box-shadow: 0 2px 10px rgba(0,0,0,0.05); }
- .container { max-width: 1000px; margin: auto; padding: 0 20px; }
+ .container { max-width: 1100px; margin: auto; padding: 0 20px; }
.header-content { display: flex; align-items: center; justify-content: space-between; }
.logo { height: 40px; }
- .main-content { padding: 40px 0; }
- .card { background: #fff; padding: 32px; border-radius: 16px; box-shadow: 0 4px 20px rgba(0,0,0,0.04); }
+ .main-content { padding: 32px 0; }
+ .card { background: #fff; padding: 28px; border-radius: 16px; box-shadow: 0 4px 20px rgba(0,0,0,0.04); margin-bottom: 20px; }
.btn { display: inline-flex; align-items: center; justify-content: center; cursor: pointer; padding: 12px 24px; border: none; border-radius: 8px; font-weight: 600; font-size: 14px; }
.btn-primary { background: var(--nubes-blue); color: #fff; }
- .btn-action { padding: 12px; background: #fff; border: 1px solid var(--nubes-border); border-radius: 8px; font-size: 24px; line-height: 1; cursor: pointer; min-width: 50px; }
+ .btn-action { padding: 12px; background: #fff; border: 1px solid var(--nubes-border); border-radius: 8px; font-size: 22px; line-height: 1; cursor: pointer; min-width: 46px; }
.btn-action:hover { background: var(--nubes-grey); border-color: var(--nubes-blue); }
- .input-group { display: flex; gap: 12px; margin-bottom: 16px; }
+ .input-group { display: flex; gap: 12px; margin-bottom: 12px; }
input[type="text"] { flex-grow: 1; padding: 12px 16px; border: 1px solid var(--nubes-border); border-radius: 8px; font-size: 14px; }
table { width: 100%; border-collapse: collapse; }
- th { text-align: left; padding: 16px; font-size: 12px; text-transform: uppercase; color: #6B7280; border-bottom: 1px solid var(--nubes-border); }
- td { padding: 16px; border-bottom: 1px solid var(--nubes-border); }
+ th { text-align: left; padding: 12px; font-size: 12px; text-transform: uppercase; color: #6B7280; border-bottom: 1px solid var(--nubes-border); }
+ td { padding: 12px; border-bottom: 1px solid var(--nubes-border); vertical-align: top; }
tbody tr:nth-child(even) { background-color: #FAFBFC; }
tbody tr:hover { background-color: #F3F4F6; }
.id-cell { font-family: monospace; color: #9CA3AF; width: 60px; }
- .actions-cell { display: flex; gap: 12px; width: 130px; }
- .alert { padding: 12px 16px; border-radius: 10px; margin-bottom: 20px; font-size: 14px; }
+ .actions-cell { display: flex; gap: 10px; width: 120px; }
+ .alert { padding: 12px 16px; border-radius: 10px; margin-bottom: 16px; font-size: 14px; }
.alert-info { background: #eef4ff; color: #234; border: 1px solid #d6e3ff; }
.alert-success { background: #eef8f1; color: #1e4620; border: 1px solid #cbe6d3; }
.alert-error { background: #fdeeee; color: var(--nubes-red); border: 1px solid #f4c7c3; }
+ .badge { display: inline-block; padding: 4px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; }
+ .badge-queued { background: #eef4ff; color: #1d3b8b; }
+ .badge-done { background: #eef8f1; color: #1e4620; }
+ .small { font-size: 12px; color: #6B7280; }
+ .top-info { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
+ .link-row { display: flex; gap: 10px; align-items: center; }
+ .link-row a { color: var(--nubes-blue); text-decoration: none; font-weight: 600; }
+
+
+
+
+
+ SELECT id, action, text, request_id, target_id, queued_at, processed_at, status
+ FROM #request.logTableName#
+ ORDER BY id DESC
+ LIMIT 20
+
+
-
-
-
-
-
-
- SELECT id FROM #request.tableName# WHERE id =
-
-
-
-
-
-
+
+
+
+
-
-
- SELECT id, created_at FROM #request.tableName# WHERE test_data LIKE ORDER BY id DESC LIMIT 1
-
-
-
-
-
-
+
@@ -70,6 +71,25 @@
+
+
+
+
+
Логин / Пароль
+
#rabbitUser# / #rabbitPassword#
+
+
+
+
+
+
Очередь (лог отправки)
+
+
+
+ | ID |
+ Действие |
+ Текст |
+ Queued |
+ Processed |
+ Статус |
+
+
+
+
+
+ | #id# |
+ #uCase(action)# |
+ #HTMLEditFormat(text)# |
+ #dateTimeFormat(queued_at, "yyyy-mm-dd HH:nn:ss")# |
+ #dateTimeFormat(processed_at, "yyyy-mm-dd HH:nn:ss")#- |
+
+ #status#
+ |
+
+
+
+
+
+
+
+
База (фактические записи)
SELECT * FROM #request.tableName# ORDER BY id DESC LIMIT 20