From 38bc4cb0a0431b7ecd088250fef13084e309b951 Mon Sep 17 00:00:00 2001 From: Maksim Eltyshev Date: Wed, 30 Oct 2024 22:28:25 +0100 Subject: [PATCH] ref: Refactoring --- docker-compose-dev.yml | 12 +++--- docker-compose.yml | 3 +- server/.env.sample | 2 +- server/api/helpers/actions/create-one.js | 41 +++++++++++-------- server/api/helpers/cards/delete-one.js | 24 +++++------ .../helpers/utils/send-telegram-message.js | 9 ++-- server/config/custom.js | 1 + 7 files changed, 53 insertions(+), 39 deletions(-) diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index a7304bd2..2b65a90c 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -68,11 +68,13 @@ services: # - SLACK_BOT_TOKEN= # - SLACK_CHANNEL_ID= + # - GOOGLE_CHAT_WEBHOOK_URL= + # - TELEGRAM_BOT_TOKEN= # - TELEGRAM_CHAT_ID= # - TELEGRAM_THREAD_ID= working_dir: /app - command: ['sh', '-c', 'npm run start'] + command: ["sh", "-c", "npm run start"] depends_on: postgres: condition: service_healthy @@ -105,7 +107,7 @@ services: # - DEFAULT_ADMIN_NAME=Demo Demo # - DEFAULT_ADMIN_USERNAME=demo working_dir: /app - command: ['sh', '-c', 'npm run db:init'] + command: ["sh", "-c", "npm run db:init"] volumes: - ./server:/app - /app/node_modules @@ -122,10 +124,10 @@ services: POSTGRES_USER: user POSTGRES_PASSWORD: password ports: - - '5432:5432' + - "5432:5432" restart: unless-stopped healthcheck: - test: ['CMD-SHELL', 'pg_isready -U user -d planka_db'] + test: ["CMD-SHELL", "pg_isready -U user -d planka_db"] interval: 10s timeout: 5s retries: 5 @@ -133,7 +135,7 @@ services: proxy: image: nginx:alpine ports: - - '3000:80' + - "3000:80" volumes: - ./config/development/nginx.conf:/etc/nginx/nginx.conf depends_on: diff --git a/docker-compose.yml b/docker-compose.yml index cd8dbe03..ed615697 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -74,6 +74,7 @@ services: # - SLACK_BOT_TOKEN= # - SLACK_CHANNEL_ID= + # - GOOGLE_CHAT_WEBHOOK_URL= # - TELEGRAM_BOT_TOKEN= @@ -92,7 +93,7 @@ services: - POSTGRES_DB=planka - POSTGRES_HOST_AUTH_METHOD=trust healthcheck: - test: ['CMD-SHELL', 'pg_isready -U postgres -d planka'] + test: ["CMD-SHELL", "pg_isready -U postgres -d planka"] interval: 10s timeout: 5s retries: 5 diff --git a/server/.env.sample b/server/.env.sample index 53d9cd05..b03819bb 100644 --- a/server/.env.sample +++ b/server/.env.sample @@ -65,13 +65,13 @@ SECRET_KEY=notsecretkey # SLACK_BOT_TOKEN= # SLACK_CHANNEL_ID= + # GOOGLE_CHAT_WEBHOOK_URL= # TELEGRAM_BOT_TOKEN= # TELEGRAM_CHAT_ID= # TELEGRAM_THREAD_ID= - ## Do not edit this TZ=UTC diff --git a/server/api/helpers/actions/create-one.js b/server/api/helpers/actions/create-one.js index 7e034448..d01e9176 100644 --- a/server/api/helpers/actions/create-one.js +++ b/server/api/helpers/actions/create-one.js @@ -14,7 +14,10 @@ const valuesValidator = (value) => { return true; }; -const buildAndSendMessage = async (card, action, actorUser, send) => { +const truncateString = (string, maxLength = 30) => + string.length > maxLength ? `${string.substring(0, 30)}...` : string; + +const buildAndSendMarkdownMessage = async (card, action, actorUser, send) => { const cardLink = `<${sails.config.custom.baseUrl}/cards/${card.id}|${card.name}>`; let markdown; @@ -28,6 +31,7 @@ const buildAndSendMessage = async (card, action, actorUser, send) => { break; case Action.Types.COMMENT_CARD: + // TODO: truncate text? markdown = `*${actorUser.name}* commented on ${cardLink}:\n>${action.data.text}`; break; @@ -38,7 +42,7 @@ const buildAndSendMessage = async (card, action, actorUser, send) => { await send(markdown); }; -const buildAndSendMessageForTelegramBot = async (card, action, actorUser, send) => { +const buildAndSendHtmlMessage = async (card, action, actorUser, send) => { const cardLink = `${card.name}`; let html; @@ -52,15 +56,14 @@ const buildAndSendMessageForTelegramBot = async (card, action, actorUser, send) break; case Action.Types.COMMENT_CARD: { - const commentedText = - action.data.text.length > 30 ? `${action.data.text.substring(0, 30)}...` : action.data.text; - html = `${actorUser.name} commented on ${cardLink}: ${commentedText}`; + html = `${actorUser.name} commented on ${cardLink}:\n${truncateString(action.data.text)}`; break; } default: return; } + await send(html); }; @@ -142,11 +145,25 @@ module.exports = { ); if (sails.config.custom.slackBotToken) { - buildAndSendMessage(values.card, action, values.user, sails.helpers.utils.sendSlackMessage); + buildAndSendMarkdownMessage( + values.card, + action, + values.user, + sails.helpers.utils.sendSlackMessage, + ); } - if (sails.config.custom.telegramChatId) { - buildAndSendMessageForTelegramBot( + if (sails.config.custom.googleChatWebhookUrl) { + buildAndSendMarkdownMessage( + values.card, + action, + values.user, + sails.helpers.utils.sendGoogleChatMessage, + ); + } + + if (sails.config.custom.telegramBotToken) { + buildAndSendHtmlMessage( values.card, action, values.user, @@ -154,14 +171,6 @@ module.exports = { ); } - if (sails.config.custom.googleChatWebhookUrl) { - buildAndSendMessage( - values.card, - action, - values.user, - sails.helpers.utils.sendGoogleChatMessage, - ); - } return action; }, }; diff --git a/server/api/helpers/cards/delete-one.js b/server/api/helpers/cards/delete-one.js index 2f69d616..8f271e86 100644 --- a/server/api/helpers/cards/delete-one.js +++ b/server/api/helpers/cards/delete-one.js @@ -1,8 +1,8 @@ -const buildAndSendMessage = async (card, actorUser, send) => { +const buildAndSendMarkdownMessage = async (card, actorUser, send) => { await send(`*${card.name}* was deleted by ${actorUser.name}`); }; -const buildAndSendMessageForTelegramBot = async (card, actorUser, send) => { +const buildAndSendHtmlMessage = async (card, actorUser, send) => { await send(`${card.name} was deleted by ${actorUser.name}`); }; @@ -60,19 +60,19 @@ module.exports = { }); if (sails.config.custom.slackBotToken) { - buildAndSendMessage(card, inputs.actorUser, sails.helpers.utils.sendSlackMessage); - } - - if (sails.config.custom.telegramChatId) { - buildAndSendMessageForTelegramBot( - card, - inputs.actorUser, - sails.helpers.utils.sendTelegramMessage, - ); + buildAndSendMarkdownMessage(card, inputs.actorUser, sails.helpers.utils.sendSlackMessage); } if (sails.config.custom.googleChatWebhookUrl) { - buildAndSendMessage(card, inputs.actorUser, sails.helpers.utils.sendGoogleChatMessage); + buildAndSendMarkdownMessage( + card, + inputs.actorUser, + sails.helpers.utils.sendGoogleChatMessage, + ); + } + + if (sails.config.custom.telegramBotToken) { + buildAndSendHtmlMessage(card, inputs.actorUser, sails.helpers.utils.sendTelegramMessage); } } diff --git a/server/api/helpers/utils/send-telegram-message.js b/server/api/helpers/utils/send-telegram-message.js index 11206c53..489ef3a6 100644 --- a/server/api/helpers/utils/send-telegram-message.js +++ b/server/api/helpers/utils/send-telegram-message.js @@ -1,4 +1,4 @@ -const POST_MESSAGE_API_URL = (telegramBotToken) => +const buildSendMessageApiUrl = (telegramBotToken) => `https://api.telegram.org/bot${telegramBotToken}/sendMessage`; module.exports = { @@ -8,6 +8,7 @@ module.exports = { required: true, }, }, + async fn(inputs) { const headers = { 'Content-Type': 'application/json; charset=utf-8', @@ -25,7 +26,7 @@ module.exports = { let response; try { - response = await fetch(POST_MESSAGE_API_URL(sails.config.custom.telegramBotToken), { + response = await fetch(buildSendMessageApiUrl(sails.config.custom.telegramBotToken), { headers, method: 'POST', body: JSON.stringify(body), @@ -36,8 +37,8 @@ module.exports = { } if (!response.ok) { - const responseErrorJson = await response.json(); - sails.log.error(`Error sending to Telegram: ${responseErrorJson.description}`); + const responseJson = await response.json(); + sails.log.error(`Error sending to Telegram: ${responseJson.description}`); } }, }; diff --git a/server/config/custom.js b/server/config/custom.js index d9ac4e1f..164996db 100644 --- a/server/config/custom.js +++ b/server/config/custom.js @@ -82,6 +82,7 @@ module.exports.custom = { slackBotToken: process.env.SLACK_BOT_TOKEN, slackChannelId: process.env.SLACK_CHANNEL_ID, + googleChatWebhookUrl: process.env.GOOGLE_CHAT_WEBHOOK_URL, telegramBotToken: process.env.TELEGRAM_BOT_TOKEN,