From 2a87055b6245c0f1f5c3628a28fc0cafb27636ed Mon Sep 17 00:00:00 2001 From: apefuu Date: Thu, 19 Sep 2024 15:37:13 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=8D=E5=BF=85?= =?UTF-8?q?=E8=A6=81=E7=9A=84Service=E5=8F=AF=E8=A7=81=E6=80=A7=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0Apple=20M1=E3=80=81M2=E8=8A=AF=E7=89=87Debug?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=E7=9A=84=E5=85=BC=E5=AE=B9=E6=80=A7=E9=97=AE?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/guide-zh-CN/start-issue.md | 26 ++++++++++++++++++++++ server/internal/logic/admin/cash.go | 4 ++-- server/internal/logic/admin/credits_log.go | 4 ++-- server/internal/logic/admin/dept.go | 4 ++-- server/internal/logic/admin/member.go | 4 ++-- server/internal/logic/admin/member_post.go | 4 ++-- server/internal/logic/admin/menu.go | 4 ++-- server/internal/logic/admin/monitor.go | 4 ++-- server/internal/logic/admin/notice.go | 4 ++-- server/internal/logic/admin/order.go | 4 ++-- server/internal/logic/admin/post.go | 4 ++-- server/internal/logic/admin/role.go | 4 ++-- server/internal/logic/admin/site.go | 4 ++-- 13 files changed, 50 insertions(+), 24 deletions(-) diff --git a/docs/guide-zh-CN/start-issue.md b/docs/guide-zh-CN/start-issue.md index 4434817..c856e21 100644 --- a/docs/guide-zh-CN/start-issue.md +++ b/docs/guide-zh-CN/start-issue.md @@ -65,5 +65,31 @@ Error: connect ECONNREFUSED ::1:8000 - 服务端没有启动 - `.\wen\.env.development`中的`VITE_PROXY`配置的服务器地址或端口与实际不一致 +### 四、Debug相关 + +如果Debug不能正常运行,请手动更换Goland调试工具路径 + +首先安装GO最新调试工具(注意是master分支) +```shell +go install github.com/go-delve/delve/cmd/dlv@master +``` +或 +```shell +git clone https://github.com/go-delve/delve +cd delve +go install github.com/go-delve/delve/cmd/dlv +``` +依次打开Goland对应配置 +```text +Toolbar->Help->Edit Customer Properties +``` +```properties +dlv.path=/${your path}/go/bin/dlv +``` +重启Goland + +- 服务端没有启动 +- `.\wen\.env.development`中的`VITE_PROXY`配置的服务器地址或端口与实际不一致 + diff --git a/server/internal/logic/admin/cash.go b/server/internal/logic/admin/cash.go index 9e6faba..95527fc 100644 --- a/server/internal/logic/admin/cash.go +++ b/server/internal/logic/admin/cash.go @@ -27,12 +27,12 @@ import ( type sAdminCash struct{} -func NewAdminCash() *sAdminCash { +func newAdminCash() *sAdminCash { return &sAdminCash{} } func init() { - service.RegisterAdminCash(NewAdminCash()) + service.RegisterAdminCash(newAdminCash()) } // View 获取指定提现信息 diff --git a/server/internal/logic/admin/credits_log.go b/server/internal/logic/admin/credits_log.go index 3f5c61f..caf3240 100644 --- a/server/internal/logic/admin/credits_log.go +++ b/server/internal/logic/admin/credits_log.go @@ -29,12 +29,12 @@ import ( type sAdminCreditsLog struct{} -func NewAdminCreditsLog() *sAdminCreditsLog { +func newAdminCreditsLog() *sAdminCreditsLog { return &sAdminCreditsLog{} } func init() { - service.RegisterAdminCreditsLog(NewAdminCreditsLog()) + service.RegisterAdminCreditsLog(newAdminCreditsLog()) } // Model 资产变动ORM模型 diff --git a/server/internal/logic/admin/dept.go b/server/internal/logic/admin/dept.go index 105d331..3458b3c 100644 --- a/server/internal/logic/admin/dept.go +++ b/server/internal/logic/admin/dept.go @@ -26,12 +26,12 @@ import ( type sAdminDept struct{} -func NewAdminDept() *sAdminDept { +func newAdminDept() *sAdminDept { return &sAdminDept{} } func init() { - service.RegisterAdminDept(NewAdminDept()) + service.RegisterAdminDept(newAdminDept()) } // Model 部门ORM模型 diff --git a/server/internal/logic/admin/member.go b/server/internal/logic/admin/member.go index b7132c8..a8c99f8 100644 --- a/server/internal/logic/admin/member.go +++ b/server/internal/logic/admin/member.go @@ -44,14 +44,14 @@ type sAdminMember struct { superAdmin *SuperAdmin } -func NewAdminMember() *sAdminMember { +func newAdminMember() *sAdminMember { return &sAdminMember{ superAdmin: new(SuperAdmin), } } func init() { - service.RegisterAdminMember(NewAdminMember()) + service.RegisterAdminMember(newAdminMember()) } // AddBalance 增加余额 diff --git a/server/internal/logic/admin/member_post.go b/server/internal/logic/admin/member_post.go index 7ed8f3f..101fa47 100644 --- a/server/internal/logic/admin/member_post.go +++ b/server/internal/logic/admin/member_post.go @@ -15,12 +15,12 @@ import ( type sAdminMemberPost struct{} -func NewAdminMemberPost() *sAdminMemberPost { +func newAdminMemberPost() *sAdminMemberPost { return &sAdminMemberPost{} } func init() { - service.RegisterAdminMemberPost(NewAdminMemberPost()) + service.RegisterAdminMemberPost(newAdminMemberPost()) } // UpdatePostIds 更新用户岗位 diff --git a/server/internal/logic/admin/menu.go b/server/internal/logic/admin/menu.go index 47cde76..80f9693 100644 --- a/server/internal/logic/admin/menu.go +++ b/server/internal/logic/admin/menu.go @@ -29,12 +29,12 @@ import ( type sAdminMenu struct{} -func NewAdminMenu() *sAdminMenu { +func newAdminMenu() *sAdminMenu { return &sAdminMenu{} } func init() { - service.RegisterAdminMenu(NewAdminMenu()) + service.RegisterAdminMenu(newAdminMenu()) } // Model Orm模型 diff --git a/server/internal/logic/admin/monitor.go b/server/internal/logic/admin/monitor.go index 44dab2e..a0e4b2a 100644 --- a/server/internal/logic/admin/monitor.go +++ b/server/internal/logic/admin/monitor.go @@ -26,14 +26,14 @@ type sAdminMonitor struct { sync.RWMutex } -func NewAdminMonitor() *sAdminMonitor { +func newAdminMonitor() *sAdminMonitor { return &sAdminMonitor{ data: new(model.MonitorData), } } func init() { - service.RegisterAdminMonitor(NewAdminMonitor()) + service.RegisterAdminMonitor(newAdminMonitor()) } // StartMonitor 启动服务监控 diff --git a/server/internal/logic/admin/notice.go b/server/internal/logic/admin/notice.go index e439d87..e8d1d24 100644 --- a/server/internal/logic/admin/notice.go +++ b/server/internal/logic/admin/notice.go @@ -27,12 +27,12 @@ import ( type sAdminNotice struct{} -func NewAdminNotice() *sAdminNotice { +func newAdminNotice() *sAdminNotice { return &sAdminNotice{} } func init() { - service.RegisterAdminNotice(NewAdminNotice()) + service.RegisterAdminNotice(newAdminNotice()) } // Model Orm模型 diff --git a/server/internal/logic/admin/order.go b/server/internal/logic/admin/order.go index e0edd5e..8ded54c 100644 --- a/server/internal/logic/admin/order.go +++ b/server/internal/logic/admin/order.go @@ -34,12 +34,12 @@ import ( type sAdminOrder struct{} -func NewAdminOrder() *sAdminOrder { +func newAdminOrder() *sAdminOrder { return &sAdminOrder{} } func init() { - service.RegisterAdminOrder(NewAdminOrder()) + service.RegisterAdminOrder(newAdminOrder()) } // Model 充值订单ORM模型 diff --git a/server/internal/logic/admin/post.go b/server/internal/logic/admin/post.go index 67ae7d2..92a2f51 100644 --- a/server/internal/logic/admin/post.go +++ b/server/internal/logic/admin/post.go @@ -22,12 +22,12 @@ import ( type sAdminPost struct{} -func NewAdminPost() *sAdminPost { +func newAdminPost() *sAdminPost { return &sAdminPost{} } func init() { - service.RegisterAdminPost(NewAdminPost()) + service.RegisterAdminPost(newAdminPost()) dict.RegisterFunc("adminPostOption", "岗位选项", service.AdminPost().Option) } diff --git a/server/internal/logic/admin/role.go b/server/internal/logic/admin/role.go index 32d6799..29e8e2d 100644 --- a/server/internal/logic/admin/role.go +++ b/server/internal/logic/admin/role.go @@ -28,12 +28,12 @@ import ( type sAdminRole struct{} -func NewAdminRole() *sAdminRole { +func newAdminRole() *sAdminRole { return &sAdminRole{} } func init() { - service.RegisterAdminRole(NewAdminRole()) + service.RegisterAdminRole(newAdminRole()) } // Verify 验证权限 diff --git a/server/internal/logic/admin/site.go b/server/internal/logic/admin/site.go index 519ea76..beaae5f 100644 --- a/server/internal/logic/admin/site.go +++ b/server/internal/logic/admin/site.go @@ -28,12 +28,12 @@ import ( type sAdminSite struct{} -func NewAdminSite() *sAdminSite { +func newAdminSite() *sAdminSite { return &sAdminSite{} } func init() { - service.RegisterAdminSite(NewAdminSite()) + service.RegisterAdminSite(newAdminSite()) } // Register 账号注册 From f18ce6384beb97321366f8d722660038b85e6866 Mon Sep 17 00:00:00 2001 From: apefuu Date: Thu, 19 Sep 2024 19:33:00 +0800 Subject: [PATCH 2/2] =?UTF-8?q?1=E3=80=81=E6=B3=9B=E5=9E=8B=E5=8C=96?= =?UTF-8?q?=E5=8F=82=E6=95=B0=EF=BC=8C=E9=A2=84=E7=95=99=E6=B3=9B=E5=9E=8B?= =?UTF-8?q?=E7=BA=A6=E6=9D=9F=EF=BC=8C=E6=96=B9=E4=BE=BF=E4=BB=A5=E5=90=8E?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=89=A9=E5=B1=95=E7=9A=84=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E6=A0=A1=E9=AA=8C=202=E3=80=81=E5=8D=87?= =?UTF-8?q?=E7=BA=A7goframe=E8=87=B3v2.7.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/addons/hgexample/logic/sys/index.go | 2 +- server/addons/hgexample/logic/sys/table.go | 10 +- .../hgexample/logic/sys/tenant_order.go | 2 +- .../addons/hgexample/logic/sys/tree_table.go | 4 +- server/go.mod | 10 +- server/go.sum | 16 ++-- .../internal/controller/admin/admin/cash.go | 2 +- .../internal/controller/admin/admin/member.go | 2 +- .../internal/controller/admin/admin/role.go | 2 +- .../internal/controller/admin/common/ems.go | 2 +- .../internal/controller/admin/common/site.go | 2 +- .../internal/controller/admin/common/sms.go | 2 +- server/internal/library/contexts/context.go | 92 +++++++++---------- .../library/hgorm/handler/filter_auth.go | 8 +- .../internal/library/hgorm/handler/handler.go | 4 +- .../internal/library/hgorm/handler/tenant.go | 10 +- server/internal/library/hgorm/hook/tenant.go | 8 +- server/internal/library/response/response.go | 18 ++-- server/internal/library/storager/upload.go | 26 +++--- .../internal/library/storager/upload_local.go | 4 +- server/internal/library/token/token.go | 6 +- server/internal/logic/admin/cash.go | 10 +- server/internal/logic/admin/credits_log.go | 2 +- server/internal/logic/admin/dept.go | 6 +- server/internal/logic/admin/member.go | 36 ++++---- server/internal/logic/admin/menu.go | 4 +- server/internal/logic/admin/notice.go | 16 ++-- server/internal/logic/admin/order.go | 8 +- server/internal/logic/admin/role.go | 8 +- server/internal/logic/admin/site.go | 2 +- server/internal/logic/common/upload.go | 4 +- server/internal/logic/common/wechat.go | 2 +- server/internal/logic/hook/access_log.go | 4 +- server/internal/logic/hook/last_active.go | 2 +- .../internal/logic/middleware/admin_auth.go | 2 +- server/internal/logic/middleware/init.go | 10 +- server/internal/logic/pay/create.go | 6 +- server/internal/logic/pay/pay.go | 2 +- server/internal/logic/pay/refund.go | 2 +- server/internal/logic/sys/attachment.go | 4 +- server/internal/logic/sys/curd_demo.go | 12 +-- server/internal/logic/sys/ems_log.go | 2 +- server/internal/logic/sys/log.go | 4 +- server/internal/logic/sys/login_log.go | 2 +- server/internal/logic/sys/normal_tree_demo.go | 4 +- server/internal/logic/sys/option_tree_demo.go | 4 +- server/internal/logic/sys/serve_license.go | 2 +- server/internal/logic/sys/serve_log.go | 4 +- server/internal/logic/view/view.go | 2 +- server/internal/model/context.go | 12 +-- .../model/input/adminin/credits_log.go | 4 +- server/internal/model/input/adminin/member.go | 8 +- server/internal/model/response.go | 5 +- server/internal/router/websocket.go | 2 +- server/internal/websocket/client.go | 4 +- server/internal/websocket/init.go | 4 +- server/utility/excel/excel.go | 4 +- 57 files changed, 221 insertions(+), 220 deletions(-) diff --git a/server/addons/hgexample/logic/sys/index.go b/server/addons/hgexample/logic/sys/index.go index d3e8ccd..dcc6328 100644 --- a/server/addons/hgexample/logic/sys/index.go +++ b/server/addons/hgexample/logic/sys/index.go @@ -29,7 +29,7 @@ func init() { func (s *sSysIndex) Test(ctx context.Context, in *sysin.IndexTestInp) (res *sysin.IndexTestModel, err error) { res = new(sysin.IndexTestModel) res.Name = in.Name - res.Module = fmt.Sprintf("当前插件模块是:%s,当前应用模块是:%s", global.GetSkeleton().Name, contexts.Get(ctx).Module) + res.Module = fmt.Sprintf("当前插件模块是:%s,当前应用模块是:%s", global.GetSkeleton().Name, contexts.Get[any](ctx).Module) res.Time = gtime.Now() return } diff --git a/server/addons/hgexample/logic/sys/table.go b/server/addons/hgexample/logic/sys/table.go index 41d0e32..467860d 100644 --- a/server/addons/hgexample/logic/sys/table.go +++ b/server/addons/hgexample/logic/sys/table.go @@ -128,7 +128,7 @@ func (s *sSysTable) Export(ctx context.Context, in *sysin.TableListInp) (err err return } - if err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName); err != nil { + if err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName); err != nil { return } return @@ -143,7 +143,7 @@ func (s *sSysTable) Edit(ctx context.Context, in *sysin.TableEditInp) (err error // 修改 if in.Id > 0 { - in.UpdatedBy = contexts.GetUserId(ctx) + in.UpdatedBy = contexts.GetUserId[any](ctx) if _, err = s.Model(ctx).WherePri(in.Id).Data(in).Update(); err != nil { err = gerror.Wrap(err, "修改表格失败,请稍后重试!") return @@ -152,7 +152,7 @@ func (s *sSysTable) Edit(ctx context.Context, in *sysin.TableEditInp) (err error } // 新增 - in.CreatedBy = contexts.GetUserId(ctx) + in.CreatedBy = contexts.GetUserId[any](ctx) if _, err = s.Model(ctx, &handler.Option{FilterAuth: false}).Data(in).OmitEmptyData().Insert(); err != nil { err = gerror.Wrap(err, "新增表格失败,请稍后重试!") return @@ -173,7 +173,7 @@ func (s *sSysTable) Delete(ctx context.Context, in *sysin.TableDeleteInp) (err e func (s *sSysTable) Status(ctx context.Context, in *sysin.TableStatusInp) (err error) { update := g.Map{ dao.AddonHgexampleTable.Columns().Status: in.Status, - dao.AddonHgexampleTable.Columns().UpdatedBy: contexts.GetUserId(ctx), + dao.AddonHgexampleTable.Columns().UpdatedBy: contexts.GetUserId[any](ctx), } if _, err = s.Model(ctx).WherePri(in.Id).Data(update).Update(); err != nil { @@ -197,7 +197,7 @@ func (s *sSysTable) Switch(ctx context.Context, in *sysin.TableSwitchInp) (err e update := g.Map{ in.Key: in.Value, - dao.AddonHgexampleTable.Columns().UpdatedBy: contexts.GetUserId(ctx), + dao.AddonHgexampleTable.Columns().UpdatedBy: contexts.GetUserId[any](ctx), } if _, err = s.Model(ctx).Where(dao.AddonHgexampleTable.Columns().Id, in.Id).Data(update).Update(); err != nil { diff --git a/server/addons/hgexample/logic/sys/tenant_order.go b/server/addons/hgexample/logic/sys/tenant_order.go index ac8094d..37e3cb8 100644 --- a/server/addons/hgexample/logic/sys/tenant_order.go +++ b/server/addons/hgexample/logic/sys/tenant_order.go @@ -126,7 +126,7 @@ func (s *sSysTenantOrder) Export(ctx context.Context, in *sysin.TenantOrderListI return } - err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName) + err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName) return } diff --git a/server/addons/hgexample/logic/sys/tree_table.go b/server/addons/hgexample/logic/sys/tree_table.go index 06562a4..bc48878 100644 --- a/server/addons/hgexample/logic/sys/tree_table.go +++ b/server/addons/hgexample/logic/sys/tree_table.go @@ -118,13 +118,13 @@ func (s *sSysTreeTable) Edit(ctx context.Context, in *sysin.TableEditInp) (err e } if in.Id > 0 { - in.UpdatedBy = contexts.GetUserId(ctx) + in.UpdatedBy = contexts.GetUserId[any](ctx) if _, err = s.Model(ctx).WherePri(in.Id).Data(in).Update(); err != nil { err = gerror.Wrap(err, "修改表格失败,请稍后重试!") return err } } else { - in.CreatedBy = contexts.GetUserId(ctx) + in.CreatedBy = contexts.GetUserId[any](ctx) if _, err = s.Model(ctx, &handler.Option{FilterAuth: false}).Data(in).OmitEmptyData().Insert(); err != nil { err = gerror.Wrap(err, "新增表格失败,请稍后重试!") return err diff --git a/server/go.mod b/server/go.mod index f0cf508..4de0608 100644 --- a/server/go.mod +++ b/server/go.mod @@ -1,6 +1,6 @@ module hotgo -go 1.23.0 +go 1.23.1 require ( github.com/IBM/sarama v1.43.3 @@ -14,10 +14,10 @@ require ( github.com/forgoer/openssl v1.6.0 github.com/go-pay/crypto v0.0.1 github.com/go-pay/gopay v1.5.104 - github.com/gogf/gf/contrib/drivers/mysql/v2 v2.7.2 - github.com/gogf/gf/contrib/nosql/redis/v2 v2.7.2 - github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.2 - github.com/gogf/gf/v2 v2.7.2 + github.com/gogf/gf/contrib/drivers/mysql/v2 v2.7.3 + github.com/gogf/gf/contrib/nosql/redis/v2 v2.7.3 + github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.3 + github.com/gogf/gf/v2 v2.7.3 github.com/gogf/selfupdate v0.0.0-20231215043001-5c48c528462f github.com/golang-jwt/jwt/v5 v5.2.1 github.com/gorilla/websocket v1.5.3 diff --git a/server/go.sum b/server/go.sum index 52cbd2c..a45c516 100644 --- a/server/go.sum +++ b/server/go.sum @@ -162,14 +162,14 @@ github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PU github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0= -github.com/gogf/gf/contrib/drivers/mysql/v2 v2.7.2 h1:GpE2JuHVoNJD4lNP1omC1+TKXNCSvXr5oil1bNULYd0= -github.com/gogf/gf/contrib/drivers/mysql/v2 v2.7.2/go.mod h1:0h3UmNAmA8hnjvTyozZelSWWxiAjGDQttzZqMhkCkJo= -github.com/gogf/gf/contrib/nosql/redis/v2 v2.7.2 h1:V1hdGnyjU9kT0I3DDDFDl6Ll8yC6aAIFJa/lMQwB8V4= -github.com/gogf/gf/contrib/nosql/redis/v2 v2.7.2/go.mod h1:XzkPv3G8TdKczqoB/ydR3bxvBRdQLQNCOCEgxso/c3o= -github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.2 h1:YKMJMhJJjbaPhgjpH9veZpn80mwkPgPAIatSvUFTt38= -github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.2/go.mod h1:kzxWAaY5Livk2SNPNrs9PJJvxK8A7uVwd8UGwjdMEfU= -github.com/gogf/gf/v2 v2.7.2 h1:uZDfyblasI12lZUtFd1mfxsIr8b14cd/F88DJUTCSDM= -github.com/gogf/gf/v2 v2.7.2/go.mod h1:EBXneAg/wes86rfeh68XC0a2JBNQylmT7Sp6/8Axk88= +github.com/gogf/gf/contrib/drivers/mysql/v2 v2.7.3 h1:VvDrsKuKa2obtMqbmdGt73YOpnDCiZ+dPcHfKtdcHLE= +github.com/gogf/gf/contrib/drivers/mysql/v2 v2.7.3/go.mod h1:WsLwt84iuBi2e+RVWb65yfyaaYxGWCtpqOoviH2JpIA= +github.com/gogf/gf/contrib/nosql/redis/v2 v2.7.3 h1:DUnJFoxLgOMmUjbybZ6X7x9G3vS8eujq5hbnBMTSyLs= +github.com/gogf/gf/contrib/nosql/redis/v2 v2.7.3/go.mod h1:3GNHVmnA/dnTsMFOWQw65AsFTJBHI9xpIUc4lwyPNig= +github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.3 h1:Zf+ZdgeB5rQeH4SGaM6XVwsZ3hnzTIDgY1/iTdQzzcg= +github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.3/go.mod h1:VLaGqNbTiEh21qvBz9XHJj8vbOpCWC38i885+6bX+y8= +github.com/gogf/gf/v2 v2.7.3 h1:0RTqeDYJOrD/FpiSsEopTs5SvYg+u6WPtS0TaXJcGoQ= +github.com/gogf/gf/v2 v2.7.3/go.mod h1:EBXneAg/wes86rfeh68XC0a2JBNQylmT7Sp6/8Axk88= github.com/gogf/selfupdate v0.0.0-20231215043001-5c48c528462f h1:7xfXR/BhG3JDqO1s45n65Oyx9t4E/UqDOXep6jXdLCM= github.com/gogf/selfupdate v0.0.0-20231215043001-5c48c528462f/go.mod h1:HnYoio6S7VaFJdryKcD/r9HgX+4QzYfr00XiXUo/xz0= github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= diff --git a/server/internal/controller/admin/admin/cash.go b/server/internal/controller/admin/admin/cash.go index 124b034..b4b17f2 100644 --- a/server/internal/controller/admin/admin/cash.go +++ b/server/internal/controller/admin/admin/cash.go @@ -48,7 +48,7 @@ func (c *cCash) List(ctx context.Context, req *cash.ListReq) (res *cash.ListRes, func (c *cCash) Apply(ctx context.Context, req *cash.ApplyReq) (res *cash.ApplyRes, err error) { err = service.AdminCash().Apply(ctx, &adminin.CashApplyInp{ Money: req.Money, - MemberId: contexts.GetUserId(ctx), + MemberId: contexts.GetUserId[any](ctx), }) return } diff --git a/server/internal/controller/admin/admin/member.go b/server/internal/controller/admin/admin/member.go index 6724e58..b110017 100644 --- a/server/internal/controller/admin/admin/member.go +++ b/server/internal/controller/admin/admin/member.go @@ -46,7 +46,7 @@ func (c *cMember) UpdateProfile(ctx context.Context, req *member.UpdateProfileRe // UpdatePwd 修改登录密码 func (c *cMember) UpdatePwd(ctx context.Context, req *member.UpdatePwdReq) (res *member.UpdatePwdRes, err error) { - var memberId = contexts.Get(ctx).User.Id + var memberId = contexts.Get[any](ctx).User.Id if memberId <= 0 { err = gerror.New("获取用户信息失败!") return diff --git a/server/internal/controller/admin/admin/role.go b/server/internal/controller/admin/admin/role.go index 92e626c..f4373bd 100644 --- a/server/internal/controller/admin/admin/role.go +++ b/server/internal/controller/admin/admin/role.go @@ -46,7 +46,7 @@ func (c *cRole) Delete(ctx context.Context, req *role.DeleteReq) (res *role.Dele // Dynamic 动态路由 func (c *cRole) Dynamic(ctx context.Context, _ *role.DynamicReq) (res *role.DynamicRes, err error) { - return service.AdminMenu().GetMenuList(ctx, contexts.GetUserId(ctx)) + return service.AdminMenu().GetMenuList(ctx, contexts.GetUserId[any](ctx)) } // GetPermissions 获取指定角色权限 diff --git a/server/internal/controller/admin/common/ems.go b/server/internal/controller/admin/common/ems.go index 7b63963..5693f32 100644 --- a/server/internal/controller/admin/common/ems.go +++ b/server/internal/controller/admin/common/ems.go @@ -44,7 +44,7 @@ func (c *cEms) SendTest(ctx context.Context, req *common.SendTestEmailReq) (res // SendBindEms 发送换绑邮件 func (c *cEms) SendBindEms(ctx context.Context, _ *common.SendBindEmsReq) (res *common.SendBindEmsRes, err error) { var ( - memberId = contexts.GetUserId(ctx) + memberId = contexts.GetUserId[any](ctx) models *entity.AdminMember ) diff --git a/server/internal/controller/admin/common/site.go b/server/internal/controller/admin/common/site.go index da3462d..e458509 100644 --- a/server/internal/controller/admin/common/site.go +++ b/server/internal/controller/admin/common/site.go @@ -143,6 +143,6 @@ func (c *cSite) MobileLogin(ctx context.Context, req *common.MobileLoginReq) (re // Logout 注销登录 func (c *cSite) Logout(ctx context.Context, _ *common.LoginLogoutReq) (res *common.LoginLogoutRes, err error) { - err = token.Logout(ghttp.RequestFromCtx(ctx)) + err = token.Logout[any](ghttp.RequestFromCtx(ctx)) return } diff --git a/server/internal/controller/admin/common/sms.go b/server/internal/controller/admin/common/sms.go index beae377..174598f 100644 --- a/server/internal/controller/admin/common/sms.go +++ b/server/internal/controller/admin/common/sms.go @@ -30,7 +30,7 @@ func (c *cSms) SendTest(ctx context.Context, req *common.SendTestSmsReq) (res *c // SendBindSms 发送换绑短信 func (c *cSms) SendBindSms(ctx context.Context, _ *common.SendBindSmsReq) (res *common.SendBindSmsRes, err error) { var ( - memberId = contexts.GetUserId(ctx) + memberId = contexts.GetUserId[any](ctx) models *entity.AdminMember ) diff --git a/server/internal/library/contexts/context.go b/server/internal/library/contexts/context.go index b9cd6bd..fd08af9 100644 --- a/server/internal/library/contexts/context.go +++ b/server/internal/library/contexts/context.go @@ -14,25 +14,25 @@ import ( ) // Init 初始化上下文对象指针到上下文对象中,以便后续的请求流程中可以修改 -func Init(r *ghttp.Request, customCtx *model.Context) { +func Init[T any](r *ghttp.Request, customCtx *model.Context[T]) { r.SetCtxVar(consts.ContextHTTPKey, customCtx) } // Get 获得上下文变量,如果没有设置,那么返回nil -func Get(ctx context.Context) *model.Context { +func Get[T any](ctx context.Context) *model.Context[T] { value := ctx.Value(consts.ContextHTTPKey) if value == nil { return nil } - if localCtx, ok := value.(*model.Context); ok { + if localCtx, ok := value.(*model.Context[T]); ok { return localCtx } return nil } // SetUser 将上下文信息设置到上下文请求中,注意是完整覆盖 -func SetUser(ctx context.Context, user *model.Identity) { - c := Get(ctx) +func SetUser[T any](ctx context.Context, user *model.Identity) { + c := Get[T](ctx) if c == nil { g.Log().Warning(ctx, "contexts.SetUser, c == nil ") return @@ -41,8 +41,8 @@ func SetUser(ctx context.Context, user *model.Identity) { } // SetResponse 设置组件响应 用于访问日志使用 -func SetResponse(ctx context.Context, response *model.Response) { - c := Get(ctx) +func SetResponse[T any](ctx context.Context, response *model.Response[T]) { + c := Get[T](ctx) if c == nil { g.Log().Warning(ctx, "contexts.SetResponse, c == nil ") return @@ -51,8 +51,8 @@ func SetResponse(ctx context.Context, response *model.Response) { } // SetModule 设置应用模块 -func SetModule(ctx context.Context, module string) { - c := Get(ctx) +func SetModule[T any](ctx context.Context, module string) { + c := Get[T](ctx) if c == nil { g.Log().Warning(ctx, "contexts.SetModule, c == nil ") return @@ -61,8 +61,8 @@ func SetModule(ctx context.Context, module string) { } // GetUser 获取用户信息 -func GetUser(ctx context.Context) *model.Identity { - c := Get(ctx) +func GetUser[T any](ctx context.Context) *model.Identity { + c := Get[T](ctx) if c == nil { return nil } @@ -70,8 +70,8 @@ func GetUser(ctx context.Context) *model.Identity { } // GetUserId 获取用户ID -func GetUserId(ctx context.Context) int64 { - user := GetUser(ctx) +func GetUserId[T any](ctx context.Context) int64 { + user := GetUser[T](ctx) if user == nil { return 0 } @@ -79,8 +79,8 @@ func GetUserId(ctx context.Context) int64 { } // GetRoleId 获取用户角色ID -func GetRoleId(ctx context.Context) int64 { - user := GetUser(ctx) +func GetRoleId[T any](ctx context.Context) int64 { + user := GetUser[T](ctx) if user == nil { return 0 } @@ -88,8 +88,8 @@ func GetRoleId(ctx context.Context) int64 { } // GetRoleKey 获取用户角色唯一编码 -func GetRoleKey(ctx context.Context) string { - user := GetUser(ctx) +func GetRoleKey[T any](ctx context.Context) string { + user := GetUser[T](ctx) if user == nil { return "" } @@ -97,8 +97,8 @@ func GetRoleKey(ctx context.Context) string { } // GetDeptType 获取用户部门类型 -func GetDeptType(ctx context.Context) string { - user := GetUser(ctx) +func GetDeptType[T any](ctx context.Context) string { + user := GetUser[T](ctx) if user == nil { return "" } @@ -106,28 +106,28 @@ func GetDeptType(ctx context.Context) string { } // IsCompanyDept 是否为公司部门 -func IsCompanyDept(ctx context.Context) bool { - return GetDeptType(ctx) == consts.DeptTypeCompany +func IsCompanyDept[T any](ctx context.Context) bool { + return GetDeptType[T](ctx) == consts.DeptTypeCompany } // IsTenantDept 是否为租户部门 -func IsTenantDept(ctx context.Context) bool { - return GetDeptType(ctx) == consts.DeptTypeTenant +func IsTenantDept[T any](ctx context.Context) bool { + return GetDeptType[T](ctx) == consts.DeptTypeTenant } // IsMerchantDept 是否为商户部门 -func IsMerchantDept(ctx context.Context) bool { - return GetDeptType(ctx) == consts.DeptTypeMerchant +func IsMerchantDept[T any](ctx context.Context) bool { + return GetDeptType[T](ctx) == consts.DeptTypeMerchant } // IsUserDept 是否为普通用户部门 -func IsUserDept(ctx context.Context) bool { - return GetDeptType(ctx) == consts.DeptTypeUser +func IsUserDept[T any](ctx context.Context) bool { + return GetDeptType[T](ctx) == consts.DeptTypeUser } // GetModule 获取应用模块 -func GetModule(ctx context.Context) string { - c := Get(ctx) +func GetModule[T any](ctx context.Context) string { + c := Get[T](ctx) if c == nil { return "" } @@ -135,59 +135,59 @@ func GetModule(ctx context.Context) string { } // SetAddonName 设置插件信息 -func SetAddonName(ctx context.Context, name string) { - c := Get(ctx) +func SetAddonName[T any](ctx context.Context, name string) { + c := Get[T](ctx) if c == nil { g.Log().Warning(ctx, "contexts.SetAddonName, c == nil ") return } - Get(ctx).AddonName = name + Get[T](ctx).AddonName = name } // IsAddonRequest 是否为插件模块请求 -func IsAddonRequest(ctx context.Context) bool { - c := Get(ctx) +func IsAddonRequest[T any](ctx context.Context) bool { + c := Get[T](ctx) if c == nil { return false } - return GetAddonName(ctx) != "" + return GetAddonName[T](ctx) != "" } // GetAddonName 获取插件信息 -func GetAddonName(ctx context.Context) string { - c := Get(ctx) +func GetAddonName[T any](ctx context.Context) string { + c := Get[T](ctx) if c == nil { return "" } - return Get(ctx).AddonName + return Get[T](ctx).AddonName } // SetData 设置额外数据 -func SetData(ctx context.Context, k string, v interface{}) { - c := Get(ctx) +func SetData[T any](ctx context.Context, k string, v interface{}) { + c := Get[T](ctx) if c == nil { g.Log().Warning(ctx, "contexts.SetData, c == nil ") return } - Get(ctx).Data[k] = v + Get[T](ctx).Data[k] = v } // SetDataMap 设置额外数据 -func SetDataMap(ctx context.Context, vs g.Map) { - c := Get(ctx) +func SetDataMap[T any](ctx context.Context, vs g.Map) { + c := Get[T](ctx) if c == nil { g.Log().Warning(ctx, "contexts.SetData, c == nil ") return } for k, v := range vs { - Get(ctx).Data[k] = v + Get[T](ctx).Data[k] = v } } // GetData 获取额外数据 -func GetData(ctx context.Context) g.Map { - c := Get(ctx) +func GetData[T any](ctx context.Context) g.Map { + c := Get[T](ctx) if c == nil { return nil } diff --git a/server/internal/library/hgorm/handler/filter_auth.go b/server/internal/library/hgorm/handler/filter_auth.go index 81271a5..5afd87c 100644 --- a/server/internal/library/hgorm/handler/filter_auth.go +++ b/server/internal/library/hgorm/handler/filter_auth.go @@ -19,7 +19,7 @@ import ( // FilterAuth 过滤数据权限 // 通过上下文中的用户角色权限和表中是否含有需要过滤的字段附加查询条件 -func FilterAuth(m *gdb.Model) *gdb.Model { +func FilterAuth[T any](m *gdb.Model) *gdb.Model { var ( needAuth bool filterField string @@ -40,16 +40,16 @@ func FilterAuth(m *gdb.Model) *gdb.Model { if !needAuth { return m } - return m.Handler(FilterAuthWithField(filterField)) + return m.Handler(FilterAuthWithField[T](filterField)) } // FilterAuthWithField 过滤数据权限,设置指定字段 -func FilterAuthWithField(filterField string) func(m *gdb.Model) *gdb.Model { +func FilterAuthWithField[T any](filterField string) func(m *gdb.Model) *gdb.Model { return func(m *gdb.Model) *gdb.Model { var ( role *entity.AdminRole ctx = m.GetCtx() - co = contexts.Get(ctx) + co = contexts.Get[T](ctx) ) if co == nil || co.User == nil { diff --git a/server/internal/library/hgorm/handler/handler.go b/server/internal/library/hgorm/handler/handler.go index e62982e..03307b6 100644 --- a/server/internal/library/hgorm/handler/handler.go +++ b/server/internal/library/hgorm/handler/handler.go @@ -30,13 +30,13 @@ func Model(m *gdb.Model, opt ...*Option) *gdb.Model { option = DefaultOption } if option.FilterAuth { - m = m.Handler(FilterAuth) + m = m.Handler(FilterAuth[any]) } if option.ForceCache { m = m.Handler(ForceCache) } if option.FilterTenant { - m = m.Handler(FilterTenant) + m = m.Handler(FilterTenant[any]) } return m } diff --git a/server/internal/library/hgorm/handler/tenant.go b/server/internal/library/hgorm/handler/tenant.go index 1fd21ce..e99ff64 100644 --- a/server/internal/library/hgorm/handler/tenant.go +++ b/server/internal/library/hgorm/handler/tenant.go @@ -14,7 +14,7 @@ import ( // FilterTenant 过滤多租户数据权限 // 根据部门类型识别当前租户、商户、用户身份,过滤只属于自己的数据 -func FilterTenant(m *gdb.Model) *gdb.Model { +func FilterTenant[T any](m *gdb.Model) *gdb.Model { var ( needAuth bool filterField string @@ -23,19 +23,19 @@ func FilterTenant(m *gdb.Model) *gdb.Model { ) // 租户 - if contexts.IsTenantDept(ctx) && gstr.InArray(fields, "tenant_id") { + if contexts.IsTenantDept[T](ctx) && gstr.InArray(fields, "tenant_id") { needAuth = true filterField = "tenant_id" } // 商户 - if contexts.IsMerchantDept(ctx) && gstr.InArray(fields, "merchant_id") { + if contexts.IsMerchantDept[T](ctx) && gstr.InArray(fields, "merchant_id") { needAuth = true filterField = "merchant_id" } // 用户 - if contexts.IsUserDept(ctx) && gstr.InArray(fields, "user_id") { + if contexts.IsUserDept[T](ctx) && gstr.InArray(fields, "user_id") { needAuth = true filterField = "user_id" } @@ -44,6 +44,6 @@ func FilterTenant(m *gdb.Model) *gdb.Model { return m } - m = m.Where(filterField, contexts.GetUserId(ctx)) + m = m.Where(filterField, contexts.GetUserId[T](ctx)) return m } diff --git a/server/internal/library/hgorm/hook/tenant.go b/server/internal/library/hgorm/hook/tenant.go index 5b7b693..51789bc 100644 --- a/server/internal/library/hgorm/hook/tenant.go +++ b/server/internal/library/hgorm/hook/tenant.go @@ -165,7 +165,7 @@ func (h *hookSaveTenant) checkRelationSingle(idx any, relation, limitType string return } - relationId := contexts.GetUserId(h.ctx) + relationId := contexts.GetUserId[any](h.ctx) switch relation { case consts.DeptTypeTenant: if ok = tr.TenantId == relationId; !ok { @@ -210,8 +210,8 @@ func (h *hookSaveTenant) handle() (result sql.Result, err error) { var ( update = make(g.Map) fields = h.getFields() - memberId = contexts.GetUserId(h.ctx) - deptType = contexts.GetDeptType(h.ctx) + memberId = contexts.GetUserId[any](h.ctx) + deptType = contexts.GetDeptType[any](h.ctx) tr *hgorm.TenantRelation ) @@ -221,7 +221,7 @@ func (h *hookSaveTenant) handle() (result sql.Result, err error) { } // 非公司类型,加载自己的租户关系,用于重写关系 - if !contexts.IsCompanyDept(h.ctx) { + if !contexts.IsCompanyDept[any](h.ctx) { tr, err = h.getRelation(memberId) if err != nil { return nil, err diff --git a/server/internal/library/response/response.go b/server/internal/library/response/response.go index f1b33ea..c794b3b 100644 --- a/server/internal/library/response/response.go +++ b/server/internal/library/response/response.go @@ -22,12 +22,13 @@ func JsonExit(r *ghttp.Request, code int, message string, data ...interface{}) { } // RXml xml -func RXml(r *ghttp.Request, code int, message string, data ...interface{}) { - responseData := interface{}(nil) +func RXml[T any](r *ghttp.Request, code int, message string, data ...T) { + //responseData := interface{}(nil) + var responseData T if len(data) > 0 { responseData = data[0] } - res := &model.Response{ + res := &model.Response[T]{ Code: code, Message: message, Timestamp: gtime.Timestamp(), @@ -52,12 +53,13 @@ func RXml(r *ghttp.Request, code int, message string, data ...interface{}) { } // RJson 标准返回结果数据结构封装 -func RJson(r *ghttp.Request, code int, message string, data ...interface{}) { - responseData := interface{}(nil) +func RJson[T any](r *ghttp.Request, code int, message string, data ...T) { + //responseData := interface{}(nil) + var responseData T if len(data) > 0 { responseData = data[0] } - res := &model.Response{ + res := &model.Response[T]{ Code: code, Message: message, Timestamp: gtime.Timestamp(), @@ -82,7 +84,7 @@ func RJson(r *ghttp.Request, code int, message string, data ...interface{}) { } // CustomJson 自定义JSON -func CustomJson(r *ghttp.Request, content interface{}) { +func CustomJson[T any](r *ghttp.Request, content T) { // 清空响应 r.Response.ClearBuffer() @@ -90,7 +92,7 @@ func CustomJson(r *ghttp.Request, content interface{}) { r.Response.WriteJson(content) // 加入到上下文 - contexts.SetResponse(r.Context(), &model.Response{ + contexts.SetResponse(r.Context(), &model.Response[T]{ Code: 0, Message: "", Data: content, diff --git a/server/internal/library/storager/upload.go b/server/internal/library/storager/upload.go index a2683c9..c6a4496 100644 --- a/server/internal/library/storager/upload.go +++ b/server/internal/library/storager/upload.go @@ -67,7 +67,7 @@ func New(name ...string) UploadDrive { } // DoUpload 上传入口 -func DoUpload(ctx context.Context, typ string, file *ghttp.UploadFile) (result *entity.SysAttachment, err error) { +func DoUpload[T any](ctx context.Context, typ string, file *ghttp.UploadFile) (result *entity.SysAttachment, err error) { if file == nil { err = gerror.New("文件必须!") return @@ -88,7 +88,7 @@ func DoUpload(ctx context.Context, typ string, file *ghttp.UploadFile) (result * } // 相同存储相同身份才复用 - if result != nil && result.Drive == config.Drive && result.MemberId == contexts.GetUserId(ctx) && result.AppId == contexts.GetModule(ctx) { + if result != nil && result.Drive == config.Drive && result.MemberId == contexts.GetUserId[T](ctx) && result.AppId == contexts.GetModule[T](ctx) { return } @@ -98,7 +98,7 @@ func DoUpload(ctx context.Context, typ string, file *ghttp.UploadFile) (result * return } // 写入附件记录 - return write(ctx, meta, fullPath) + return write[T](ctx, meta, fullPath) } // ValidateFileMeta 验证文件元数据 @@ -215,11 +215,11 @@ func GenFullPath(basePath, ext string) string { } // write 写入附件记录 -func write(ctx context.Context, meta *FileMeta, fullPath string) (models *entity.SysAttachment, err error) { +func write[T any](ctx context.Context, meta *FileMeta, fullPath string) (models *entity.SysAttachment, err error) { models = &entity.SysAttachment{ Id: 0, - AppId: contexts.GetModule(ctx), - MemberId: contexts.GetUserId(ctx), + AppId: contexts.GetModule[T](ctx), + MemberId: contexts.GetUserId[T](ctx), Drive: config.Drive, Size: meta.Size, Path: fullPath, @@ -264,7 +264,7 @@ func HasFile(ctx context.Context, md5 string) (res *entity.SysAttachment, err er } // CheckMultipart 检查文件分片 -func CheckMultipart(ctx context.Context, in *CheckMultipartParams) (res *CheckMultipartModel, err error) { +func CheckMultipart[T any](ctx context.Context, in *CheckMultipartParams) (res *CheckMultipartModel, err error) { res = new(CheckMultipartModel) meta := new(FileMeta) @@ -295,7 +295,7 @@ func CheckMultipart(ctx context.Context, in *CheckMultipartParams) (res *CheckMu } // 文件已存在,直接返回。相同存储相同身份才复用 - if result != nil && result.Drive == config.Drive && result.MemberId == contexts.GetUserId(ctx) && result.AppId == contexts.GetModule(ctx) { + if result != nil && result.Drive == config.Drive && result.MemberId == contexts.GetUserId[T](ctx) && result.AppId == contexts.GetModule[T](ctx) { res.Attachment = result return } @@ -305,7 +305,7 @@ func CheckMultipart(ctx context.Context, in *CheckMultipartParams) (res *CheckMu } in.meta = meta - progress, err := GetOrCreateMultipartProgress(ctx, in) + progress, err := GetOrCreateMultipartProgress[T](ctx, in) if err != nil { return nil, err } @@ -329,13 +329,13 @@ func CalcUploadProgress(uploadedIndex []int, shardCount int) float64 { } // GenUploadId 生成上传ID -func GenUploadId(ctx context.Context, md5 string) string { - return fmt.Sprintf("%v:%v:%v@%v", md5, contexts.GetUserId(ctx), contexts.GetModule(ctx), config.Drive) +func GenUploadId[T any](ctx context.Context, md5 string) string { + return fmt.Sprintf("%v:%v:%v@%v", md5, contexts.GetUserId[T](ctx), contexts.GetModule[T](ctx), config.Drive) } // GetOrCreateMultipartProgress 获取或创建分片上传事件进度 -func GetOrCreateMultipartProgress(ctx context.Context, in *CheckMultipartParams) (res *MultipartProgress, err error) { - uploadId := GenUploadId(ctx, in.Md5) +func GetOrCreateMultipartProgress[T any](ctx context.Context, in *CheckMultipartParams) (res *MultipartProgress, err error) { + uploadId := GenUploadId[T](ctx, in.Md5) res, err = GetMultipartProgress(ctx, uploadId) if err != nil { return nil, err diff --git a/server/internal/library/storager/upload_local.go b/server/internal/library/storager/upload_local.go index 3f7fa93..6977214 100644 --- a/server/internal/library/storager/upload_local.go +++ b/server/internal/library/storager/upload_local.go @@ -55,7 +55,7 @@ func (d *LocalDrive) Upload(ctx context.Context, file *ghttp.UploadFile) (fullPa // CreateMultipart 创建分片事件 func (d *LocalDrive) CreateMultipart(ctx context.Context, in *CheckMultipartParams) (mp *MultipartProgress, err error) { mp = new(MultipartProgress) - mp.UploadId = GenUploadId(ctx, in.Md5) + mp.UploadId = GenUploadId[any](ctx, in.Md5) mp.Meta = in.meta mp.ShardCount = in.ShardCount mp.UploadedIndex = make([]int, 0) @@ -119,7 +119,7 @@ func (d *LocalDrive) UploadPart(ctx context.Context, in *UploadPartParams) (res } // 写入附件记录 - attachment, err := write(ctx, in.mp.Meta, finalDirPath) + attachment, err := write[any](ctx, in.mp.Meta, finalDirPath) if err != nil { return nil, err } diff --git a/server/internal/library/token/token.go b/server/internal/library/token/token.go index 4c2614b..f454474 100644 --- a/server/internal/library/token/token.go +++ b/server/internal/library/token/token.go @@ -90,7 +90,7 @@ func Login(ctx context.Context, user *model.Identity) (string, int64, error) { } // Logout 注销登录 -func Logout(r *ghttp.Request) (err error) { +func Logout[T any](r *ghttp.Request) (err error) { var ( ctx = r.Context() header = GetAuthorization(r) @@ -112,9 +112,9 @@ func Logout(r *ghttp.Request) (err error) { // 认证key authKey = GetAuthKey(header) // 登录token - tokenKey = GetTokenKey(contexts.GetModule(ctx), authKey) + tokenKey = GetTokenKey(contexts.GetModule[T](ctx), authKey) // 身份绑定 - bindKey = GetBindKey(contexts.GetModule(ctx), claims.Id) + bindKey = GetBindKey(contexts.GetModule[T](ctx), claims.Id) ) // 删除token diff --git a/server/internal/logic/admin/cash.go b/server/internal/logic/admin/cash.go index 95527fc..c71b1d9 100644 --- a/server/internal/logic/admin/cash.go +++ b/server/internal/logic/admin/cash.go @@ -38,7 +38,7 @@ func init() { // View 获取指定提现信息 func (s *sAdminCash) View(ctx context.Context, in *adminin.CashViewInp) (res *adminin.CashViewModel, err error) { // 这里做了强制限制非超管不允许访问,如果你想通过菜单权限控制,请注释掉以下验证 - if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId(ctx)) { + if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId[any](ctx)) { err = gerror.New("没有访问权限") return } @@ -72,7 +72,7 @@ func (s *sAdminCash) View(ctx context.Context, in *adminin.CashViewInp) (res *ad func (s *sAdminCash) List(ctx context.Context, in *adminin.CashListInp) (list []*adminin.CashListModel, totalCount int, err error) { var ( mod = dao.AdminCash.Ctx(ctx) - opMemberId = contexts.GetUserId(ctx) + opMemberId = contexts.GetUserId[any](ctx) isSuper = service.AdminMember().VerifySuperId(ctx, opMemberId) ) @@ -233,8 +233,8 @@ func (s *sAdminCash) Apply(ctx context.Context, in *adminin.CashApplyInp) (err e // 更新余额 _, err = service.AdminCreditsLog().SaveBalance(ctx, &adminin.CreditsLogSaveBalanceInp{ MemberId: in.MemberId, - AppId: contexts.GetModule(ctx), - AddonsName: contexts.GetAddonName(ctx), + AppId: contexts.GetModule[any](ctx), + AddonsName: contexts.GetAddonName[any](ctx), CreditGroup: consts.CreditGroupApplyCash, Num: -in.Money, MapId: lastInsertId, @@ -253,7 +253,7 @@ func (s *sAdminCash) Apply(ctx context.Context, in *adminin.CashApplyInp) (err e // Payment 提现打款处理 func (s *sAdminCash) Payment(ctx context.Context, in *adminin.CashPaymentInp) (err error) { - if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId(ctx)) { + if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId[any](ctx)) { err = gerror.New("没有访问权限") return } diff --git a/server/internal/logic/admin/credits_log.go b/server/internal/logic/admin/credits_log.go index caf3240..a1a3fbf 100644 --- a/server/internal/logic/admin/credits_log.go +++ b/server/internal/logic/admin/credits_log.go @@ -245,6 +245,6 @@ func (s *sAdminCreditsLog) Export(ctx context.Context, in *adminin.CreditsLogLis return } - err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName) + err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName) return } diff --git a/server/internal/logic/admin/dept.go b/server/internal/logic/admin/dept.go index 3458b3c..e6f9885 100644 --- a/server/internal/logic/admin/dept.go +++ b/server/internal/logic/admin/dept.go @@ -255,7 +255,7 @@ func (s *sAdminDept) GetName(ctx context.Context, id int64) (name string, err er func (s *sAdminDept) VerifyDeptId(ctx context.Context, id int64) (err error) { var ( pid int64 = 0 - mb = contexts.GetUser(ctx) + mb = contexts.GetUser[any](ctx) mod = dao.AdminDept.Ctx(ctx).Fields(dao.AdminDept.Columns().Id) ) @@ -291,8 +291,8 @@ func (s *sAdminDept) Option(ctx context.Context, in *adminin.DeptOptionInp) (res ) // 非超管只获取下级 - if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId(ctx)) { - pid = contexts.GetUser(ctx).DeptId + if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId[any](ctx)) { + pid = contexts.GetUser[any](ctx).DeptId mod = mod.WhereLike(dao.AdminDept.Columns().Tree, "%"+tree.GetIdLabel(pid)+"%") } diff --git a/server/internal/logic/admin/member.go b/server/internal/logic/admin/member.go index a8c99f8..40b1052 100644 --- a/server/internal/logic/admin/member.go +++ b/server/internal/logic/admin/member.go @@ -58,7 +58,7 @@ func init() { func (s *sAdminMember) AddBalance(ctx context.Context, in *adminin.MemberAddBalanceInp) (err error) { var ( mb *entity.AdminMember - memberId = contexts.GetUserId(ctx) + memberId = contexts.GetUserId[any](ctx) ) if err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Scan(&mb); err != nil { @@ -102,7 +102,7 @@ func (s *sAdminMember) AddBalance(ctx context.Context, in *adminin.MemberAddBala func (s *sAdminMember) AddIntegral(ctx context.Context, in *adminin.MemberAddIntegralInp) (err error) { var ( mb *entity.AdminMember - memberId = contexts.GetUserId(ctx) + memberId = contexts.GetUserId[any](ctx) ) if err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Scan(&mb); err != nil { @@ -144,7 +144,7 @@ func (s *sAdminMember) AddIntegral(ctx context.Context, in *adminin.MemberAddInt // UpdateCash 修改提现信息 func (s *sAdminMember) UpdateCash(ctx context.Context, in *adminin.MemberUpdateCashInp) (err error) { - memberId := contexts.Get(ctx).User.Id + memberId := contexts.Get[any](ctx).User.Id if memberId <= 0 { err = gerror.New("获取用户信息失败!") return @@ -180,7 +180,7 @@ func (s *sAdminMember) UpdateCash(ctx context.Context, in *adminin.MemberUpdateC // UpdateEmail 换绑邮箱 func (s *sAdminMember) UpdateEmail(ctx context.Context, in *adminin.MemberUpdateEmailInp) (err error) { - memberId := contexts.Get(ctx).User.Id + memberId := contexts.Get[any](ctx).User.Id if memberId <= 0 { err = gerror.New("获取用户信息失败!") return @@ -232,7 +232,7 @@ func (s *sAdminMember) UpdateEmail(ctx context.Context, in *adminin.MemberUpdate // UpdateMobile 换绑手机号 func (s *sAdminMember) UpdateMobile(ctx context.Context, in *adminin.MemberUpdateMobileInp) (err error) { - memberId := contexts.Get(ctx).User.Id + memberId := contexts.Get[any](ctx).User.Id if memberId <= 0 { err = gerror.New("获取用户信息失败!") return @@ -284,7 +284,7 @@ func (s *sAdminMember) UpdateMobile(ctx context.Context, in *adminin.MemberUpdat // UpdateProfile 更新用户资料 func (s *sAdminMember) UpdateProfile(ctx context.Context, in *adminin.MemberUpdateProfileInp) (err error) { - memberId := contexts.Get(ctx).User.Id + memberId := contexts.Get[any](ctx).User.Id if memberId <= 0 { err = gerror.New("获取用户信息失败!") return @@ -347,7 +347,7 @@ func (s *sAdminMember) UpdatePwd(ctx context.Context, in *adminin.MemberUpdatePw func (s *sAdminMember) ResetPwd(ctx context.Context, in *adminin.MemberResetPwdInp) (err error) { var ( mb *entity.AdminMember - memberId = contexts.GetUserId(ctx) + memberId = contexts.GetUserId[any](ctx) ) if err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Scan(&mb); err != nil { @@ -403,7 +403,7 @@ func (s *sAdminMember) VerifyUnique(ctx context.Context, in *adminin.VerifyUniqu // Delete 删除用户 func (s *sAdminMember) Delete(ctx context.Context, in *adminin.MemberDeleteInp) (err error) { - memberId := contexts.GetUserId(ctx) + memberId := contexts.GetUserId[any](ctx) if memberId <= 0 { err = gerror.New("获取用户信息失败!") return @@ -454,7 +454,7 @@ func (s *sAdminMember) Delete(ctx context.Context, in *adminin.MemberDeleteInp) // Edit 修改/新增用户 func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err error) { - opMemberId := contexts.GetUserId(ctx) + opMemberId := contexts.GetUserId[any](ctx) if opMemberId <= 0 { err = gerror.New("获取用户信息失败!") return @@ -582,7 +582,7 @@ func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err // View 获取用户信息 func (s *sAdminMember) View(ctx context.Context, in *adminin.MemberViewInp) (res *adminin.MemberViewModel, err error) { - if err = s.FilterAuthModel(ctx, contexts.GetUserId(ctx)).Hook(hook.MemberInfo).WherePri(in.Id).Scan(&res); err != nil { + if err = s.FilterAuthModel(ctx, contexts.GetUserId[any](ctx)).Hook(hook.MemberInfo).WherePri(in.Id).Scan(&res); err != nil { err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!") } return @@ -590,7 +590,7 @@ func (s *sAdminMember) View(ctx context.Context, in *adminin.MemberViewInp) (res // List 获取用户列表 func (s *sAdminMember) List(ctx context.Context, in *adminin.MemberListInp) (list []*adminin.MemberListModel, totalCount int, err error) { - mod := s.FilterAuthModel(ctx, contexts.GetUserId(ctx)) + mod := s.FilterAuthModel(ctx, contexts.GetUserId[any](ctx)) cols := dao.AdminMember.Columns() if in.RealName != "" { @@ -652,7 +652,7 @@ func (s *sAdminMember) Status(ctx context.Context, in *adminin.MemberStatusInp) return } - if _, err = s.FilterAuthModel(ctx, contexts.GetUserId(ctx)).WherePri(in.Id).Data(dao.AdminMember.Columns().Status, in.Status).Update(); err != nil { + if _, err = s.FilterAuthModel(ctx, contexts.GetUserId[any](ctx)).WherePri(in.Id).Data(dao.AdminMember.Columns().Status, in.Status).Update(); err != nil { err = gerror.Wrap(err, "更新用户状态失败,请稍后重试!") } return @@ -677,7 +677,7 @@ func (s *sAdminMember) GenTree(ctx context.Context, pid int64) (level int, newTr // LoginMemberInfo 获取登录用户信息 func (s *sAdminMember) LoginMemberInfo(ctx context.Context) (res *adminin.LoginMemberInfoModel, err error) { - var memberId = contexts.GetUserId(ctx) + var memberId = contexts.GetUserId[any](ctx) if memberId <= 0 { err = gerror.New("用户身份异常,请重新登录!") return @@ -710,7 +710,7 @@ func (s *sAdminMember) LoginMemberInfo(ctx context.Context) (res *adminin.LoginM res.Mobile = gstr.HideStr(res.Mobile, 40, `*`) res.Email = gstr.HideStr(res.Email, 40, `*`) res.OpenId, _ = service.CommonWechat().GetOpenId(ctx) - res.DeptType = contexts.GetDeptType(ctx) + res.DeptType = contexts.GetDeptType[any](ctx) return } @@ -756,7 +756,7 @@ func (s *sAdminMember) GetIdByCode(ctx context.Context, in *adminin.GetIdByCodeI // Select 获取可选的用户选项 func (s *sAdminMember) Select(ctx context.Context, in *adminin.MemberSelectInp) (res []*adminin.MemberSelectModel, err error) { err = dao.AdminMember.Ctx(ctx).Fields("id as value,real_name as label,username,avatar"). - Handler(handler.FilterAuthWithField("id")). + Handler(handler.FilterAuthWithField[any]("id")). Scan(&res) if err != nil { err = gerror.Wrap(err, "获取可选用户选项失败,请稍后重试!") @@ -837,9 +837,9 @@ func (s *sAdminMember) FilterAuthModel(ctx context.Context, memberId int64) *gdb } var roleId int64 - if contexts.GetUserId(ctx) == memberId { + if contexts.GetUserId[any](ctx) == memberId { // 当前登录用户直接从上下文中取角色ID - roleId = contexts.GetRoleId(ctx) + roleId = contexts.GetRoleId[any](ctx) } else { ro, err := dao.AdminMember.Ctx(ctx).Fields("role_id").Where("id", memberId).Value() if err != nil { @@ -854,5 +854,5 @@ func (s *sAdminMember) FilterAuthModel(ctx context.Context, memberId int64) *gdb g.Log().Panicf(ctx, "get the subordinate role permission exception, err:%+v", err) return nil } - return m.Where("id <> ?", memberId).WhereIn("role_id", roleIds).Handler(handler.FilterAuthWithField("id")) + return m.Where("id <> ?", memberId).WhereIn("role_id", roleIds).Handler(handler.FilterAuthWithField[any]("id")) } diff --git a/server/internal/logic/admin/menu.go b/server/internal/logic/admin/menu.go index 80f9693..1c00bb3 100644 --- a/server/internal/logic/admin/menu.go +++ b/server/internal/logic/admin/menu.go @@ -183,7 +183,7 @@ func (s *sAdminMenu) GetMenuList(ctx context.Context, memberId int64) (res *role // 非超管验证允许的菜单列表 if !service.AdminMember().VerifySuperId(ctx, memberId) { - menuIds, err := dao.AdminRoleMenu.Ctx(ctx).Fields("menu_id").Where("role_id", contexts.GetRoleId(ctx)).Array() + menuIds, err := dao.AdminRoleMenu.Ctx(ctx).Fields("menu_id").Where("role_id", contexts.GetRoleId[any](ctx)).Array() if err != nil { return nil, err } @@ -242,7 +242,7 @@ func (s *sAdminMenu) LoginPermissions(ctx context.Context, memberId int64) (list // 非超管验证允许的菜单列表 if !service.AdminMember().VerifySuperId(ctx, memberId) { - menuIds, err := dao.AdminRoleMenu.Ctx(ctx).Fields("menu_id").Where("role_id", contexts.GetRoleId(ctx)).Array() + menuIds, err := dao.AdminRoleMenu.Ctx(ctx).Fields("menu_id").Where("role_id", contexts.GetRoleId[any](ctx)).Array() if err != nil { return nil, err } diff --git a/server/internal/logic/admin/notice.go b/server/internal/logic/admin/notice.go index e8d1d24..ea75acb 100644 --- a/server/internal/logic/admin/notice.go +++ b/server/internal/logic/admin/notice.go @@ -48,7 +48,7 @@ func (s *sAdminNotice) Delete(ctx context.Context, in *adminin.NoticeDeleteInp) // Edit 修改/新增 func (s *sAdminNotice) Edit(ctx context.Context, in *adminin.NoticeEditInp) (err error) { - var member = contexts.Get(ctx).User + var member = contexts.Get[any](ctx).User if member == nil { err = gerror.New("获取用户信息失败!") return @@ -66,7 +66,7 @@ func (s *sAdminNotice) Edit(ctx context.Context, in *adminin.NoticeEditInp) (err // 检查选项接收人是否合法 if in.Type == consts.NoticeTypeLetter { - count, _ := dao.AdminMember.Ctx(ctx).Handler(handler.FilterAuthWithField("id")).WhereIn("id", in.Receiver).Count() + count, _ := dao.AdminMember.Ctx(ctx).Handler(handler.FilterAuthWithField[any]("id")).WhereIn("id", in.Receiver).Count() if count != len(in.Receiver) { err = gerror.New("接收人不合法") return @@ -159,7 +159,7 @@ func (s *sAdminNotice) View(ctx context.Context, in *adminin.NoticeViewInp) (res // List 获取列表 func (s *sAdminNotice) List(ctx context.Context, in *adminin.NoticeListInp) (list []*adminin.NoticeListModel, totalCount int, err error) { - var memberId = contexts.GetUserId(ctx) + var memberId = contexts.GetUserId[any](ctx) if memberId <= 0 { err = gerror.New("获取用户信息失败!") return @@ -224,7 +224,7 @@ func (s *sAdminNotice) List(ctx context.Context, in *adminin.NoticeListInp) (lis // PullMessages 拉取未读消息列表 func (s *sAdminNotice) PullMessages(ctx context.Context, in *adminin.PullMessagesInp) (res *adminin.PullMessagesModel, err error) { - var memberId = contexts.GetUserId(ctx) + var memberId = contexts.GetUserId[any](ctx) if memberId <= 0 { err = gerror.New("获取用户信息失败!") return @@ -269,7 +269,7 @@ func (s *sAdminNotice) PullMessages(ctx context.Context, in *adminin.PullMessage // UnreadCount 获取所有类型消息的未读数量 func (s *sAdminNotice) UnreadCount(ctx context.Context, in *adminin.NoticeUnreadCountInp) (res *adminin.NoticeUnreadCountModel, err error) { if in.MemberId <= 0 { - if in.MemberId = contexts.GetUserId(ctx); in.MemberId <= 0 { + if in.MemberId = contexts.GetUserId[any](ctx); in.MemberId <= 0 { err = gerror.New("获取用户信息失败!") return } @@ -340,7 +340,7 @@ func (s *sAdminNotice) messageIds(ctx context.Context, memberId int64) (ids []in func (s *sAdminNotice) UpRead(ctx context.Context, in *adminin.NoticeUpReadInp) (err error) { var ( data *entity.AdminNotice - memberId = contexts.GetUserId(ctx) + memberId = contexts.GetUserId[any](ctx) ) if memberId <= 0 { @@ -361,7 +361,7 @@ func (s *sAdminNotice) UpRead(ctx context.Context, in *adminin.NoticeUpReadInp) // ReadAll 已读全部 func (s *sAdminNotice) ReadAll(ctx context.Context, in *adminin.NoticeReadAllInp) (err error) { - var memberId = contexts.GetUserId(ctx) + var memberId = contexts.GetUserId[any](ctx) if memberId <= 0 { err = gerror.New("获取用户信息失败!") return @@ -435,7 +435,7 @@ func (s *sAdminNotice) updatedReadClicks(ctx context.Context, noticeId, memberId // MessageList 我的消息列表 func (s *sAdminNotice) MessageList(ctx context.Context, in *adminin.NoticeMessageListInp) (list []*adminin.NoticeMessageListModel, totalCount int, err error) { - var memberId = contexts.GetUserId(ctx) + var memberId = contexts.GetUserId[any](ctx) if memberId <= 0 { err = gerror.New("获取用户信息失败!") return diff --git a/server/internal/logic/admin/order.go b/server/internal/logic/admin/order.go index 8ded54c..d2f80a6 100644 --- a/server/internal/logic/admin/order.go +++ b/server/internal/logic/admin/order.go @@ -70,8 +70,8 @@ func (s *sAdminOrder) AcceptRefund(ctx context.Context, in *adminin.OrderAcceptR // 更新余额 _, err = service.AdminCreditsLog().SaveBalance(ctx, &adminin.CreditsLogSaveBalanceInp{ MemberId: view.MemberId, - AppId: contexts.GetModule(ctx), - AddonsName: contexts.GetAddonName(ctx), + AppId: contexts.GetModule[any](ctx), + AddonsName: contexts.GetAddonName[any](ctx), CreditGroup: consts.CreditGroupBalanceRefund, Num: -view.Money, MapId: view.Id, @@ -217,7 +217,7 @@ func (s *sAdminOrder) Create(ctx context.Context, in *adminin.OrderCreateInp) (r res = new(adminin.OrderCreateModel) err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) { _, err = s.Model(ctx).Data(entity.AdminOrder{ - MemberId: contexts.GetUserId(ctx), + MemberId: contexts.GetUserId[any](ctx), OrderType: in.OrderType, ProductId: in.ProductId, OrderSn: orderSn, @@ -326,7 +326,7 @@ func (s *sAdminOrder) Export(ctx context.Context, in *adminin.OrderListInp) (err return } - err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName) + err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName) return } diff --git a/server/internal/logic/admin/role.go b/server/internal/logic/admin/role.go index 29e8e2d..c91a28a 100644 --- a/server/internal/logic/admin/role.go +++ b/server/internal/logic/admin/role.go @@ -39,7 +39,7 @@ func init() { // Verify 验证权限 func (s *sAdminRole) Verify(ctx context.Context, path, method string) bool { var ( - user = contexts.Get(ctx).User + user = contexts.Get[any](ctx).User err error ) @@ -69,8 +69,8 @@ func (s *sAdminRole) List(ctx context.Context, in *adminin.RoleListInp) (res *ad ) // 非超管只获取下级角色 - if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId(ctx)) { - pid = contexts.GetRoleId(ctx) + if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId[any](ctx)) { + pid = contexts.GetRoleId[any](ctx) mod = mod.WhereLike(dao.AdminRole.Columns().Tree, "%"+tree.GetIdLabel(pid)+"%") } @@ -309,7 +309,7 @@ func (s *sAdminRole) treeList(pid int64, nodes []*entity.AdminRole) (list []*adm // VerifyRoleId 验证角色ID func (s *sAdminRole) VerifyRoleId(ctx context.Context, id int64) (err error) { - mb := contexts.GetUser(ctx) + mb := contexts.GetUser[any](ctx) if mb == nil { err = gerror.New("用户信息获取失败!") return diff --git a/server/internal/logic/admin/site.go b/server/internal/logic/admin/site.go index beaae5f..a9991cf 100644 --- a/server/internal/logic/admin/site.go +++ b/server/internal/logic/admin/site.go @@ -333,6 +333,6 @@ func (s *sAdminSite) BindUserContext(ctx context.Context, claims *model.Identity LoginAt: claims.LoginAt, } - contexts.SetUser(ctx, user) + contexts.SetUser[any](ctx, user) return } diff --git a/server/internal/logic/common/upload.go b/server/internal/logic/common/upload.go index c61341b..d12df9c 100644 --- a/server/internal/logic/common/upload.go +++ b/server/internal/logic/common/upload.go @@ -26,7 +26,7 @@ func init() { // UploadFile 上传文件 func (s *sCommonUpload) UploadFile(ctx context.Context, uploadType string, file *ghttp.UploadFile) (res *sysin.AttachmentListModel, err error) { - attachment, err := storager.DoUpload(ctx, uploadType, file) + attachment, err := storager.DoUpload[any](ctx, uploadType, file) if err != nil { return } @@ -41,7 +41,7 @@ func (s *sCommonUpload) UploadFile(ctx context.Context, uploadType string, file // CheckMultipart 检查文件分片 func (s *sCommonUpload) CheckMultipart(ctx context.Context, in *sysin.CheckMultipartInp) (res *sysin.CheckMultipartModel, err error) { - data, err := storager.CheckMultipart(ctx, in.CheckMultipartParams) + data, err := storager.CheckMultipart[any](ctx, in.CheckMultipartParams) if err != nil { return nil, err } diff --git a/server/internal/logic/common/wechat.go b/server/internal/logic/common/wechat.go index 1e269db..6a779ce 100644 --- a/server/internal/logic/common/wechat.go +++ b/server/internal/logic/common/wechat.go @@ -64,7 +64,7 @@ func (s *sCommonWechat) Authorize(ctx context.Context, in *commonin.WechatAuthor prefix = g.Cfg().MustGet(ctx, "router.admin.prefix", "/admin").String() path = gmeta.Get(common.WechatAuthorizeCallReq{}, "path").String() redirectUri = basic.Domain + prefix + path - memberId = contexts.GetUserId(ctx) + memberId = contexts.GetUserId[any](ctx) state = s.GetCacheKey(in.Type, token.GetAuthKey(token.GetAuthorization(request))) scope string ) diff --git a/server/internal/logic/hook/access_log.go b/server/internal/logic/hook/access_log.go index 49af9e1..62d4239 100644 --- a/server/internal/logic/hook/access_log.go +++ b/server/internal/logic/hook/access_log.go @@ -27,11 +27,11 @@ func (s *sHook) accessLog(r *ghttp.Request) { } var ctx = r.Context() - if contexts.Get(ctx) == nil { + if contexts.Get[any](ctx) == nil { return } - contexts.SetDataMap(ctx, g.Map{ + contexts.SetDataMap[any](ctx, g.Map{ "request.takeUpTime": gtime.Now().Sub(gtime.New(r.EnterTime)).Milliseconds(), // ... }) diff --git a/server/internal/logic/hook/last_active.go b/server/internal/logic/hook/last_active.go index 0e0e81d..8680807 100644 --- a/server/internal/logic/hook/last_active.go +++ b/server/internal/logic/hook/last_active.go @@ -71,7 +71,7 @@ func (s *sHook) lastAdminActive(r *ghttp.Request) { var ( ctx = r.Context() - member = contexts.GetUser(ctx) + member = contexts.GetUser[any](ctx) ) if member == nil || member.App != consts.AppAdmin { diff --git a/server/internal/logic/middleware/admin_auth.go b/server/internal/logic/middleware/admin_auth.go index 6533843..df45e40 100644 --- a/server/internal/logic/middleware/admin_auth.go +++ b/server/internal/logic/middleware/admin_auth.go @@ -44,7 +44,7 @@ func (s *sMiddleware) AdminAuth(r *ghttp.Request) { // 验证路由访问权限 if !service.AdminRole().Verify(ctx, path, r.Method) { - g.Log().Debugf(ctx, "AdminAuth fail path:%+v, GetRoleKey:%+v, r.Method:%+v", path, contexts.GetRoleKey(ctx), r.Method) + g.Log().Debugf(ctx, "AdminAuth fail path:%+v, GetRoleKey:%+v, r.Method:%+v", path, contexts.GetRoleKey[any](ctx), r.Method) response.JsonExit(r, gcode.CodeSecurityReason.Code(), "你没有访问权限!") return } diff --git a/server/internal/logic/middleware/init.go b/server/internal/logic/middleware/init.go index 0e6a2a9..f706392 100644 --- a/server/internal/logic/middleware/init.go +++ b/server/internal/logic/middleware/init.go @@ -73,7 +73,7 @@ func (s *sMiddleware) Ctx(r *ghttp.Request) { data["request.body"] = gjson.New(r.GetBodyString()) } - contexts.Init(r, &model.Context{ + contexts.Init(r, &model.Context[any]{ Data: data, Module: getModule(r.URL.Path), }) @@ -129,13 +129,13 @@ func (s *sMiddleware) DemoLimit(r *ghttp.Request) { func (s *sMiddleware) Addon(r *ghttp.Request) { var ctx = r.Context() - if contexts.Get(ctx).Module == "" { + if contexts.Get[any](ctx).Module == "" { g.Log().Warning(ctx, "application module is not initialized.") return } // 替换掉应用模块前缀 - path := gstr.Replace(r.URL.Path, "/"+contexts.Get(ctx).Module+"/", "", 1) + path := gstr.Replace(r.URL.Path, "/"+contexts.Get[any](ctx).Module+"/", "", 1) ss := gstr.Explode("/", path) if len(ss) == 0 { g.Log().Warning(ctx, "addon was not recognized.") @@ -154,7 +154,7 @@ func (s *sMiddleware) Addon(r *ghttp.Request) { return } - contexts.SetAddonName(ctx, sk.Name) + contexts.SetAddonName[any](ctx, sk.Name) r.Middleware.Next() } @@ -171,7 +171,7 @@ func (s *sMiddleware) DeliverUserContext(r *ghttp.Request) (err error) { return } default: - contexts.SetUser(r.Context(), user) + contexts.SetUser[any](r.Context(), user) } return } diff --git a/server/internal/logic/pay/create.go b/server/internal/logic/pay/create.go index c75c598..3125052 100644 --- a/server/internal/logic/pay/create.go +++ b/server/internal/logic/pay/create.go @@ -69,9 +69,9 @@ func (s *sPay) Create(ctx context.Context, in payin.PayCreateInp) (res *payin.Pa } data := &entity.PayLog{ - MemberId: contexts.GetUserId(ctx), - AppId: contexts.GetModule(ctx), - AddonsName: contexts.GetAddonName(ctx), + MemberId: contexts.GetUserId[any](ctx), + AppId: contexts.GetModule[any](ctx), + AddonsName: contexts.GetAddonName[any](ctx), OrderSn: in.OrderSn, OrderGroup: in.OrderGroup, Openid: in.Openid, diff --git a/server/internal/logic/pay/pay.go b/server/internal/logic/pay/pay.go index 68aeec7..011531b 100644 --- a/server/internal/logic/pay/pay.go +++ b/server/internal/logic/pay/pay.go @@ -97,7 +97,7 @@ func (s *sPay) Export(ctx context.Context, in payin.PayListInp) (err error) { return } - err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName) + err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName) return } diff --git a/server/internal/logic/pay/refund.go b/server/internal/logic/pay/refund.go index 17a58d8..d9c9980 100644 --- a/server/internal/logic/pay/refund.go +++ b/server/internal/logic/pay/refund.go @@ -213,6 +213,6 @@ func (s *sPayRefund) Export(ctx context.Context, in *payin.PayRefundListInp) (er return } - err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName) + err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName) return } diff --git a/server/internal/logic/sys/attachment.go b/server/internal/logic/sys/attachment.go index 7f08ec7..b50527e 100644 --- a/server/internal/logic/sys/attachment.go +++ b/server/internal/logic/sys/attachment.go @@ -55,7 +55,7 @@ func (s *sSysAttachment) View(ctx context.Context, in *sysin.AttachmentViewInp) // List 获取附件列表 func (s *sSysAttachment) List(ctx context.Context, in *sysin.AttachmentListInp) (list []*sysin.AttachmentListModel, totalCount int, err error) { mod := s.Model(ctx) - memberId := contexts.GetUserId(ctx) + memberId := contexts.GetUserId[any](ctx) // 超管允许查看指定用户的附件 if service.AdminMember().VerifySuperId(ctx, memberId) && in.MemberId > 0 { @@ -108,7 +108,7 @@ func (s *sSysAttachment) List(ctx context.Context, in *sysin.AttachmentListInp) // ClearKind 清空上传类型 func (s *sSysAttachment) ClearKind(ctx context.Context, in *sysin.AttachmentClearKindInp) (err error) { - memberId := contexts.GetUserId(ctx) + memberId := contexts.GetUserId[any](ctx) if _, err = s.Model(ctx).Where(dao.SysAttachment.Columns().MemberId, memberId).Where(dao.SysAttachment.Columns().Kind, in.Kind).Delete(); err != nil { err = gerror.Wrap(err, "删除附件上传类型失败,请稍后重试!") } diff --git a/server/internal/logic/sys/curd_demo.go b/server/internal/logic/sys/curd_demo.go index a29159d..00658bd 100644 --- a/server/internal/logic/sys/curd_demo.go +++ b/server/internal/logic/sys/curd_demo.go @@ -129,7 +129,7 @@ func (s *sSysCurdDemo) Export(ctx context.Context, in *sysin.CurdDemoListInp) (e return } - err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName) + err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName) return } @@ -139,7 +139,7 @@ func (s *sSysCurdDemo) Edit(ctx context.Context, in *sysin.CurdDemoEditInp) (err // 修改 if in.Id > 0 { - in.UpdatedBy = contexts.GetUserId(ctx) + in.UpdatedBy = contexts.GetUserId[any](ctx) if _, err = s.Model(ctx). Fields(sysin.CurdDemoUpdateFields{}). WherePri(in.Id).Data(in).Update(); err != nil { @@ -149,7 +149,7 @@ func (s *sSysCurdDemo) Edit(ctx context.Context, in *sysin.CurdDemoEditInp) (err } // 新增 - in.CreatedBy = contexts.GetUserId(ctx) + in.CreatedBy = contexts.GetUserId[any](ctx) if _, err = s.Model(ctx, &handler.Option{FilterAuth: false}). Fields(sysin.CurdDemoInsertFields{}). Data(in).OmitEmptyData().Insert(); err != nil { @@ -163,7 +163,7 @@ func (s *sSysCurdDemo) Edit(ctx context.Context, in *sysin.CurdDemoEditInp) (err func (s *sSysCurdDemo) Delete(ctx context.Context, in *sysin.CurdDemoDeleteInp) (err error) { if _, err = s.Model(ctx).WherePri(in.Id).Data(g.Map{ - dao.SysGenCurdDemo.Columns().DeletedBy: contexts.GetUserId(ctx), + dao.SysGenCurdDemo.Columns().DeletedBy: contexts.GetUserId[any](ctx), dao.SysGenCurdDemo.Columns().DeletedAt: gtime.Now(), }).Update(); err != nil { err = gerror.Wrap(err, "删除CURD列表失败,请稍后重试!") @@ -200,7 +200,7 @@ func (s *sSysCurdDemo) View(ctx context.Context, in *sysin.CurdDemoViewInp) (res func (s *sSysCurdDemo) Status(ctx context.Context, in *sysin.CurdDemoStatusInp) (err error) { if _, err = s.Model(ctx).WherePri(in.Id).Data(g.Map{ dao.SysGenCurdDemo.Columns().Status: in.Status, - dao.SysGenCurdDemo.Columns().UpdatedBy: contexts.GetUserId(ctx), + dao.SysGenCurdDemo.Columns().UpdatedBy: contexts.GetUserId[any](ctx), }).Update(); err != nil { err = gerror.Wrap(err, "更新CURD列表状态失败,请稍后重试!") return @@ -222,7 +222,7 @@ func (s *sSysCurdDemo) Switch(ctx context.Context, in *sysin.CurdDemoSwitchInp) if _, err = s.Model(ctx).WherePri(in.Id).Data(g.Map{ in.Key: in.Value, - dao.SysGenCurdDemo.Columns().UpdatedBy: contexts.GetUserId(ctx), + dao.SysGenCurdDemo.Columns().UpdatedBy: contexts.GetUserId[any](ctx), }).Update(); err != nil { err = gerror.Wrap(err, "更新CURD列表开关失败,请稍后重试!") return diff --git a/server/internal/logic/sys/ems_log.go b/server/internal/logic/sys/ems_log.go index 3a042f0..26741e0 100644 --- a/server/internal/logic/sys/ems_log.go +++ b/server/internal/logic/sys/ems_log.go @@ -210,7 +210,7 @@ func (s *sSysEmsLog) newView(ctx context.Context, in *sysin.SendEmsInp, config * var ( username string - user = contexts.GetUser(ctx) + user = contexts.GetUser[any](ctx) request = ghttp.RequestFromCtx(ctx) ip = location.GetClientIp(request) ) diff --git a/server/internal/logic/sys/log.go b/server/internal/logic/sys/log.go index eb01e48..cafc1bb 100644 --- a/server/internal/logic/sys/log.go +++ b/server/internal/logic/sys/log.go @@ -101,7 +101,7 @@ func (s *sSysLog) Export(ctx context.Context, in *sysin.LogListInp) (err error) exportList = append(exportList, row) } - err = excel.ExportByStructs(ctx, titleList, exportList, fileName, sheetName) + err = excel.ExportByStructs[any](ctx, titleList, exportList, fileName, sheetName) return } @@ -151,7 +151,7 @@ func (s *sSysLog) AutoLog(ctx context.Context) error { // AnalysisLog 解析日志数据 func (s *sSysLog) AnalysisLog(ctx context.Context) entity.SysLog { var ( - mctx = contexts.Get(ctx) + mctx = contexts.Get[any](ctx) response = mctx.Response user = mctx.User request = ghttp.RequestFromCtx(ctx) diff --git a/server/internal/logic/sys/login_log.go b/server/internal/logic/sys/login_log.go index c83c4c3..f456c9d 100644 --- a/server/internal/logic/sys/login_log.go +++ b/server/internal/logic/sys/login_log.go @@ -115,7 +115,7 @@ func (s *sSysLoginLog) Export(ctx context.Context, in *sysin.LoginLogListInp) (e return } - err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName) + err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName) return } diff --git a/server/internal/logic/sys/normal_tree_demo.go b/server/internal/logic/sys/normal_tree_demo.go index b5772c8..8e768c7 100644 --- a/server/internal/logic/sys/normal_tree_demo.go +++ b/server/internal/logic/sys/normal_tree_demo.go @@ -100,7 +100,7 @@ func (s *sSysNormalTreeDemo) Edit(ctx context.Context, in *sysin.NormalTreeDemoE } // 修改 if in.Id > 0 { - in.UpdatedBy = contexts.GetUserId(ctx) + in.UpdatedBy = contexts.GetUserId[any](ctx) if _, err = s.Model(ctx). Fields(sysin.NormalTreeDemoUpdateFields{}). WherePri(in.Id).Data(in).Update(); err != nil { @@ -110,7 +110,7 @@ func (s *sSysNormalTreeDemo) Edit(ctx context.Context, in *sysin.NormalTreeDemoE } // 新增 - in.CreatedBy = contexts.GetUserId(ctx) + in.CreatedBy = contexts.GetUserId[any](ctx) if _, err = s.Model(ctx, &handler.Option{FilterAuth: false}). Fields(sysin.NormalTreeDemoInsertFields{}). Data(in).OmitEmptyData().Insert(); err != nil { diff --git a/server/internal/logic/sys/option_tree_demo.go b/server/internal/logic/sys/option_tree_demo.go index 78e0e24..e86477f 100644 --- a/server/internal/logic/sys/option_tree_demo.go +++ b/server/internal/logic/sys/option_tree_demo.go @@ -100,7 +100,7 @@ func (s *sSysOptionTreeDemo) Edit(ctx context.Context, in *sysin.OptionTreeDemoE } // 修改 if in.Id > 0 { - in.UpdatedBy = contexts.GetUserId(ctx) + in.UpdatedBy = contexts.GetUserId[any](ctx) if _, err = s.Model(ctx). Fields(sysin.OptionTreeDemoUpdateFields{}). WherePri(in.Id).Data(in).Update(); err != nil { @@ -110,7 +110,7 @@ func (s *sSysOptionTreeDemo) Edit(ctx context.Context, in *sysin.OptionTreeDemoE } // 新增 - in.CreatedBy = contexts.GetUserId(ctx) + in.CreatedBy = contexts.GetUserId[any](ctx) if _, err = s.Model(ctx, &handler.Option{FilterAuth: false}). Fields(sysin.OptionTreeDemoInsertFields{}). Data(in).OmitEmptyData().Insert(); err != nil { diff --git a/server/internal/logic/sys/serve_license.go b/server/internal/logic/sys/serve_license.go index 29245c7..6e76fb3 100644 --- a/server/internal/logic/sys/serve_license.go +++ b/server/internal/logic/sys/serve_license.go @@ -123,7 +123,7 @@ func (s *sSysServeLicense) Export(ctx context.Context, in *sysin.ServeLicenseLis return } - err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName) + err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName) return } diff --git a/server/internal/logic/sys/serve_log.go b/server/internal/logic/sys/serve_log.go index 6df2ed7..b181c6a 100644 --- a/server/internal/logic/sys/serve_log.go +++ b/server/internal/logic/sys/serve_log.go @@ -88,7 +88,7 @@ func (s *sSysServeLog) List(ctx context.Context, in *sysin.ServeLogListInp) (lis return } - err = mod.Fields(fields).Handler(handler.FilterAuth).Page(in.Page, in.PerPage).OrderDesc(dao.SysServeLog.Columns().Id).Scan(&list) + err = mod.Fields(fields).Handler(handler.FilterAuth[any]).Page(in.Page, in.PerPage).OrderDesc(dao.SysServeLog.Columns().Id).Scan(&list) return } @@ -115,7 +115,7 @@ func (s *sSysServeLog) Export(ctx context.Context, in *sysin.ServeLogListInp) (e return err } - err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName) + err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName) return } diff --git a/server/internal/logic/view/view.go b/server/internal/logic/view/view.go index f871050..f39b1ae 100644 --- a/server/internal/logic/view/view.go +++ b/server/internal/logic/view/view.go @@ -83,7 +83,7 @@ func (s *sView) RenderTpl(ctx context.Context, tpl string, data ...model.View) { viewData["BuildIn"] = &viewBuildIn{httpRequest: request} // 插件模板,兼容从资源文件中读取 - if addonName := contexts.GetAddonName(ctx); len(addonName) > 0 { + if addonName := contexts.GetAddonName[any](ctx); len(addonName) > 0 { basePath := addons.GetResourcePath(ctx) if len(basePath) > 0 && !gstr.Contains(tpl, basePath) { path := addons.ViewPath(addonName, basePath) diff --git a/server/internal/model/context.go b/server/internal/model/context.go index 03f5abd..899d486 100644 --- a/server/internal/model/context.go +++ b/server/internal/model/context.go @@ -11,12 +11,12 @@ import ( ) // Context 请求上下文结构 -type Context struct { - Module string // 应用模块 admin|api|home|websocket - AddonName string // 插件名称 如果不是插件模块请求,可能为空 - User *Identity // 上下文用户信息 - Response *Response // 请求响应 - Data g.Map // 自定kv变量 业务模块根据需要设置,不固定 +type Context[T any] struct { + Module string // 应用模块 admin|api|home|websocket + AddonName string // 插件名称 如果不是插件模块请求,可能为空 + User *Identity // 上下文用户信息 + Response *Response[T] // 请求响应 + Data g.Map // 自定kv变量 业务模块根据需要设置,不固定 } // Identity 通用身份模型 diff --git a/server/internal/model/input/adminin/credits_log.go b/server/internal/model/input/adminin/credits_log.go index ef13558..05d78c2 100644 --- a/server/internal/model/input/adminin/credits_log.go +++ b/server/internal/model/input/adminin/credits_log.go @@ -37,7 +37,7 @@ func (in *CreditsLogSaveBalanceInp) Filter(ctx context.Context) (err error) { } if in.AppId == "" { - in.AppId = contexts.GetModule(ctx) + in.AppId = contexts.GetModule[any](ctx) } if in.CreditGroup == "" { @@ -75,7 +75,7 @@ func (in *CreditsLogSaveIntegralInp) Filter(ctx context.Context) (err error) { } if in.AppId == "" { - in.AppId = contexts.GetModule(ctx) + in.AppId = contexts.GetModule[any](ctx) } if in.CreditGroup == "" { diff --git a/server/internal/model/input/adminin/member.go b/server/internal/model/input/adminin/member.go index 72a512d..ba10fac 100644 --- a/server/internal/model/input/adminin/member.go +++ b/server/internal/model/input/adminin/member.go @@ -287,8 +287,8 @@ func (in *MemberAddBalanceInp) Filter(ctx context.Context) (err error) { in.Remark = fmt.Sprintf("扣除余额:%v", in.OtherNum) } - in.AppId = contexts.GetModule(ctx) - in.AddonsName = contexts.GetAddonName(ctx) + in.AppId = contexts.GetModule[any](ctx) + in.AddonsName = contexts.GetAddonName[any](ctx) return } @@ -330,8 +330,8 @@ func (in *MemberAddIntegralInp) Filter(ctx context.Context) (err error) { in.Remark = fmt.Sprintf("扣除积分:%v", in.OtherNum) } - in.AppId = contexts.GetModule(ctx) - in.AddonsName = contexts.GetAddonName(ctx) + in.AppId = contexts.GetModule[any](ctx) + in.AddonsName = contexts.GetAddonName[any](ctx) return } diff --git a/server/internal/model/response.go b/server/internal/model/response.go index 43a16bc..9f376f7 100644 --- a/server/internal/model/response.go +++ b/server/internal/model/response.go @@ -3,14 +3,13 @@ // @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE -// package model // Response HTTP响应 -type Response struct { +type Response[T any] struct { Code int `json:"code" example:"0" description:"状态码"` Message string `json:"message,omitempty" example:"操作成功" description:"提示消息"` - Data interface{} `json:"data,omitempty" description:"数据集"` + Data T `json:"data,omitempty" description:"数据集"` Error interface{} `json:"error,omitempty" description:"错误信息"` Timestamp int64 `json:"timestamp" example:"1640966400" description:"服务器时间戳"` TraceID string `json:"traceID" v:"0" example:"d0bb93048bc5c9164cdee845dcb7f820" description:"链路ID"` diff --git a/server/internal/router/websocket.go b/server/internal/router/websocket.go index fefe892..33457e9 100644 --- a/server/internal/router/websocket.go +++ b/server/internal/router/websocket.go @@ -29,7 +29,7 @@ func WebSocket(ctx context.Context, group *ghttp.RouterGroup) { group.Middleware(service.Middleware().WebSocketAuth) // ws - group.GET("/", websocket.WsPage) + group.GET("/", websocket.WsPage[any]) }) // 启动websocket监听 diff --git a/server/internal/websocket/client.go b/server/internal/websocket/client.go index 5bfb159..904c5ac 100644 --- a/server/internal/websocket/client.go +++ b/server/internal/websocket/client.go @@ -55,7 +55,7 @@ type Client struct { } // NewClient 初始化 -func NewClient(r *ghttp.Request, socket *websocket.Conn, firstTime uint64) (client *Client) { +func NewClient[T any](r *ghttp.Request, socket *websocket.Conn, firstTime uint64) (client *Client) { client = &Client{ Addr: socket.RemoteAddr().String(), ID: guid.S(), @@ -65,7 +65,7 @@ func NewClient(r *ghttp.Request, socket *websocket.Conn, firstTime uint64) (clie closeSignal: make(chan struct{}, 1), FirstTime: firstTime, HeartbeatTime: firstTime, - User: contexts.GetUser(r.Context()), + User: contexts.GetUser[T](r.Context()), IP: location.GetClientIp(r), UserAgent: r.UserAgent(), } diff --git a/server/internal/websocket/init.go b/server/internal/websocket/init.go index 1383834..f7705f9 100644 --- a/server/internal/websocket/init.go +++ b/server/internal/websocket/init.go @@ -35,7 +35,7 @@ func Stop() { } // WsPage ws入口 -func WsPage(r *ghttp.Request) { +func WsPage[T any](r *ghttp.Request) { upGrader := websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, @@ -48,7 +48,7 @@ func WsPage(r *ghttp.Request) { return } currentTime := uint64(gtime.Now().Unix()) - client := NewClient(r, conn, currentTime) + client := NewClient[T](r, conn, currentTime) go client.read() go client.write() // 用户连接事件 diff --git a/server/utility/excel/excel.go b/server/utility/excel/excel.go index b9d1094..54be7ae 100644 --- a/server/utility/excel/excel.go +++ b/server/utility/excel/excel.go @@ -30,7 +30,7 @@ var ( ) // ExportByStructs 导出切片结构体到excel表格 -func ExportByStructs(ctx context.Context, tags []string, list interface{}, fileName string, sheetName string) (err error) { +func ExportByStructs[T any](ctx context.Context, tags []string, list interface{}, fileName string, sheetName string) (err error) { f := excelize.NewFile() f.SetSheetName("Sheet1", sheetName) _ = f.SetRowHeight("Sheet1", 1, 30) @@ -94,7 +94,7 @@ func ExportByStructs(ctx context.Context, tags []string, list interface{}, fileN } // 加入到上下文 - contexts.SetResponse(ctx, &model.Response{ + contexts.SetResponse(ctx, &model.Response[T]{ Code: gcode.CodeOK.Code(), Message: "export successfully!", Timestamp: time.Now().Unix(),