From 1ee2a82792c5d82f0e0283fdb252959bc905d14a Mon Sep 17 00:00:00 2001 From: yanweidong Date: Sun, 26 Jul 2026 18:29:36 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=BD=92=E5=B9=B6=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E4=B8=9A=E5=8A=A1=E9=80=BB=E8=BE=91=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/internal/logic/dashboard/dashboard.go | 18 -- .../internal/logic/idn_account/idn_account.go | 54 ------ .../org_delivery_point/org_delivery_point.go | 38 ---- .../logic/org_gas_station/org_gas_station.go | 60 ------- .../org_service_person/org_service_person.go | 33 ---- backend/api/internal/logic/ping/hello.go | 12 -- .../api/internal/logic/platform/platform.go | 170 ++++++++++++++++++ .../api/internal/logic/saf_event/saf_event.go | 33 ---- backend/api/internal/routers/register.go | 24 +-- backend/go.work.sum | 157 +++++----------- 10 files changed, 228 insertions(+), 371 deletions(-) delete mode 100644 backend/api/internal/logic/dashboard/dashboard.go delete mode 100644 backend/api/internal/logic/idn_account/idn_account.go delete mode 100644 backend/api/internal/logic/org_delivery_point/org_delivery_point.go delete mode 100644 backend/api/internal/logic/org_gas_station/org_gas_station.go delete mode 100644 backend/api/internal/logic/org_service_person/org_service_person.go delete mode 100644 backend/api/internal/logic/ping/hello.go create mode 100644 backend/api/internal/logic/platform/platform.go delete mode 100644 backend/api/internal/logic/saf_event/saf_event.go diff --git a/backend/api/internal/logic/dashboard/dashboard.go b/backend/api/internal/logic/dashboard/dashboard.go deleted file mode 100644 index c5d7e73..0000000 --- a/backend/api/internal/logic/dashboard/dashboard.go +++ /dev/null @@ -1,18 +0,0 @@ -// Package dashboard 提供平台总后台聚合指标。 -package dashboard - -import ( - "git.apinb.com/bsm-sdk/core/infra" - "git.apinb.com/heqiapp/platforms/backend/api/internal/models" - "github.com/gin-gonic/gin" -) - -// Overview 返回组织与安全运营的首期概览数据。 -func Overview(ctx *gin.Context) { - overview, err := models.GetDashboardOverview() - if err != nil { - infra.Response.Error(ctx, err) - return - } - infra.Response.Success(ctx, overview) -} diff --git a/backend/api/internal/logic/idn_account/idn_account.go b/backend/api/internal/logic/idn_account/idn_account.go deleted file mode 100644 index 2bae785..0000000 --- a/backend/api/internal/logic/idn_account/idn_account.go +++ /dev/null @@ -1,54 +0,0 @@ -// Package idn_account 提供用户账户最小必要查询逻辑。 -package idn_account - -import ( - "git.apinb.com/bsm-sdk/core/infra" - "git.apinb.com/bsm-sdk/core/utils" - "git.apinb.com/heqiapp/platforms/backend/api/internal/models" - "github.com/gin-gonic/gin" -) - -// AccountView 是 idn_account 的最小必要输出,手机号始终脱敏。 -type AccountView struct { - Identity string `json:"identity"` // 用户主键 - PhoneMasked string `json:"phone_masked"` // 脱敏手机号 - AccountType string `json:"account_type"` // 账户类型 - Status string `json:"status"` // 账户状态 - ServiceArea string `json:"service_area"` // 服务区域 -} - -// ListReply 是 idn_account 的标准分页响应。 -type ListReply struct { - Total int64 `json:"total"` - List []AccountView `json:"list"` -} - -// List 查询普通用户账户列表。 -func List(ctx *gin.Context) { - page := utils.String2Int(ctx.DefaultQuery("page", "1")) - size := utils.String2Int(ctx.DefaultQuery("size", "20")) - if page < 1 { - page = 1 - } - if size < 1 || size > 100 { - size = 20 - } - list, total, err := models.ListIdnAccount(page, size) - if err != nil { - infra.Response.Error(ctx, err) - return - } - views := make([]AccountView, 0, len(list)) - for _, item := range list { - views = append(views, AccountView{Identity: item.Identity.String(), PhoneMasked: maskPhone(item.Phone), AccountType: item.AccountType, Status: item.Status, ServiceArea: item.ServiceArea}) - } - infra.Response.Success(ctx, ListReply{Total: total, List: views}) -} - -// maskPhone 遵循敏感数据最小展示原则。 -func maskPhone(phone string) string { - if len(phone) < 7 { - return "***" - } - return phone[:3] + "****" + phone[len(phone)-4:] -} diff --git a/backend/api/internal/logic/org_delivery_point/org_delivery_point.go b/backend/api/internal/logic/org_delivery_point/org_delivery_point.go deleted file mode 100644 index f02dfd7..0000000 --- a/backend/api/internal/logic/org_delivery_point/org_delivery_point.go +++ /dev/null @@ -1,38 +0,0 @@ -// Package org_delivery_point 提供配送点管理查询逻辑。 -package org_delivery_point - -import ( - "git.apinb.com/bsm-sdk/core/infra" - "git.apinb.com/bsm-sdk/core/utils" - "git.apinb.com/heqiapp/platforms/backend/api/internal/models" - "github.com/gin-gonic/gin" -) - -// ListReply 是 org_delivery_point 的标准分页响应。 -type ListReply struct { - Total int64 `json:"total"` - List []models.OrgDeliveryPoint `json:"list"` -} - -// List 查询配送点分页列表。 -func List(ctx *gin.Context) { - page, size := pageSize(ctx) - list, total, err := models.ListOrgDeliveryPoint(page, size) - if err != nil { - infra.Response.Error(ctx, err) - return - } - infra.Response.Success(ctx, ListReply{Total: total, List: list}) -} - -func pageSize(ctx *gin.Context) (int, int) { - page := utils.String2Int(ctx.DefaultQuery("page", "1")) - size := utils.String2Int(ctx.DefaultQuery("size", "20")) - if page < 1 { - page = 1 - } - if size < 1 || size > 100 { - size = 20 - } - return page, size -} diff --git a/backend/api/internal/logic/org_gas_station/org_gas_station.go b/backend/api/internal/logic/org_gas_station/org_gas_station.go deleted file mode 100644 index 1839c53..0000000 --- a/backend/api/internal/logic/org_gas_station/org_gas_station.go +++ /dev/null @@ -1,60 +0,0 @@ -// Package org_gas_station 提供气站管理的 HTTP 业务逻辑。 -package org_gas_station - -import ( - "git.apinb.com/bsm-sdk/core/errcode" - "git.apinb.com/bsm-sdk/core/infra" - "git.apinb.com/bsm-sdk/core/utils" - "git.apinb.com/heqiapp/platforms/backend/api/internal/models" - "github.com/gin-gonic/gin" -) - -// CreateRequest 是创建 org_gas_station 的请求体。 -type CreateRequest struct { - StationCode string `json:"station_code" binding:"required,max=32"` - Name string `json:"name" binding:"required,max=128"` - Principal string `json:"principal" binding:"required,max=64"` - ServiceArea string `json:"service_area" binding:"required,max=128"` -} - -// ListReply 是标准分页响应。 -type ListReply struct { - Total int64 `json:"total"` - List []models.OrgGasStation `json:"list"` -} - -// Create 创建待审核气站并由数据库层保证唯一编码。 -func Create(ctx *gin.Context) { - var request CreateRequest - if err := ctx.ShouldBindJSON(&request); err != nil { - infra.Response.Error(ctx, errcode.ErrInvalidArgument) - return - } - data := models.OrgGasStation{StationCode: request.StationCode, Name: request.Name, Principal: request.Principal, ServiceArea: request.ServiceArea} - data.Identity = models.NewIdentity() - data.Status = "draft" - data.Version = 1 - if err := models.CreateOrgGasStation(&data); err != nil { - infra.Response.Error(ctx, err) - return - } - infra.Response.Success(ctx, data) -} - -// List 查询气站分页列表。 -func List(ctx *gin.Context) { - page := utils.String2Int(ctx.DefaultQuery("page", "1")) - size := utils.String2Int(ctx.DefaultQuery("size", "20")) - if page < 1 { - page = 1 - } - if size < 1 || size > 100 { - size = 20 - } - list, total, err := models.ListOrgGasStation(page, size) - if err != nil { - infra.Response.Error(ctx, err) - return - } - infra.Response.Success(ctx, ListReply{Total: total, List: list}) -} diff --git a/backend/api/internal/logic/org_service_person/org_service_person.go b/backend/api/internal/logic/org_service_person/org_service_person.go deleted file mode 100644 index 84aeb17..0000000 --- a/backend/api/internal/logic/org_service_person/org_service_person.go +++ /dev/null @@ -1,33 +0,0 @@ -// Package org_service_person 提供服务人员管理查询逻辑。 -package org_service_person - -import ( - "git.apinb.com/bsm-sdk/core/infra" - "git.apinb.com/bsm-sdk/core/utils" - "git.apinb.com/heqiapp/platforms/backend/api/internal/models" - "github.com/gin-gonic/gin" -) - -// ListReply 是 org_service_person 的标准分页响应。 -type ListReply struct { - Total int64 `json:"total"` - List []models.OrgServicePerson `json:"list"` -} - -// List 查询服务人员分页列表。 -func List(ctx *gin.Context) { - page := utils.String2Int(ctx.DefaultQuery("page", "1")) - size := utils.String2Int(ctx.DefaultQuery("size", "20")) - if page < 1 { - page = 1 - } - if size < 1 || size > 100 { - size = 20 - } - list, total, err := models.ListOrgServicePerson(page, size) - if err != nil { - infra.Response.Error(ctx, err) - return - } - infra.Response.Success(ctx, ListReply{Total: total, List: list}) -} diff --git a/backend/api/internal/logic/ping/hello.go b/backend/api/internal/logic/ping/hello.go deleted file mode 100644 index d4b99de..0000000 --- a/backend/api/internal/logic/ping/hello.go +++ /dev/null @@ -1,12 +0,0 @@ -// Package ping 提供匿名健康检查接口。 -package ping - -import ( - "git.apinb.com/bsm-sdk/core/infra" - "github.com/gin-gonic/gin" -) - -// Hello 返回 API 进程健康状态。 -func Hello(ctx *gin.Context) { - infra.Response.Success(ctx, gin.H{"service": "platform-api", "status": "ok"}) -} diff --git a/backend/api/internal/logic/platform/platform.go b/backend/api/internal/logic/platform/platform.go new file mode 100644 index 0000000..3e723b9 --- /dev/null +++ b/backend/api/internal/logic/platform/platform.go @@ -0,0 +1,170 @@ +// Package platform 汇聚平台总后台的同步 HTTP 业务逻辑。 +package platform + +import ( + "git.apinb.com/bsm-sdk/core/errcode" + "git.apinb.com/bsm-sdk/core/infra" + "git.apinb.com/bsm-sdk/core/utils" + "git.apinb.com/heqiapp/platforms/backend/api/internal/models" + "github.com/gin-gonic/gin" +) + +// PingHello 返回匿名健康状态。 +func PingHello(ctx *gin.Context) { + infra.Response.Success(ctx, gin.H{"service": "platform-api", "status": "ok"}) +} + +// DashboardOverview 返回组织与安全运营的首期概览数据。 +func DashboardOverview(ctx *gin.Context) { + overview, err := models.GetDashboardOverview() + if err != nil { + infra.Response.Error(ctx, err) + return + } + infra.Response.Success(ctx, overview) +} + +// CreateOrgGasStationRequest 是创建 org_gas_station 的请求体。 +type CreateOrgGasStationRequest struct { + StationCode string `json:"station_code" binding:"required,max=32"` + Name string `json:"name" binding:"required,max=128"` + Principal string `json:"principal" binding:"required,max=64"` + ServiceArea string `json:"service_area" binding:"required,max=128"` +} + +// OrgGasStationListReply 是 org_gas_station 的标准分页响应。 +type OrgGasStationListReply struct { + Total int64 `json:"total"` + List []models.OrgGasStation `json:"list"` +} + +// CreateOrgGasStation 创建待审核气站并由数据库层保证唯一编码。 +func CreateOrgGasStation(ctx *gin.Context) { + var request CreateOrgGasStationRequest + if err := ctx.ShouldBindJSON(&request); err != nil { + infra.Response.Error(ctx, errcode.ErrInvalidArgument) + return + } + data := models.OrgGasStation{StationCode: request.StationCode, Name: request.Name, Principal: request.Principal, ServiceArea: request.ServiceArea} + data.Identity = models.NewIdentity() + data.Status = "draft" + data.Version = 1 + if err := models.CreateOrgGasStation(&data); err != nil { + infra.Response.Error(ctx, err) + return + } + infra.Response.Success(ctx, data) +} + +// ListOrgGasStation 查询气站分页列表。 +func ListOrgGasStation(ctx *gin.Context) { + page, size := pageSize(ctx) + list, total, err := models.ListOrgGasStation(page, size) + if err != nil { + infra.Response.Error(ctx, err) + return + } + infra.Response.Success(ctx, OrgGasStationListReply{Total: total, List: list}) +} + +// OrgDeliveryPointListReply 是 org_delivery_point 的标准分页响应。 +type OrgDeliveryPointListReply struct { + Total int64 `json:"total"` + List []models.OrgDeliveryPoint `json:"list"` +} + +// ListOrgDeliveryPoint 查询配送点分页列表。 +func ListOrgDeliveryPoint(ctx *gin.Context) { + page, size := pageSize(ctx) + list, total, err := models.ListOrgDeliveryPoint(page, size) + if err != nil { + infra.Response.Error(ctx, err) + return + } + infra.Response.Success(ctx, OrgDeliveryPointListReply{Total: total, List: list}) +} + +// OrgServicePersonListReply 是 org_service_person 的标准分页响应。 +type OrgServicePersonListReply struct { + Total int64 `json:"total"` + List []models.OrgServicePerson `json:"list"` +} + +// ListOrgServicePerson 查询服务人员分页列表。 +func ListOrgServicePerson(ctx *gin.Context) { + page, size := pageSize(ctx) + list, total, err := models.ListOrgServicePerson(page, size) + if err != nil { + infra.Response.Error(ctx, err) + return + } + infra.Response.Success(ctx, OrgServicePersonListReply{Total: total, List: list}) +} + +// IdnAccountView 是 idn_account 的最小必要输出,手机号始终脱敏。 +type IdnAccountView struct { + Identity string `json:"identity"` + PhoneMasked string `json:"phone_masked"` + AccountType string `json:"account_type"` + Status string `json:"status"` + ServiceArea string `json:"service_area"` +} + +// IdnAccountListReply 是 idn_account 的标准分页响应。 +type IdnAccountListReply struct { + Total int64 `json:"total"` + List []IdnAccountView `json:"list"` +} + +// ListIdnAccount 查询普通用户账户列表。 +func ListIdnAccount(ctx *gin.Context) { + page, size := pageSize(ctx) + list, total, err := models.ListIdnAccount(page, size) + if err != nil { + infra.Response.Error(ctx, err) + return + } + views := make([]IdnAccountView, 0, len(list)) + for _, item := range list { + views = append(views, IdnAccountView{Identity: item.Identity.String(), PhoneMasked: maskPhone(item.Phone), AccountType: item.AccountType, Status: item.Status, ServiceArea: item.ServiceArea}) + } + infra.Response.Success(ctx, IdnAccountListReply{Total: total, List: views}) +} + +// SafEventListReply 是 saf_event 的标准分页响应。 +type SafEventListReply struct { + Total int64 `json:"total"` + List []models.SafEvent `json:"list"` +} + +// ListSafEvent 查询安全事件列表。 +func ListSafEvent(ctx *gin.Context) { + page, size := pageSize(ctx) + list, total, err := models.ListSafEvent(page, size) + if err != nil { + infra.Response.Error(ctx, err) + return + } + infra.Response.Success(ctx, SafEventListReply{Total: total, List: list}) +} + +// pageSize 统一约束分页参数,避免各接口出现不同边界。 +func pageSize(ctx *gin.Context) (int, int) { + page := utils.String2Int(ctx.DefaultQuery("page", "1")) + size := utils.String2Int(ctx.DefaultQuery("size", "20")) + if page < 1 { + page = 1 + } + if size < 1 || size > 100 { + size = 20 + } + return page, size +} + +// maskPhone 遵循敏感数据最小展示原则。 +func maskPhone(phone string) string { + if len(phone) < 7 { + return "***" + } + return phone[:3] + "****" + phone[len(phone)-4:] +} diff --git a/backend/api/internal/logic/saf_event/saf_event.go b/backend/api/internal/logic/saf_event/saf_event.go deleted file mode 100644 index fa17670..0000000 --- a/backend/api/internal/logic/saf_event/saf_event.go +++ /dev/null @@ -1,33 +0,0 @@ -// Package saf_event 提供安全事件查询逻辑。 -package saf_event - -import ( - "git.apinb.com/bsm-sdk/core/infra" - "git.apinb.com/bsm-sdk/core/utils" - "git.apinb.com/heqiapp/platforms/backend/api/internal/models" - "github.com/gin-gonic/gin" -) - -// ListReply 是 saf_event 的标准分页响应。 -type ListReply struct { - Total int64 `json:"total"` - List []models.SafEvent `json:"list"` -} - -// List 查询安全事件列表。 -func List(ctx *gin.Context) { - page := utils.String2Int(ctx.DefaultQuery("page", "1")) - size := utils.String2Int(ctx.DefaultQuery("size", "20")) - if page < 1 { - page = 1 - } - if size < 1 || size > 100 { - size = 20 - } - list, total, err := models.ListSafEvent(page, size) - if err != nil { - infra.Response.Error(ctx, err) - return - } - infra.Response.Success(ctx, ListReply{Total: total, List: list}) -} diff --git a/backend/api/internal/routers/register.go b/backend/api/internal/routers/register.go index 9030ce5..b09df93 100644 --- a/backend/api/internal/routers/register.go +++ b/backend/api/internal/routers/register.go @@ -5,13 +5,7 @@ import ( "fmt" "git.apinb.com/bsm-sdk/core/middleware" - "git.apinb.com/heqiapp/platforms/backend/api/internal/logic/dashboard" - "git.apinb.com/heqiapp/platforms/backend/api/internal/logic/idn_account" - "git.apinb.com/heqiapp/platforms/backend/api/internal/logic/org_delivery_point" - "git.apinb.com/heqiapp/platforms/backend/api/internal/logic/org_gas_station" - "git.apinb.com/heqiapp/platforms/backend/api/internal/logic/org_service_person" - "git.apinb.com/heqiapp/platforms/backend/api/internal/logic/ping" - "git.apinb.com/heqiapp/platforms/backend/api/internal/logic/saf_event" + "git.apinb.com/heqiapp/platforms/backend/api/internal/logic/platform" "github.com/gin-gonic/gin" ) @@ -19,18 +13,18 @@ import ( func Register(srvKey string, engine *gin.Engine) { v1Key := fmt.Sprintf("/%s/%s", srvKey, "v1") anonymous := engine.Group(v1Key) - anonymous.GET("/ping/hello", ping.Hello) + anonymous.GET("/ping/hello", platform.PingHello) protected := engine.Group(v1Key) protected.Use(middleware.JwtAuth(true)) { - protected.GET("/dashboard/overview", dashboard.Overview) + protected.GET("/dashboard/overview", platform.DashboardOverview) gasStationGroup := protected.Group("/organization/org_gas_station") - gasStationGroup.POST("", org_gas_station.Create) - gasStationGroup.GET("", org_gas_station.List) - protected.GET("/organization/org_delivery_point", org_delivery_point.List) - protected.GET("/organization/org_service_person", org_service_person.List) - protected.GET("/identity/idn_account", idn_account.List) - protected.GET("/safety/saf_event", saf_event.List) + gasStationGroup.POST("", platform.CreateOrgGasStation) + gasStationGroup.GET("", platform.ListOrgGasStation) + protected.GET("/organization/org_delivery_point", platform.ListOrgDeliveryPoint) + protected.GET("/organization/org_service_person", platform.ListOrgServicePerson) + protected.GET("/identity/idn_account", platform.ListIdnAccount) + protected.GET("/safety/saf_event", platform.ListSafEvent) } } diff --git a/backend/go.work.sum b/backend/go.work.sum index edb8416..04030d2 100644 --- a/backend/go.work.sum +++ b/backend/go.work.sum @@ -1,108 +1,49 @@ -filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= -filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -git.apinb.com/bsm-sdk/core v0.2.0 h1:/e9yqpsbKBrRgMiGpS3KX2O4qDLxo5V5GpPSLNGxEKw= -git.apinb.com/bsm-sdk/core v0.2.0/go.mod h1:E9T6Eboo/0Zb36BjkKbIgvFzq4fQ2Q8P/7y5zmYTI6Y= -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= -github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= -github.com/gabriel-vasile/mimetype v1.4.12 h1:e9hWvmLYvtp846tLHam2o++qitpguFiYCKbn0w9jyqw= -github.com/gabriel-vasile/mimetype v1.4.12/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= -github.com/gin-contrib/cors v1.7.7 h1:Oh9joP463x7Mw72vhvJ61YQm8ODh9b04YR7vsOErD0Q= -github.com/gin-contrib/cors v1.7.7/go.mod h1:K5tW0RkzJtWSiOdikXloy8VEZlgdVNpHNw8FpjUPNrE= -github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w= -github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM= -github.com/gin-gonic/gin v1.12.0 h1:b3YAbrZtnf8N//yjKeU2+MQsh2mY5htkZidOM7O0wG8= -github.com/gin-gonic/gin v1.12.0/go.mod h1:VxccKfsSllpKshkBWgVgRniFFAzFb9csfngsqANjnLc= -github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= -github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= -github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= -github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.30.1 h1:f3zDSN/zOma+w6+1Wswgd9fLkdwy06ntQJp0BBvFG0w= -github.com/go-playground/validator/v10 v10.30.1/go.mod h1:oSuBIQzuJxL//3MelwSLD5hc2Tu889bF0Idm9Dg26cM= -github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= -github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= -github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= -github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY= -github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 h1:5VipnvEpbqr2gA2VbM+nYVbkIF28c5ZQfqCBQ5g2xfk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0/go.mod h1:Hyl3n6Twe1hvtd9XUXDec4pTvgMSEixRuQKPTMH2bNs= -github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= -github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.6.0 h1:SWJzexBzPL5jb0GEsrPMLIsi/3jOo7RHlzTjcAeDrPY= -github.com/jackc/pgx/v5 v5.6.0/go.mod h1:DNZ/vlrUnhWCoFGxHAG8U2ljioxukquj7utPDgtQdTw= -github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= -github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= -github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= -github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= -github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/oklog/ulid/v2 v2.1.1 h1:suPZ4ARWLOJLegGFiZZ1dFAkqzhMjL3J1TzI+5wHz8s= -github.com/oklog/ulid/v2 v2.1.1/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ= -github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= -github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= -github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= -github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= -github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= -github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw= -github.com/quic-go/quic-go v0.59.0/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU= -github.com/redis/go-redis/v9 v9.19.0 h1:XPVaaPSnG6RhYf7p+rmSa9zZfeVAnWsH5h3lxthOm/k= -github.com/redis/go-redis/v9 v9.19.0/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA= -github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= -github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= -github.com/ugorji/go/codec v1.3.1 h1:waO7eEiFDwidsBN6agj1vJQ4AG7lh2yqXyOXqhgQuyY= -github.com/ugorji/go/codec v1.3.1/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4= -go.etcd.io/etcd/api/v3 v3.6.11 h1:XFGTgrJ8nak3kB4NgMG8t7NT+lEeuuvKQAqUHKVgkWQ= -go.etcd.io/etcd/api/v3 v3.6.11/go.mod h1:HYfTh0jyh+uFgp6gMbxJteIDYY97yMuYz85Rnw6Gy9o= -go.etcd.io/etcd/client/pkg/v3 v3.6.11 h1:e41mp315Yn3QMGPmEzCyLsMINgJXTY/dX8kM++1csxU= -go.etcd.io/etcd/client/pkg/v3 v3.6.11/go.mod h1:DysuMe/inqRyC/1tjRR6hReH/VV9Lufs27YKSKBWWJg= -go.etcd.io/etcd/client/v3 v3.6.11 h1:LAByD96VmmeuairkvdAcE0RZnrmGz/q3ceeWePo9bwc= -go.etcd.io/etcd/client/v3 v3.6.11/go.mod h1:vOTDMCo+fGPEClJqcFEFSqZ+8e7WKV7AyqJjX//HR2w= -go.mongodb.org/mongo-driver/v2 v2.5.0 h1:yXUhImUjjAInNcpTcAlPHiT7bIXhshCTL3jVBkF3xaE= -go.mongodb.org/mongo-driver/v2 v2.5.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= -go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= -go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= -go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= -golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= -golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= -golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= -golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= -golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= -google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 h1:yQugLulqltosq0B/f8l4w9VryjV+N/5gcW0jQ3N8Qec= -google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478/go.mod h1:C6ADNqOxbgdUUeRTU+LCHDPB9ttAMCTff6auwCVa4uc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ= -google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= -google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= -google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/mysql v1.6.0 h1:eNbLmNTpPpTOVZi8MMxCi2aaIm0ZpInbORNXDwyLGvg= -gorm.io/driver/mysql v1.6.0/go.mod h1:D/oCC2GWK3M/dqoLxnOlaNKmXz8WNTfcS9y5ovaSqKo= -gorm.io/driver/postgres v1.6.0 h1:2dxzU8xJ+ivvqTRph34QX+WrRaJlmfyPqXmoGVjMBa4= -gorm.io/driver/postgres v1.6.0/go.mod h1:vUw0mrGgrTK+uPHEhAdV4sfFELrByKVGnaVRkXDhtWo= -gorm.io/gorm v1.31.1 h1:7CA8FTFz/gRfgqgpeKIBcervUn3xSyPUmr6B2WXJ7kg= -gorm.io/gorm v1.31.1/go.mod h1:XyQVbO2k6YkOis7C2437jSit3SsDK72s7n7rsSHd+Gs= +cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= +cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/elastic/elastic-transport-go/v8 v8.9.0/go.mod h1:ssMTvNS2hwf7CaiGsRRsx4gQHFZ/jS/DkLcISxekWzc= +github.com/elastic/go-elasticsearch/v9 v9.4.1/go.mod h1:IKW8WkW++PW8If95XqfMffGjoFrzHCpsKmWgYk5j3fQ= +github.com/envoyproxy/go-control-plane v0.14.0/go.mod h1:NcS5X47pLl/hfqxU70yPwL9ZMkUlwlKxtAohpi2wBEU= +github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQOAOHNYMALuowAnbjjEMkkWOi6A= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= +github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= +github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI= +github.com/jordanlewis/gcassert v0.0.0-20250430164644-389ef753e22e/go.mod h1:ZybsQk6DWyN5t7An1MuPm1gtSZ1xDaTXS9ZjIOxvQrk= +github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= +github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/nats-io/nats.go v1.52.0/go.mod h1:26HypzazeOkyO3/mqd1zZd53STJN0EjCYF9Uy2ZOBno= +github.com/nats-io/nkeys v0.4.15/go.mod h1:CpMchTXC9fxA5zrMo4KpySxNjiDVvr8ANOSZdiNfUrs= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= +github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/spiffe/go-spiffe/v2 v2.6.0/go.mod h1:gm2SeUoMZEtpnzPNs2Csc0D/gX33k1xIx7lEzqblHEs= +github.com/tklauser/go-sysconf v0.4.0/go.mod h1:8mTNWyog7H+MpKijp4VmKJAd2bbYQ2zuUwkYRbUArPI= +github.com/tklauser/numcpus v0.12.0/go.mod h1:ABHeXzJnr/qqwguhClkZKT1/8VABcYrsyUiUGobwWJg= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.2.0/go.mod h1:3dlrS0iBaWKYVt2ZfA4cj48umJZ+cAEbR6/SjLA88I8= +github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= +github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.opentelemetry.io/contrib/detectors/gcp v1.42.0/go.mod h1:W9zQ439utxymRrXsUOzZbFX4JhLxXU4+ZnCt8GG7yA8= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= +golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= +golang.org/x/term v0.41.0/go.mod h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A= +golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= +gorm.io/driver/sqlite v1.6.0/go.mod h1:AO9V1qIQddBESngQUKWL9yoH93HIeA1X6V633rBwyT8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=