From 35080aea2dec959d583eb1540be47697a9ab42e8 Mon Sep 17 00:00:00 2001 From: sagitchu <601096721@qq.com> Date: Sat, 6 Jun 2026 19:14:06 +0800 Subject: [PATCH] feat(flow): expose forward owner metadata --- go-backend/internal/store/repo/repository_flow.go | 9 ++++++++- .../internal/store/repo/repository_flow_batch_test.go | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/go-backend/internal/store/repo/repository_flow.go b/go-backend/internal/store/repo/repository_flow.go index 7393548..d468841 100644 --- a/go-backend/internal/store/repo/repository_flow.go +++ b/go-backend/internal/store/repo/repository_flow.go @@ -11,6 +11,8 @@ import ( type FlowUploadForwardMeta struct { ForwardID int64 + UserID int64 + UserTunnelID int64 TunnelID int64 TrafficRatio float64 TunnelFlow int64 @@ -59,6 +61,8 @@ func (r *Repository) GetFlowUploadForwardMetas(forwardIDs []int64) (map[int64]Fl type row struct { ForwardID int64 `gorm:"column:forward_id"` + UserID int64 `gorm:"column:user_id"` + UserTunnelID int64 `gorm:"column:user_tunnel_id"` TunnelID int64 `gorm:"column:tunnel_id"` TrafficRatio float64 `gorm:"column:traffic_ratio"` TunnelFlow int64 `gorm:"column:tunnel_flow"` @@ -68,8 +72,9 @@ func (r *Repository) GetFlowUploadForwardMetas(forwardIDs []int64) (map[int64]Fl for _, chunk := range chunkFlowUploadForwardIDs(ids) { var rows []row err := r.db.Table("forward AS f"). - Select("f.id AS forward_id, f.tunnel_id AS tunnel_id, t.traffic_ratio AS traffic_ratio, t.flow AS tunnel_flow"). + Select("f.id AS forward_id, f.user_id AS user_id, COALESCE(ut.id, 0) AS user_tunnel_id, f.tunnel_id AS tunnel_id, t.traffic_ratio AS traffic_ratio, t.flow AS tunnel_flow"). Joins("LEFT JOIN tunnel t ON t.id = f.tunnel_id"). + Joins("LEFT JOIN user_tunnel ut ON ut.user_id = f.user_id AND ut.tunnel_id = f.tunnel_id"). Where("f.id IN ?", chunk). Scan(&rows).Error if err != nil { @@ -84,6 +89,8 @@ func (r *Repository) GetFlowUploadForwardMetas(forwardIDs []int64) (map[int64]Fl } out[row.ForwardID] = FlowUploadForwardMeta{ ForwardID: row.ForwardID, + UserID: row.UserID, + UserTunnelID: row.UserTunnelID, TunnelID: row.TunnelID, TrafficRatio: row.TrafficRatio, TunnelFlow: row.TunnelFlow, diff --git a/go-backend/internal/store/repo/repository_flow_batch_test.go b/go-backend/internal/store/repo/repository_flow_batch_test.go index 1f055ae..928a729 100644 --- a/go-backend/internal/store/repo/repository_flow_batch_test.go +++ b/go-backend/internal/store/repo/repository_flow_batch_test.go @@ -64,7 +64,7 @@ func TestGetFlowUploadForwardMetasAndApplyFlowUploadDeltasBatch(t *testing.T) { if err != nil { t.Fatalf("get metas: %v", err) } - if metas[20].TunnelID != 1 || metas[20].TrafficRatio != 2 || metas[20].TunnelFlow != 3 { + if metas[20].UserID != 2 || metas[20].UserTunnelID != 10 || metas[20].TunnelID != 1 || metas[20].TrafficRatio != 2 || metas[20].TunnelFlow != 3 { t.Fatalf("unexpected meta for forward 20: %#v", metas[20]) } if _, ok := metas[99]; ok { @@ -106,7 +106,7 @@ func TestGetFlowUploadForwardMetasKeepsForwardsWhenTunnelRowMissing(t *testing.T if !ok { t.Fatalf("expected metadata for forward with missing tunnel row") } - if meta.ForwardID != 25 || meta.TunnelID != 99 || meta.TrafficRatio != 1 || meta.TunnelFlow != 1 { + if meta.ForwardID != 25 || meta.UserID != 2 || meta.UserTunnelID != 0 || meta.TunnelID != 99 || meta.TrafficRatio != 1 || meta.TunnelFlow != 1 { t.Fatalf("unexpected fallback meta: %#v", meta) } }