Skip to content

feat(operation-record): add filter API params and CE metadata endpoints#637

Open
LordofAvernus wants to merge 1 commit into
mainfrom
feat/operation-record-filter-880
Open

feat(operation-record): add filter API params and CE metadata endpoints#637
LordofAvernus wants to merge 1 commit into
mainfrom
feat/operation-record-filter-880

Conversation

@LordofAvernus

@LordofAvernus LordofAvernus commented Jun 11, 2026

Copy link
Copy Markdown
Collaborator

User description

Summary

  • Extend operation record list/export query fields and storage filters
  • Add CE stubs for type/action metadata routes and wire DMS controller routes

Related

  • actiontech/dms-ee#880
  • Parent: actiontech/sqle-ee#2635
  • EE counterpart: actiontech/dms-ee PR (feat/operation-record-filter-880 → main-ee)

Test plan

  • CI lint + test pass on main
  • Merge before dms-ee PR (CE auto-sync to main-ee)

Made with Cursor


Description

  • 更新操作记录查询参数及过滤字段

  • 增加操作类型、操作动作和操作用户名称接口

  • 新增CE模式下操作记录元数据支持

  • 调整控制器、路由及JWT中间件配置


Diagram Walkthrough

flowchart LR
  A["更新查询过滤参数"]
  B["新增操作类型/动作接口"]
  C["新增操作记录元数据(CE)支持"]
  D["调整路由与JWT中间件"]
  E["扩展数据库过滤逻辑"]
  A --> B
  B --> C
  C --> D
  D --> E
Loading

File Walkthrough

Relevant files
Enhancement
7 files
operation_record.go
更新查询请求字段与接口文档                                                                                       
+58/-5   
dms_controller.go
调整控制器逻辑并新增多个操作记录接口                                                                             
+104/-67
operation_record_metadata_ce.go
新增CE模式操作记录元数据接口实现                                                                               
+17/-0   
router.go
更新路由配置并添加新接口路由                                                                                     
+59/-84 
operation_record.go
更新过滤选项及业务逻辑处理                                                                                       
+11/-2   
operation_record_ce.go
添加GetOperationUserNameList接口stub实现                                             
+4/-0     
operation_record.go
扩展数据库过滤逻辑与新增查询唯一操作用户名方法                                                                   
+63/-11 

Extend operation record list/export query fields and storage filters.
Add CE stubs for type/action metadata routes and wire DMS controller routes.

Refs actiontech/dms-ee#880
@github-actions

Copy link
Copy Markdown

PR Reviewer Guide 🔍

⏱️ Estimated effort to review: 4 🔵🔵🔵🔵⚪
🧪 No relevant tests
🔒 No security concerns identified
⚡ Recommended focus areas for review

模糊查询逻辑

在操作记录过滤函数中,对模糊查询条件的处理存在逻辑不一致的问题:当用户名和操作内容相等时,会使用一个联合的OR查询;如果二者不相等,则分别添加条件。这可能导致用户在输入不同搜索词时,得到意外的查询结果。建议仔细确认是否需要同时合并两个条件或分别处理二者。

if opt.FuzzySearchOperateUserName != "" &&
	opt.FuzzySearchOperateUserName == opt.FuzzySearchOperateContent {
	kw := "%" + opt.FuzzySearchOperateUserName + "%"
	db = db.Where(
		"(operation_user_name LIKE ? OR operation_req_ip LIKE ? OR operation_i18n_content LIKE ?)",
		kw, kw, kw,
	)

@github-actions

Copy link
Copy Markdown

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
General
重构JWT跳过逻辑

建议将JWT路径跳过逻辑重构为一个独立的辅助函数,以减少重复代码和提高可读性,同时解决多个TODO待统一处理的问题。这样可以减少潜在的遗漏和维护风险。

internal/apiserver/service/router.go [378-392]

-if strings.HasSuffix(c.Request().RequestURI, dmsV1.SessionRouterGroup) ||
-    strings.HasPrefix(c.Request().RequestURI, "/v1/dms/sessions/refresh" /* TODO 使用统一方法skip */) ||
-    strings.HasPrefix(c.Request().RequestURI, "/v1/dms/oauth2" /* TODO 使用统一方法skip */) ||
-    strings.HasPrefix(c.Request().RequestURI, "/v1/dms/configurations/login/tips" /* TODO 使用统一方法skip */) ||
-    strings.HasPrefix(c.Request().RequestURI, "/v1/dms/personalization/logo") ||
-    strings.HasPrefix(c.Request().RequestURI, "/v1/dms/configurations/license" /* TODO 使用统一方法skip */) ||
-    strings.HasPrefix(c.Request().RequestURI, "/v1/dms/users/verify_user_login" /* TODO 使用统一方法skip */) ||
-    strings.HasPrefix(c.Request().RequestURI, "/v1/dms/configurations/sms/send_code" /* TODO 使用统一方法skip */) ||
-    strings.HasPrefix(c.Request().RequestURI, "/v1/dms/configurations/sms/verify_code" /* TODO 使用统一方法skip */) ||
-    !(strings.HasPrefix(c.Request().RequestURI, dmsV1.CurrentGroupVersion) ||
-        strings.HasPrefix(c.Request().RequestURI, dmsV2.CurrentGroupVersion)) &&
-        !strings.HasPrefix(c.Request().RequestURI, sqlWorkbenchService.SQL_WORKBENCH_URL) {
-    logger.Debugf("skipper url jwt check: %v", c.Request().RequestURI)
-    return true
+func shouldSkipJWT(uri string) bool {
+    skipPaths := []string{
+        dmsV1.SessionRouterGroup,
+        "/v1/dms/sessions/refresh",
+        "/v1/dms/oauth2",
+        "/v1/dms/configurations/login/tips",
+        "/v1/dms/personalization/logo",
+        "/v1/dms/configurations/license",
+        "/v1/dms/users/verify_user_login",
+        "/v1/dms/configurations/sms/send_code",
+        "/v1/dms/configurations/sms/verify_code",
+    }
+    for _, path := range skipPaths {
+        if strings.HasPrefix(uri, path) || strings.HasSuffix(uri, path) {
+            return true
+        }
+    }
+    if !(strings.HasPrefix(uri, dmsV1.CurrentGroupVersion) || strings.HasPrefix(uri, dmsV2.CurrentGroupVersion)) &&
+        !strings.HasPrefix(uri, sqlWorkbenchService.SQL_WORKBENCH_URL) {
+        return true
+    }
+    return false
 }
 
+// 使用辅助函数判断
+echojwt.WithConfig(echojwt.Config{
+    Skipper: func(c echo.Context) bool {
+        logger := log.NewHelper(log.With(pkgLog.NewKLogWrapper(s.logger), "middleware", "jwt"))
+        if shouldSkipJWT(c.Request().RequestURI) {
+            logger.Debugf("skipper url jwt check: %v", c.Request().RequestURI)
+            return true
+        }
+        return false
+    },
+    SigningKey:  dmsV1.JwtSigningKey,
+    TokenLookup: "cookie:dms-token,header:Authorization:Bearer ",
+})
+
Suggestion importance[1-10]: 7

__

Why: 该建议通过将JWT路径跳过判断逻辑提取到独立辅助函数中,提高了代码的可读性和可维护性,尽管功能未发生根本性改变,但对未来减少TODO遗漏有积极作用。

Medium
理顺模糊查询逻辑


建议检查并理顺模糊搜索逻辑,确认FuzzySearchOperateUserNameFuzzySearchOperateContent是否应分别独立执行过滤或合并处理。当前的判断条件可能导致逻辑混淆,建议使用更清晰的条件组合以保证查询结果的准确性。

internal/dms/storage/operation_record.go [52-67]

-if opt.FuzzySearchOperateUserName != "" &&
-    opt.FuzzySearchOperateUserName == opt.FuzzySearchOperateContent {
-    kw := "%" + opt.FuzzySearchOperateUserName + "%"
-    db = db.Where(
-        "(operation_user_name LIKE ? OR operation_req_ip LIKE ? OR operation_i18n_content LIKE ?)",
-        kw, kw, kw,
-    )
-} else {
-    if opt.FuzzySearchOperateUserName != "" {
+if opt.FuzzySearchOperateUserName != "" || opt.FuzzySearchOperateContent != "" {
+    if opt.FuzzySearchOperateUserName != "" && opt.FuzzySearchOperateContent != "" &&
+       opt.FuzzySearchOperateUserName == opt.FuzzySearchOperateContent {
         kw := "%" + opt.FuzzySearchOperateUserName + "%"
-        db = db.Where("(operation_user_name LIKE ? OR operation_req_ip LIKE ?)", kw, kw)
-    }
-    if opt.FuzzySearchOperateContent != "" {
-        db = db.Where("operation_i18n_content LIKE ?", "%"+opt.FuzzySearchOperateContent+"%")
+        db = db.Where(
+            "(operation_user_name LIKE ? OR operation_req_ip LIKE ? OR operation_i18n_content LIKE ?)",
+            kw, kw, kw,
+        )
+    } else {
+        if opt.FuzzySearchOperateUserName != "" {
+            kw := "%" + opt.FuzzySearchOperateUserName + "%"
+            db = db.Where("(operation_user_name LIKE ? OR operation_req_ip LIKE ?)", kw, kw)
+        }
+        if opt.FuzzySearchOperateContent != "" {
+            db = db.Where("operation_i18n_content LIKE ?", "%"+opt.FuzzySearchOperateContent+"%")
+        }
     }
 }
Suggestion importance[1-10]: 6

__

Why: 该建议旨在明确FuzzySearchOperateUserNameFuzzySearchOperateContent的过滤逻辑,确保查询条件更清晰且能准确返回结果,对代码的可读性和正确性有一定改善。

Low

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant