From a2acd498841ef8bbe597cf29a9ff63e0ad328672 Mon Sep 17 00:00:00 2001 From: engigu Date: Sat, 6 Dec 2025 21:11:15 +0800 Subject: [PATCH] chore: opt template code --- middleware/ginlog.go | 44 +++++++++++++++++++ models/cron_messages.go | 2 +- models/send_tasks.go | 2 +- models/send_ways.go | 2 +- .../pages/cronMessages/AddCronMessages.vue | 2 +- .../messageTemplate/TemplateApiViewer.vue | 2 +- .../TemplateInstanceConfig.vue | 2 +- .../components/pages/sendTasks/AddTasks.vue | 2 +- .../components/pages/sendTasks/EditTasks.vue | 2 +- .../components/pages/sendTasks/SendTasks.vue | 2 +- web/src/util/uuid.js | 2 +- 11 files changed, 54 insertions(+), 10 deletions(-) diff --git a/middleware/ginlog.go b/middleware/ginlog.go index 65b868d..b849097 100644 --- a/middleware/ginlog.go +++ b/middleware/ginlog.go @@ -1,8 +1,10 @@ package middleware import ( + "bytes" "fmt" "math" + "strings" "net/http" "net/url" @@ -12,6 +14,23 @@ import ( "github.com/sirupsen/logrus" ) +// 需要记录响应内容的 API 路径前缀 +var logResponsePaths = []string{ + "/api/v1/message/send", + "/api/v2/message/send", +} + +// responseBodyWriter 用于捕获响应内容 +type responseBodyWriter struct { + gin.ResponseWriter + body *bytes.Buffer +} + +func (w responseBodyWriter) Write(b []byte) (int, error) { + w.body.Write(b) + return w.ResponseWriter.Write(b) +} + // LogMiddleware Logger is the logrus logger handler func LogMiddleware(notLogged ...string) gin.HandlerFunc { //hostname, err := os.Hostname() @@ -33,6 +52,24 @@ func LogMiddleware(notLogged ...string) gin.HandlerFunc { raw := c.Request.URL.RawQuery start := time.Now() + // 判断是否需要捕获响应内容 + needCaptureResponse := false + for _, logPath := range logResponsePaths { + if strings.HasPrefix(path, logPath) { + needCaptureResponse = true + break + } + } + + var bodyWriter *responseBodyWriter + if needCaptureResponse { + bodyWriter = &responseBodyWriter{ + ResponseWriter: c.Writer, + body: bytes.NewBufferString(""), + } + c.Writer = bodyWriter + } + c.Next() stop := time.Since(start) @@ -70,6 +107,13 @@ func LogMiddleware(notLogged ...string) gin.HandlerFunc { entry.Error(c.Errors.ByType(gin.ErrorTypePrivate).String()) } else { msg := fmt.Sprintf("%s [%s] %s %d %d (%dms)", clientIP, c.Request.Method, path, statusCode, dataLength, latency) + + // 如果是发送消息的 API,打印返回内容 + if needCaptureResponse && bodyWriter != nil { + responseBody := bodyWriter.body.String() + msg = fmt.Sprintf("%s | Response: %s", msg, responseBody) + } + if statusCode >= http.StatusInternalServerError { entry.Error(msg) } else if statusCode >= http.StatusBadRequest { diff --git a/models/cron_messages.go b/models/cron_messages.go index e12ada8..6d727b2 100644 --- a/models/cron_messages.go +++ b/models/cron_messages.go @@ -22,7 +22,7 @@ type CronMessages struct { func GenerateMsgUniqueID() string { newUUID := util.GenerateUniqueID() - return fmt.Sprintf("C-%s", newUUID) + return fmt.Sprintf("CM%s", newUUID) } func AddSendCronMsg( diff --git a/models/send_tasks.go b/models/send_tasks.go index 458eabd..ee58c86 100644 --- a/models/send_tasks.go +++ b/models/send_tasks.go @@ -15,7 +15,7 @@ type SendTasks struct { func GenerateTaskUniqueID() string { newUUID := util.GenerateUniqueID() - return fmt.Sprintf("T-%s", newUUID) + return fmt.Sprintf("TK%s", newUUID) } // AddSendTaskWithID 添加实例的时候添加任务 diff --git a/models/send_ways.go b/models/send_ways.go index 1041e4d..aeb64ff 100644 --- a/models/send_ways.go +++ b/models/send_ways.go @@ -17,7 +17,7 @@ type SendWays struct { func GenerateWayUniqueID() string { newUUID := util.GenerateUniqueID() - return fmt.Sprintf("W-%s", newUUID) + return fmt.Sprintf("WY%s", newUUID) } func AddSendWay(name string, auth string, wayType string, createdBy string, modifiedBy string) error { diff --git a/web/src/components/pages/cronMessages/AddCronMessages.vue b/web/src/components/pages/cronMessages/AddCronMessages.vue index c89a3cf..55210a7 100644 --- a/web/src/components/pages/cronMessages/AddCronMessages.vue +++ b/web/src/components/pages/cronMessages/AddCronMessages.vue @@ -42,7 +42,7 @@ const handleSubmit = async () => { try { let postData = { "name": formData.name, - "id": generateBizUniqueID("C"), + "id": generateBizUniqueID("CM"), "title": formData.title, "content": formData.content, "cron": formData.cron_expression, diff --git a/web/src/components/pages/messageTemplate/TemplateApiViewer.vue b/web/src/components/pages/messageTemplate/TemplateApiViewer.vue index 07668fd..664e230 100644 --- a/web/src/components/pages/messageTemplate/TemplateApiViewer.vue +++ b/web/src/components/pages/messageTemplate/TemplateApiViewer.vue @@ -153,7 +153,7 @@ export default defineComponent({ -
+

💡 使用说明

  • token 参数:需要使用加密后的 token,不能直接使用明文模板ID(安全考虑)
  • diff --git a/web/src/components/pages/messageTemplate/TemplateInstanceConfig.vue b/web/src/components/pages/messageTemplate/TemplateInstanceConfig.vue index a3a6bc7..80ed0ef 100644 --- a/web/src/components/pages/messageTemplate/TemplateInstanceConfig.vue +++ b/web/src/components/pages/messageTemplate/TemplateInstanceConfig.vue @@ -112,7 +112,7 @@ const handleAddSubmit = async () => { // 组建表单数据 let postData = { - "id": generateBizUniqueID('I'), + "id": generateBizUniqueID('IN'), "enable": 1, "template_id": props.templateData.id, "way_id": displayOptions.value[0]?.id, diff --git a/web/src/components/pages/sendTasks/AddTasks.vue b/web/src/components/pages/sendTasks/AddTasks.vue index 112ba76..9db19e1 100644 --- a/web/src/components/pages/sendTasks/AddTasks.vue +++ b/web/src/components/pages/sendTasks/AddTasks.vue @@ -25,7 +25,7 @@ const handleCancel = () => { // 添加一条任务 const handleSubmit = async () => { - const taskId = generateBizUniqueID('T'); + const taskId = generateBizUniqueID('TK'); const postData: Record = { id: taskId, name: inputValue.value.trim(), diff --git a/web/src/components/pages/sendTasks/EditTasks.vue b/web/src/components/pages/sendTasks/EditTasks.vue index 3b3c7ee..96a08b8 100644 --- a/web/src/components/pages/sendTasks/EditTasks.vue +++ b/web/src/components/pages/sendTasks/EditTasks.vue @@ -91,7 +91,7 @@ const handleClose = () => { const handleAddSubmit = async () => { // 组建表单数据 let postData = { - "id": generateBizUniqueID('I'), + "id": generateBizUniqueID('IN'), "enable": 1, "task_id": props.editData.id, "way_id": displayOptions.value[0]?.id, diff --git a/web/src/components/pages/sendTasks/SendTasks.vue b/web/src/components/pages/sendTasks/SendTasks.vue index bc8a502..ab7cad5 100644 --- a/web/src/components/pages/sendTasks/SendTasks.vue +++ b/web/src/components/pages/sendTasks/SendTasks.vue @@ -189,7 +189,7 @@ onMounted(async () => {

    新项目建议使用 消息模板 - 功能,它提供更好的内容管理和维护体验。发送任务主要用于兼容历史数据。 + 功能,它提供更好的内容管理和维护体验。发送任务主要用于兼容早期使用数据。 了解更多 → diff --git a/web/src/util/uuid.js b/web/src/util/uuid.js index 3fb718f..c1f1d46 100644 --- a/web/src/util/uuid.js +++ b/web/src/util/uuid.js @@ -18,7 +18,7 @@ function generateUniqueID() { function generateBizUniqueID(flag) { const randomString = generateRandomString(10); - return `${flag}-${randomString}`; + return `${flag}${randomString}`; } export { generateUniqueID, generateBizUniqueID };