From 61d0988d2c4f2407c37013436c4f8bf3ea33c3ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=9F=E5=B8=85?= <133814250@qq.com> Date: Thu, 23 Feb 2023 17:53:04 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=8F=91=E5=B8=83v2.2.10=E7=89=88=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E6=9B=B4=E6=96=B0=E5=86=85=E5=AE=B9=E8=AF=B7=E6=9F=A5?= =?UTF-8?q?=E7=9C=8B=EF=BC=9Ahttps://github.com/bufanyun/hotgo/tree/v2.0/d?= =?UTF-8?q?ocs/guide-zh-CN/addon-version-upgrade.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + README.md | 108 +- docs/guide-zh-CN/README.md | 50 + docs/guide-zh-CN/addon-flow.md | 195 + docs/guide-zh-CN/addon-helper.md | 109 + docs/guide-zh-CN/addon-introduce-catalog.md | 36 + docs/guide-zh-CN/addon-version-upgrade.md | 104 + docs/guide-zh-CN/append-website.md | 21 + docs/guide-zh-CN/start-environment.md | 31 + docs/guide-zh-CN/start-installation.md | 92 + docs/guide-zh-CN/start-issue.md | 34 + docs/guide-zh-CN/start-questions.md | 21 + docs/guide-zh-CN/start-rewrite.md | 130 + docs/guide-zh-CN/start-update-log.md | 76 + docs/guide-zh-CN/sys-auth.md | 215 + docs/guide-zh-CN/sys-catalog.md | 169 + docs/guide-zh-CN/sys-console.md | 70 + docs/guide-zh-CN/sys-library.md | 69 + docs/guide-zh-CN/sys-queue.md | 155 + server/.gitignore | 6 +- server/Makefile | 22 +- server/addons/addons.go | 2 + server/addons/hgexample/README.MD | 39 + .../hgexample/api/admin/config/config.go | 28 + .../addons/hgexample/api/admin/index/index.go | 22 + .../addons/hgexample/api/admin/table/table.go | 77 + .../addons/hgexample/api/api/index/index.go | 22 + .../addons/hgexample/api/home/index/index.go | 22 + .../hgexample/api/websocket/index/index.go | 22 + .../hgexample/controller/admin/sys/config.go | 46 + .../hgexample/controller/admin/sys/index.go | 43 + .../hgexample/controller/admin/sys/table.go | 135 + .../addons/hgexample/controller/api/index.go | 43 + .../addons/hgexample/controller/home/index.go | 48 + .../hgexample/controller/websocket/index.go | 43 + server/addons/hgexample/global/global.go | 12 + server/addons/hgexample/global/init.go | 26 + .../hgexample/logic}/.gitkeep | 0 server/addons/hgexample/logic/logic.go | 9 + server/addons/hgexample/logic/sys/config.go | 54 + server/addons/hgexample/logic/sys/index.go | 35 + server/addons/hgexample/logic/sys/table.go | 244 + server/addons/hgexample/main.go | 89 + server/addons/hgexample/model/config.go | 11 + .../hgexample/model/input/sysin/config.go | 24 + .../hgexample/model/input/sysin/index.go | 27 + .../hgexample/model/input/sysin/table.go} | 76 +- server/addons/hgexample/router/admin.go | 34 + server/addons/hgexample/router/api.go | 32 + .../addons/hgexample/router/genrouter/init.go | 34 + server/addons/hgexample/router/home.go | 25 + server/addons/hgexample/router/websocket.go | 40 + server/addons/hgexample/service/.gitkeep | 0 server/addons/hgexample/service/sys.go | 76 + server/addons/modules/.gitkeep | 0 server/addons/modules/hgexample.go | 8 + server/api/admin/addons/addons.go | 62 + .../attachment/attachment.go | 2 +- .../{backend => admin}/blacklist/blacklist.go | 2 +- .../api/{backend => admin}/common/console.go | 2 +- server/api/{backend => admin}/common/ems.go | 2 +- server/api/{backend => admin}/common/site.go | 3 +- server/api/{backend => admin}/common/sms.go | 2 +- .../api/{backend => admin}/common/upload.go | 2 +- .../api/{backend => admin}/config/config.go | 3 +- server/api/{backend => admin}/cron/cron.go | 2 +- .../api/{backend => admin}/cron/cron_group.go | 2 +- .../{backend => admin}/curddemo/curddemo.go | 4 +- server/api/{backend => admin}/dept/dept.go | 2 +- .../api/{backend => admin}/dict/dict_data.go | 2 +- .../api/{backend => admin}/dict/dict_type.go | 2 +- .../api/{backend => admin}/emslog/emslog.go | 6 + .../{backend => admin}/gencodes/gencodes.go | 4 +- server/api/{backend => admin}/log/log.go | 2 +- .../{backend => admin}/loginlog/loginlog.go | 0 .../api/{backend => admin}/member/member.go | 2 +- server/api/{backend => admin}/menu/menu.go | 2 +- .../api/{backend => admin}/monitor/monitor.go | 2 +- .../api/{backend => admin}/notice/notice.go | 2 +- server/api/{backend => admin}/post/post.go | 2 +- .../{backend => admin}/provinces/provinces.go | 2 +- server/api/{backend => admin}/role/role.go | 2 +- .../{backend => admin}/servelog/servelog.go | 0 .../api/{backend => admin}/smslog/smslog.go | 0 server/api/{backend => admin}/user/hello.go | 2 +- server/api/api/member/member.go | 2 +- server/api/api/user/hello.go | 2 +- server/api/backend/test/test.go | 77 - server/api/home/base/site.go | 2 +- server/api/websocket/base/send.go | 15 + server/go.mod | 102 +- server/go.sum | 56 +- server/hack/config.yaml | 9 +- server/internal/cmd/cmd.go | 4 +- server/internal/cmd/handler_shutdown.go | 2 +- server/internal/cmd/http.go | 10 +- server/internal/cmd/queue.go | 2 +- server/internal/cmd/tools.go | 2 +- server/internal/consts/addons.go | 51 + server/internal/consts/app.go | 11 +- server/internal/consts/{redis.go => cache.go} | 9 +- server/internal/consts/config.go | 2 +- server/internal/consts/context.go | 2 +- server/internal/consts/cron.go | 2 +- server/internal/consts/debris.go | 2 +- server/internal/consts/error.go | 2 +- server/internal/consts/gencodes.go | 2 +- server/internal/consts/queue.go | 2 +- server/internal/consts/role.go | 2 +- server/internal/consts/status.go | 2 +- server/internal/consts/upload.go | 2 +- server/internal/consts/version.go | 5 +- .../{backend => admin}/admin/dept.go | 4 +- .../{backend => admin}/admin/member.go | 4 +- .../{backend => admin}/admin/menu.go | 4 +- .../{backend => admin}/admin/monitor.go | 4 +- .../{backend => admin}/admin/notice.go | 4 +- .../{backend => admin}/admin/post.go | 4 +- .../{backend => admin}/admin/role.go | 4 +- .../{backend => admin}/common/console.go | 4 +- .../{backend => admin}/common/ems.go | 4 +- .../{backend => admin}/common/site.go | 61 +- .../{backend => admin}/common/sms.go | 4 +- .../{backend => admin}/common/upload.go | 4 +- .../internal/controller/admin/sys/addons.go | 108 + .../{backend => admin}/sys/attachment.go | 4 +- .../{backend => admin}/sys/blacklist.go | 4 +- .../{backend => admin}/sys/config.go | 4 +- .../controller/{backend => admin}/sys/cron.go | 4 +- .../{backend => admin}/sys/cron_group.go | 4 +- .../{backend => admin}/sys/curd_demo.go | 76 +- .../{backend => admin}/sys/dict_data.go | 4 +- .../{backend => admin}/sys/dict_type.go | 4 +- .../{backend => admin}/sys/ems_log.go | 4 +- .../{backend => admin}/sys/gen_codes.go | 17 +- .../controller/{backend => admin}/sys/log.go | 4 +- .../{backend => admin}/sys/login_log.go | 2 +- .../{backend => admin}/sys/provinces.go | 4 +- .../{backend => admin}/sys/serve_log.go | 2 +- .../{backend => admin}/sys/sms_log.go | 6 +- .../internal/controller/api/member/member.go | 2 +- server/internal/controller/api/user/hello.go | 5 +- .../internal/controller/backend/admin/test.go | 135 - server/internal/controller/home/base/site.go | 2 +- .../websocket/handler/admin/monitor.go | 22 +- .../websocket/handler/common/site.go | 2 +- server/internal/controller/websocket/send.go | 8 +- server/internal/crons/init.go | 4 +- server/internal/crons/monitor.go | 79 - server/internal/crons/test.go | 4 +- server/internal/crons/test2.go | 4 +- server/internal/dao/addon_hgexample_table.go | 27 + .../{test.go => addon_hgexample_table.go} | 40 +- .../dao/internal/sys_addons_config.go | 99 + server/internal/dao/internal/sys_gen_codes.go | 2 + server/internal/dao/sys_addons_config.go | 27 + server/internal/dao/test.go | 27 - .../internal/global/{static.go => global.go} | 6 +- server/internal/global/init.go | 51 +- server/internal/library/addons/addons.go | 38 + server/internal/library/addons/build.go | 126 + server/internal/library/addons/install.go | 142 + server/internal/library/addons/module.go | 145 + server/internal/library/cache/cache.go | 68 +- server/internal/library/cache/file/file.go | 290 + server/internal/library/captcha/captcha.go | 2 +- server/internal/library/casbin/adapter.go | 2 +- server/internal/library/casbin/casbin_test.go | 2 +- server/internal/library/casbin/enforcer.go | 2 +- server/internal/library/contexts/context.go | 69 +- server/internal/library/ems/ems.go | 2 +- server/internal/library/hggen/hggen.go | 50 +- server/internal/library/hggen/init.go | 2 +- server/internal/library/hggen/views/column.go | 2 +- .../library/hggen/views/column_default.go | 2 +- .../library/hggen/views/column_map.go | 2 +- server/internal/library/hggen/views/curd.go | 69 +- .../hggen/views/curd_generate_input.go | 2 +- .../hggen/views/curd_generate_logic.go | 2 +- .../hggen/views/curd_generate_web_edit.go | 15 +- .../hggen/views/curd_generate_web_index.go | 14 +- .../hggen/views/curd_generate_web_model.go | 6 +- .../hggen/views/curd_generate_web_view.go | 2 +- server/internal/library/hggen/views/utils.go | 59 +- .../library/hgorm/handler/force_cache.go | 6 +- .../internal/library/hgorm/handler/handler.go | 2 +- server/internal/library/jwt/jwt.go | 10 +- server/internal/library/location/location.go | 6 +- server/internal/library/queue/disk.go | 137 + server/internal/library/queue/disk/disk.go | 118 + server/internal/library/queue/disk/reader.go | 176 + server/internal/library/queue/disk/writer.go | 102 + server/internal/library/queue/init.go | 69 +- server/internal/library/queue/kafkamq.go | 2 +- server/internal/library/queue/logger.go | 2 +- server/internal/library/queue/rocketmq.go | 2 +- .../internal/library/queue/rocketmq_logger.go | 2 +- server/internal/library/response/response.go | 2 +- server/internal/logic/admin/dept.go | 2 +- server/internal/logic/admin/member.go | 2 +- server/internal/logic/admin/member_post.go | 2 +- server/internal/logic/admin/menu.go | 6 +- server/internal/logic/admin/monitor.go | 101 + server/internal/logic/admin/notice.go | 2 +- server/internal/logic/admin/post.go | 2 +- server/internal/logic/admin/role.go | 4 +- server/internal/logic/admin/test.go | 245 - server/internal/logic/common/upload.go | 2 +- server/internal/logic/hook/access_log.go | 9 +- server/internal/logic/hook/init.go | 8 +- server/internal/logic/hook/last_active.go | 17 +- .../internal/logic/middleware/admin_auth.go | 2 +- server/internal/logic/middleware/api_auth.go | 2 +- server/internal/logic/middleware/init.go | 42 +- server/internal/logic/middleware/response.go | 2 +- server/internal/logic/middleware/weboscket.go | 2 +- server/internal/logic/sys/addons.go | 149 + server/internal/logic/sys/addons_config.go | 150 + server/internal/logic/sys/attachment.go | 3 +- server/internal/logic/sys/blacklist.go | 4 +- server/internal/logic/sys/config.go | 11 +- server/internal/logic/sys/cron.go | 2 +- server/internal/logic/sys/cron_group.go | 2 +- server/internal/logic/sys/curd_demo.go | 12 +- server/internal/logic/sys/dict_data.go | 2 +- server/internal/logic/sys/dict_type.go | 2 +- server/internal/logic/sys/ems_log.go | 2 +- server/internal/logic/sys/gen_codes.go | 37 +- server/internal/logic/sys/log.go | 54 +- server/internal/logic/sys/provinces.go | 4 +- server/internal/logic/sys/sms_log.go | 2 +- server/internal/logic/view/view.go | 2 +- server/internal/logic/view/view_buildin.go | 2 +- server/internal/model/config.go | 23 +- server/internal/model/context.go | 8 +- .../do/{test.go => addon_hgexample_table.go} | 6 +- server/internal/model/do/admin_role_dept.go | 16 - server/internal/model/do/sys_addons_config.go | 29 + server/internal/model/do/sys_gen_codes.go | 1 + .../{test.go => addon_hgexample_table.go} | 4 +- .../internal/model/entity/admin_role_dept.go | 11 - .../model/entity/sys_addons_config.go | 27 + server/internal/model/entity/sys_gen_codes.go | 1 + server/internal/model/input/adminin/dept.go | 2 +- server/internal/model/input/adminin/member.go | 2 +- server/internal/model/input/adminin/menu.go | 2 +- server/internal/model/input/adminin/notice.go | 2 +- server/internal/model/input/adminin/post.go | 2 +- server/internal/model/input/adminin/role.go | 2 +- server/internal/model/input/form/base.go | 2 +- server/internal/model/input/sysin/addons.go | 72 + .../model/input/sysin/addons_config.go | 27 + .../internal/model/input/sysin/attachment.go | 2 +- .../internal/model/input/sysin/blacklist.go | 2 +- server/internal/model/input/sysin/config.go | 2 +- server/internal/model/input/sysin/cron.go | 2 +- .../internal/model/input/sysin/cron_group.go | 2 +- .../internal/model/input/sysin/curd_demo.go | 8 +- .../internal/model/input/sysin/dict_data.go | 2 +- .../internal/model/input/sysin/dict_type.go | 2 +- server/internal/model/input/sysin/ems_log.go | 2 +- .../internal/model/input/sysin/gen_codes.go | 82 +- server/internal/model/input/sysin/log.go | 2 +- .../internal/model/input/sysin/login_log.go | 2 +- .../internal/model/input/sysin/provinces.go | 2 +- .../internal/model/input/sysin/serve_log.go | 2 +- server/internal/model/input/sysin/sms_log.go | 2 +- .../internal/model/input/websocketin/send.go | 11 +- server/internal/model/monitor.go | 2 +- server/internal/model/response.go | 2 +- server/internal/model/tree.go | 2 +- server/internal/model/view.go | 2 +- server/internal/packed/packed.go | 2 +- server/internal/queues/init.go | 2 +- server/internal/queues/login_log.go | 2 +- server/internal/queues/serve_log.go | 2 +- server/internal/queues/sys_log.go | 2 +- server/internal/router/admin.go | 14 +- server/internal/router/api.go | 6 +- server/internal/router/genrouter/curd_demo.go | 6 +- server/internal/router/home.go | 2 +- server/internal/router/websocket.go | 4 +- server/internal/service/admin.go | 128 +- server/internal/service/hook.go | 3 +- server/internal/service/middleware.go | 1 + server/internal/service/sys.go | 420 +- server/internal/websocket/client.go | 2 +- server/internal/websocket/client_manager.go | 2 +- server/internal/websocket/init.go | 2 +- server/internal/websocket/model.go | 2 +- server/internal/websocket/router.go | 2 +- server/main.go | 4 +- server/manifest/config/config.example.yaml | 101 +- .../generate/default/addon/README.MD.template | 39 + .../addon/api/admin/config/config.go.template | 28 + .../addon/api/admin/index/index.go.template | 21 + .../addon/api/api/index/index.go.template | 21 + .../addon/api/home/index/index.go.template | 21 + .../api/websocket/index/index.go.template | 21 + .../controller/admin/sys/config.go.template | 46 + .../controller/admin/sys/index.go.template | 42 + .../addon/controller/api/index.go.template | 42 + .../addon/controller/home/index.go.template | 47 + .../controller/websocket/index.go.template | 42 + .../default/addon/global/global.go.template | 12 + .../default/addon/global/init.go.template | 26 + .../generate/default/addon/logic/.gitkeep | 0 .../default/addon/logic/logic.go.template | 9 + .../addon/logic/sys/config.go.template | 60 + .../default/addon/logic/sys/index.go.template | 35 + .../generate/default/addon/main.go.template | 91 + .../default/addon/model/config.go.template | 11 + .../model/input/sysin/config.go.template | 24 + .../addon/model/input/sysin/index.go.template | 27 + .../default/addon/router/admin.go.template | 34 + .../default/addon/router/api.go.template | 32 + .../addon/router/genrouter/init.go.template | 34 + .../default/addon/router/home.go.template | 25 + .../addon/router/websocket.go.template | 40 + .../generate/default/addon/service/.gitkeep | 0 .../default/addon/service/sys.go.template | 50 + .../generate/default/curd/api.go.template | 2 +- .../default/curd/controller.go.template | 6 +- .../generate/default/curd/input.go.template | 0 .../generate/default/curd/logic.go.template | 4 +- .../generate/default/curd/router.go.template | 2 +- .../generate/default/curd/source.sql.template | 16 +- .../generate/default/curd/web.api.ts.template | 16 +- .../default/curd/web.edit.vue.template | 0 .../default/curd/web.index.vue.template | 16 +- .../default/curd/web.model.ts.template | 0 .../default/curd/web.view.vue.template | 2 +- server/resource/template/addons/.gitkeep | 0 .../template/addons/hgexample/home/index.html | 32 + .../data/generate/curd_demo_menu.sql | 0 server/{resource => storage}/data/hotgo.sql | 520 +- server/utility/auth/auth.go | 2 +- server/utility/charset/charset.go | 2 +- server/utility/convert/convert.go | 2 +- server/utility/encrypt/aes.go | 2 +- server/utility/encrypt/encrypt.go | 2 +- server/utility/excel/excel.go | 2 +- server/utility/file/file.go | 2 +- server/utility/file/mime.go | 2 +- server/utility/format/format.go | 2 +- server/utility/signal/signal.go | 2 +- server/utility/simple/simple.go | 4 +- server/utility/useragent/useragent.go | 2 +- server/utility/validate/filter.go | 2 +- server/utility/validate/include.go | 2 +- server/utility/validate/validate.go | 27 +- web/README.md | 2 +- web/package-lock.json | 24258 ---------------- web/package.json | 3 +- web/src/api/addons/hgexample/config/index.ts | 17 + .../{test => addons/hgexample/table}/index.ts | 16 +- web/src/api/develop/addons.ts | 64 + web/src/api/system/user.ts | 1 + web/src/components/IconSelector/index.vue | 2 +- web/src/components/Upload/src/BasicUpload.vue | 4 +- web/src/directives/copy.ts | 34 + web/src/directives/debounce.ts | 31 + web/src/directives/draggable.ts | 49 + web/src/directives/throttle.ts | 41 + web/src/plugins/directives.ts | 12 + web/src/router/generator-routers.ts | 1 + web/src/store/modules/user.ts | 12 +- web/src/utils/icons.ts | 17 + web/src/utils/index.ts | 4 +- web/src/utils/is/index.ts | 4 + web/src/utils/websocket.ts | 3 +- web/src/views/about/index.vue | 2 +- .../addons/hgexample/config/BasicSetting.vue | 74 + .../views/addons/hgexample/config/system.vue | 82 + .../views/addons/hgexample/portal/form.vue | 45 + .../views/addons/hgexample/portal/index.vue | 30 + .../{test => addons/hgexample/table}/edit.vue | 2 +- .../hgexample/table}/index.vue | 6 +- .../{test => addons/hgexample/table}/model.ts | 2 +- .../{test => addons/hgexample/table}/view.vue | 2 +- web/src/views/apply/provinces/model.ts | 16 - web/src/views/dashboard/console/console.vue | 4 +- .../views/develop/addons/components/model.ts | 23 + web/src/views/develop/addons/index.vue | 502 + .../develop/code/components/BaseInfo.vue | 623 +- .../views/develop/code/components/model.ts | 1 + web/src/views/develop/code/deploy.vue | 40 +- web/src/views/develop/code/index.vue | 343 +- web/src/views/home/account/CashSetting.vue | 78 +- web/src/views/login/index.vue | 30 +- .../serve-monitor/components/DataItem.vue | 88 +- .../components/chart/FullYearSalesChart.vue | 153 +- web/src/views/monitor/serve-monitor/index.vue | 201 +- web/src/views/permission/menu/menu.vue | 2 +- web/src/views/system/config/BasicSetting.vue | 152 +- web/src/views/system/config/EmailSetting.vue | 158 +- web/src/views/system/config/GeoSetting.vue | 52 +- web/src/views/system/config/SmsSetting.vue | 154 +- web/src/views/system/config/ThemeSetting.vue | 44 +- web/src/views/system/config/UploadSetting.vue | 192 +- web/src/views/system/config/system.vue | 2 +- web/yarn.lock | 16363 +++++------ 402 files changed, 18340 insertions(+), 35547 deletions(-) create mode 100644 docs/guide-zh-CN/README.md create mode 100644 docs/guide-zh-CN/addon-flow.md create mode 100644 docs/guide-zh-CN/addon-helper.md create mode 100644 docs/guide-zh-CN/addon-introduce-catalog.md create mode 100644 docs/guide-zh-CN/addon-version-upgrade.md create mode 100644 docs/guide-zh-CN/append-website.md create mode 100644 docs/guide-zh-CN/start-environment.md create mode 100644 docs/guide-zh-CN/start-installation.md create mode 100644 docs/guide-zh-CN/start-issue.md create mode 100644 docs/guide-zh-CN/start-questions.md create mode 100644 docs/guide-zh-CN/start-rewrite.md create mode 100644 docs/guide-zh-CN/start-update-log.md create mode 100644 docs/guide-zh-CN/sys-auth.md create mode 100644 docs/guide-zh-CN/sys-catalog.md create mode 100644 docs/guide-zh-CN/sys-console.md create mode 100644 docs/guide-zh-CN/sys-library.md create mode 100644 docs/guide-zh-CN/sys-queue.md create mode 100644 server/addons/addons.go create mode 100644 server/addons/hgexample/README.MD create mode 100644 server/addons/hgexample/api/admin/config/config.go create mode 100644 server/addons/hgexample/api/admin/index/index.go create mode 100644 server/addons/hgexample/api/admin/table/table.go create mode 100644 server/addons/hgexample/api/api/index/index.go create mode 100644 server/addons/hgexample/api/home/index/index.go create mode 100644 server/addons/hgexample/api/websocket/index/index.go create mode 100644 server/addons/hgexample/controller/admin/sys/config.go create mode 100644 server/addons/hgexample/controller/admin/sys/index.go create mode 100644 server/addons/hgexample/controller/admin/sys/table.go create mode 100644 server/addons/hgexample/controller/api/index.go create mode 100644 server/addons/hgexample/controller/home/index.go create mode 100644 server/addons/hgexample/controller/websocket/index.go create mode 100644 server/addons/hgexample/global/global.go create mode 100644 server/addons/hgexample/global/init.go rename server/{resource/public/plugin => addons/hgexample/logic}/.gitkeep (100%) create mode 100644 server/addons/hgexample/logic/logic.go create mode 100644 server/addons/hgexample/logic/sys/config.go create mode 100644 server/addons/hgexample/logic/sys/index.go create mode 100644 server/addons/hgexample/logic/sys/table.go create mode 100644 server/addons/hgexample/main.go create mode 100644 server/addons/hgexample/model/config.go create mode 100644 server/addons/hgexample/model/input/sysin/config.go create mode 100644 server/addons/hgexample/model/input/sysin/index.go rename server/{internal/model/input/adminin/test.go => addons/hgexample/model/input/sysin/table.go} (72%) create mode 100644 server/addons/hgexample/router/admin.go create mode 100644 server/addons/hgexample/router/api.go create mode 100644 server/addons/hgexample/router/genrouter/init.go create mode 100644 server/addons/hgexample/router/home.go create mode 100644 server/addons/hgexample/router/websocket.go create mode 100644 server/addons/hgexample/service/.gitkeep create mode 100644 server/addons/hgexample/service/sys.go create mode 100644 server/addons/modules/.gitkeep create mode 100644 server/addons/modules/hgexample.go create mode 100644 server/api/admin/addons/addons.go rename server/api/{backend => admin}/attachment/attachment.go (97%) rename server/api/{backend => admin}/blacklist/blacklist.go (97%) rename server/api/{backend => admin}/common/console.go (96%) rename server/api/{backend => admin}/common/ems.go (94%) rename server/api/{backend => admin}/common/site.go (94%) rename server/api/{backend => admin}/common/sms.go (95%) rename server/api/{backend => admin}/common/upload.go (93%) rename server/api/{backend => admin}/config/config.go (95%) rename server/api/{backend => admin}/cron/cron.go (97%) rename server/api/{backend => admin}/cron/cron_group.go (98%) rename server/api/{backend => admin}/curddemo/curddemo.go (96%) rename server/api/{backend => admin}/dept/dept.go (98%) rename server/api/{backend => admin}/dict/dict_data.go (97%) rename server/api/{backend => admin}/dict/dict_type.go (96%) rename server/api/{backend => admin}/emslog/emslog.go (87%) rename server/api/{backend => admin}/gencodes/gencodes.go (97%) rename server/api/{backend => admin}/log/log.go (98%) rename server/api/{backend => admin}/loginlog/loginlog.go (100%) rename server/api/{backend => admin}/member/member.go (98%) rename server/api/{backend => admin}/menu/menu.go (98%) rename server/api/{backend => admin}/monitor/monitor.go (98%) rename server/api/{backend => admin}/notice/notice.go (98%) rename server/api/{backend => admin}/post/post.go (98%) rename server/api/{backend => admin}/provinces/provinces.go (98%) rename server/api/{backend => admin}/role/role.go (99%) rename server/api/{backend => admin}/servelog/servelog.go (100%) rename server/api/{backend => admin}/smslog/smslog.go (100%) rename server/api/{backend => admin}/user/hello.go (90%) delete mode 100644 server/api/backend/test/test.go create mode 100644 server/api/websocket/base/send.go create mode 100644 server/internal/consts/addons.go rename server/internal/consts/{redis.go => cache.go} (53%) rename server/internal/controller/{backend => admin}/admin/dept.go (97%) rename server/internal/controller/{backend => admin}/admin/member.go (98%) rename server/internal/controller/{backend => admin}/admin/menu.go (97%) rename server/internal/controller/{backend => admin}/admin/monitor.go (97%) rename server/internal/controller/{backend => admin}/admin/notice.go (98%) rename server/internal/controller/{backend => admin}/admin/post.go (97%) rename server/internal/controller/{backend => admin}/admin/role.go (97%) rename server/internal/controller/{backend => admin}/common/console.go (92%) rename server/internal/controller/{backend => admin}/common/ems.go (96%) rename server/internal/controller/{backend => admin}/common/site.go (63%) rename server/internal/controller/{backend => admin}/common/sms.go (95%) rename server/internal/controller/{backend => admin}/common/upload.go (93%) create mode 100644 server/internal/controller/admin/sys/addons.go rename server/internal/controller/{backend => admin}/sys/attachment.go (96%) rename server/internal/controller/{backend => admin}/sys/blacklist.go (96%) rename server/internal/controller/{backend => admin}/sys/config.go (94%) rename server/internal/controller/{backend => admin}/sys/cron.go (97%) rename server/internal/controller/{backend => admin}/sys/cron_group.go (97%) rename server/internal/controller/{backend => admin}/sys/curd_demo.go (76%) rename server/internal/controller/{backend => admin}/sys/dict_data.go (96%) rename server/internal/controller/{backend => admin}/sys/dict_type.go (95%) rename server/internal/controller/{backend => admin}/sys/ems_log.go (96%) rename server/internal/controller/{backend => admin}/sys/gen_codes.go (93%) rename server/internal/controller/{backend => admin}/sys/log.go (96%) rename server/internal/controller/{backend => admin}/sys/login_log.go (98%) rename server/internal/controller/{backend => admin}/sys/provinces.go (98%) rename server/internal/controller/{backend => admin}/sys/serve_log.go (98%) rename server/internal/controller/{backend => admin}/sys/sms_log.go (96%) delete mode 100644 server/internal/controller/backend/admin/test.go delete mode 100644 server/internal/crons/monitor.go create mode 100644 server/internal/dao/addon_hgexample_table.go rename server/internal/dao/internal/{test.go => addon_hgexample_table.go} (70%) create mode 100644 server/internal/dao/internal/sys_addons_config.go create mode 100644 server/internal/dao/sys_addons_config.go delete mode 100644 server/internal/dao/test.go rename server/internal/global/{static.go => global.go} (74%) create mode 100644 server/internal/library/addons/addons.go create mode 100644 server/internal/library/addons/build.go create mode 100644 server/internal/library/addons/install.go create mode 100644 server/internal/library/addons/module.go create mode 100644 server/internal/library/cache/file/file.go create mode 100644 server/internal/library/queue/disk.go create mode 100644 server/internal/library/queue/disk/disk.go create mode 100644 server/internal/library/queue/disk/reader.go create mode 100644 server/internal/library/queue/disk/writer.go create mode 100644 server/internal/logic/admin/monitor.go delete mode 100644 server/internal/logic/admin/test.go create mode 100644 server/internal/logic/sys/addons.go create mode 100644 server/internal/logic/sys/addons_config.go rename server/internal/model/do/{test.go => addon_hgexample_table.go} (89%) delete mode 100644 server/internal/model/do/admin_role_dept.go create mode 100644 server/internal/model/do/sys_addons_config.go rename server/internal/model/entity/{test.go => addon_hgexample_table.go} (96%) delete mode 100644 server/internal/model/entity/admin_role_dept.go create mode 100644 server/internal/model/entity/sys_addons_config.go create mode 100644 server/internal/model/input/sysin/addons.go create mode 100644 server/internal/model/input/sysin/addons_config.go create mode 100644 server/resource/generate/default/addon/README.MD.template create mode 100644 server/resource/generate/default/addon/api/admin/config/config.go.template create mode 100644 server/resource/generate/default/addon/api/admin/index/index.go.template create mode 100644 server/resource/generate/default/addon/api/api/index/index.go.template create mode 100644 server/resource/generate/default/addon/api/home/index/index.go.template create mode 100644 server/resource/generate/default/addon/api/websocket/index/index.go.template create mode 100644 server/resource/generate/default/addon/controller/admin/sys/config.go.template create mode 100644 server/resource/generate/default/addon/controller/admin/sys/index.go.template create mode 100644 server/resource/generate/default/addon/controller/api/index.go.template create mode 100644 server/resource/generate/default/addon/controller/home/index.go.template create mode 100644 server/resource/generate/default/addon/controller/websocket/index.go.template create mode 100644 server/resource/generate/default/addon/global/global.go.template create mode 100644 server/resource/generate/default/addon/global/init.go.template create mode 100644 server/resource/generate/default/addon/logic/.gitkeep create mode 100644 server/resource/generate/default/addon/logic/logic.go.template create mode 100644 server/resource/generate/default/addon/logic/sys/config.go.template create mode 100644 server/resource/generate/default/addon/logic/sys/index.go.template create mode 100644 server/resource/generate/default/addon/main.go.template create mode 100644 server/resource/generate/default/addon/model/config.go.template create mode 100644 server/resource/generate/default/addon/model/input/sysin/config.go.template create mode 100644 server/resource/generate/default/addon/model/input/sysin/index.go.template create mode 100644 server/resource/generate/default/addon/router/admin.go.template create mode 100644 server/resource/generate/default/addon/router/api.go.template create mode 100644 server/resource/generate/default/addon/router/genrouter/init.go.template create mode 100644 server/resource/generate/default/addon/router/home.go.template create mode 100644 server/resource/generate/default/addon/router/websocket.go.template create mode 100644 server/resource/generate/default/addon/service/.gitkeep create mode 100644 server/resource/generate/default/addon/service/sys.go.template rename server/resource/{template => }/generate/default/curd/api.go.template (98%) rename server/resource/{template => }/generate/default/curd/controller.go.template (97%) rename server/resource/{template => }/generate/default/curd/input.go.template (100%) rename server/resource/{template => }/generate/default/curd/logic.go.template (98%) rename server/resource/{template => }/generate/default/curd/router.go.template (87%) rename server/resource/{template => }/generate/default/curd/source.sql.template (80%) rename server/resource/{template => }/generate/default/curd/web.api.ts.template (79%) rename server/resource/{template => }/generate/default/curd/web.edit.vue.template (100%) rename server/resource/{template => }/generate/default/curd/web.index.vue.template (94%) rename server/resource/{template => }/generate/default/curd/web.model.ts.template (100%) rename server/resource/{template => }/generate/default/curd/web.view.vue.template (96%) create mode 100644 server/resource/template/addons/.gitkeep create mode 100644 server/resource/template/addons/hgexample/home/index.html rename server/{resource => storage}/data/generate/curd_demo_menu.sql (100%) rename server/{resource => storage}/data/hotgo.sql (93%) delete mode 100644 web/package-lock.json create mode 100644 web/src/api/addons/hgexample/config/index.ts rename web/src/api/{test => addons/hgexample/table}/index.ts (74%) create mode 100644 web/src/api/develop/addons.ts create mode 100644 web/src/directives/copy.ts create mode 100644 web/src/directives/debounce.ts create mode 100644 web/src/directives/draggable.ts create mode 100644 web/src/directives/throttle.ts create mode 100644 web/src/utils/icons.ts create mode 100644 web/src/views/addons/hgexample/config/BasicSetting.vue create mode 100644 web/src/views/addons/hgexample/config/system.vue create mode 100644 web/src/views/addons/hgexample/portal/form.vue create mode 100644 web/src/views/addons/hgexample/portal/index.vue rename web/src/views/{test => addons/hgexample/table}/edit.vue (99%) rename web/src/views/{test => addons/hgexample/table}/index.vue (97%) rename web/src/views/{test => addons/hgexample/table}/model.ts (99%) rename web/src/views/{test => addons/hgexample/table}/view.vue (99%) create mode 100644 web/src/views/develop/addons/components/model.ts create mode 100644 web/src/views/develop/addons/index.vue diff --git a/.gitignore b/.gitignore index 7f6a9bb..2b18e39 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ *.zip .idea .user.ini +.DS_Store pull.bat push.sh /dist diff --git a/README.md b/README.md index 46da819..47607e2 100644 --- a/README.md +++ b/README.md @@ -28,20 +28,21 @@ ## 平台简介 -* 基于全新Go Frame 2+Vue3+Naive UI开发的全栈前后端分离的管理系统 -* 前端采用naive-ui-admin 、Vue、Naive UI。 +* 基于全新Go Frame 2+Vue3+Naive UI+UinApp开发的全栖框架,为二次开发而生,适合中小型完整应用开发。 +* 前端采用naive-ui-admin 、Vue、Naive UI、UinApp。 ## 特征 -* 高生产率:几分钟即可搭建一个后台管理系统 -* 模块化:单应用多系统的模式,将一个完整的应用拆分为多个系统,后续扩展更加便捷,增加代码复用性。 -* 插件化: 可通过插件的方式扩展系统功能 -* 认证机制:采用jwt的用户状态认证及casbin的权限认证 -* 路由模式:得利于goframe2.0提供了规范化的路由注册方式,无需注解自动生成api文档 -* 面向接口开发 +* 高生产率:极强的可扩展性,应用化、模块化、插件化机制敏捷开发,几分钟即可搭建一个应用开发骨架。 +* 多应用入口:多入口分为 Admin (后台)、Home (前台页面)、Api (对外通用接口)、Websocket (即时通讯接口),不同的业务,进入不同的应用入口。 +* 极致的插件化: 微核架构,功能隔离,高可定制性,可以渐进式开发,亦可以多人协同开发。支持一键创建插件模板、一键安装、更新、卸载插件、可以非常方便的将插件迁移到新项目中。 +* 快速生成代码:无需编写代码,只需创建表进行简单配置就能生成一个完善的 CURD、树表等常用的开发代码,其中所需表单控件也是勾选即可直接生成。 +* 认证机制:采用 JWT 的用户状态认证及 casbin 的权限认证 +* 路由模式:得益于 goframe2.0 提供了规范化的路由注册方式,无需注解自动生成api文档 +* 模块化设计,面向接口开发 -## 内置功能 +## 后台内置功能 1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2. 部门管理:配置系统组织机构(公司、部门、岗位),树结构展现支持数据权限。 @@ -56,12 +57,13 @@ 11. 在线用户:当前系统中活跃用户状态监控。 12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 13. 代码生成:支持自动化生成前后端代码。CURD关联表、树表、消息队列、定时任务一键生成等。 -14. 服务监控:监视当前系统CPU、内存、磁盘、网络、堆栈等相关信息。 -15. 附件管理:文件上传,多种上传方式适配。 -16. 消息队列:同时兼容 kafka、redis、rocketmq、磁盘队列,一键配置切换到场景适用的MQ。 -17. 通知公告:采用websocket实时推送在线用户最新通知、公告、私信消息。 -18. 地区编码:整合国内通用省市区编码,运用于项目于一身,支持动态省市区选项。 -19. 常用工具:集成常用的工具包和命令行工具,可以快速开发自定义命令行,多种启动入口。 +14. 插件应用:支持一键生成插件模板,每个插件之间开发隔离,拥有独立多应用入口、独立配置。完美支持多人协同开发、插件插拔不会对原系统产生影响等。 +15. 服务监控:监视当前系统CPU、内存、磁盘、网络、堆栈等相关信息。 +16. 附件管理:文件上传,多种上传方式适配。 +17. 消息队列:同时兼容 kafka、redis、rocketmq、磁盘队列,一键配置切换到场景适用的MQ。 +18. 通知公告:采用websocket实时推送在线用户最新通知、公告、私信消息。 +19. 地区编码:整合国内通用省市区编码,运用于项目于一身,支持动态省市区选项。 +20. 常用工具:集成常用的工具包和命令行工具,可以快速开发自定义命令行,多种启动入口。 > HotGo开源以来得到了大家的很多支持,本项目初衷只为互相学习交流,没有任何盈利性目的!欢迎为HotGo贡献代码或提供建议! @@ -70,81 +72,9 @@ - [https://hotgo.facms.cn/admin](https://hotgo.facms.cn/admin) > 账号:admin 密码:123456 +### 使用文档 -## 环境要求 -- node版本 >= v16.0.0 -- golang版本 >= v1.18 -- gf版本 >=v2.3.1 (会保持同步gf最新版本,gf小版本更新可能存在兼容问题,旧版本需自行处理,如非必要不建议更新!) -- IDE推荐:Goland -- mysql版本 >=5.7 -- redis版本 >=3.0 - -## 快速开始 -一、拉取代码到你已经安装好以上环境的服务器中 - ```shell script -git clone https://github.com/bufanyun/hotgo.git && cd hotgo - ``` - -二、配置你的站点信息 - -服务端: -- 项目数据库文件 `resource/data/db.sql` 创建数据库并导入 -- 修改配置 `manifest/config/config.yaml.bak` 复制改为`manifest/config/config.yaml` - - -后台前端: -- 配置服务端地址,包含在以下文件中: -* /hotgo/web/.env.development -* /hotgo/web/.env.production -* /hotgo/web/.env - -其中必改配置 -``` -VITE_PROXY=[["/admin","http://你的IP:8000/admin"]] -``` - -三、 启动服务 -服务端: - ```shell script - cd server - - # 设置国内代理,如果已经设置好了代理可以跳过 - go env -w GOPROXY=https://goproxy.io,direct - - # 更新包 - go mod tidy - - # 查看命令行方法 - go run main.go hlep - - # 启动所有服务 - go run main.go # 热编译启动: gf run main.go - - # 如果顺利,至此到浏览器打开:http://你的IP:8000/admin,即可看到后台登录地址 - # 登录账号:admin, 密码:123456 - # 好奇为什么没有运行前端代码就能将后台运行起来?这要得益于gf强大的pack功能! - # 当然这只是为了降低运行门槛,如果想对前端进行开发请继续往下看 - -``` - -web端: - ```shell script - cd web - # 首先确定你以安装node16.0以上版本并安装了包[npm、yarn],否则可能会出现一些未知报错 - - # 安装依赖 - yarn install - - # 启动web项目 - yarn dev - - # 如果顺利,至此到浏览器打开:http://你的IP:8001/admin -``` - - -## 文档地址 -> 文档正在书写中,请耐心等一等。 - +[安装文档](docs/guide-zh-CN/start-installation.md) · [本地文档](docs/guide-zh-CN/README.md) · [更新历史](docs/guide-zh-CN/start-update-log.md) · [常见问题](docs/guide-zh-CN/start-issue.md) ## 演示图 diff --git a/docs/guide-zh-CN/README.md b/docs/guide-zh-CN/README.md new file mode 100644 index 0000000..a950be8 --- /dev/null +++ b/docs/guide-zh-CN/README.md @@ -0,0 +1,50 @@ +## 目录 + +#### 介绍安装 + +- [系统介绍](../../README.md) +- [环境搭建](start-environment.md) +- [系统安装](start-installation.md) +- 生产部署 +- [如何提问](start-questions.md) +- [常见问题](start-issue.md) +- [更新历史](start-update-log.md) + + +#### 系统开发 + +- [目录结构](sys-catalog.md) +- 开发规范 +- [控制台](sys-console.md) +- 请求中间件和WebHook +- 权限控制 +- 代码生成 +- 定时任务 +- [消息队列](sys-queue.md) +- [功能扩展库](sys-library.md) +- 工具方法 +- RESTful Api +- Websocket服务器 +- 单元测试 + +#### 插件模块开发 + +- [模块介绍及目录](addon-introduce-catalog.md) +- [模块开发流程](addon-flow.md) +- [模块辅助说明](addon-helper.md) + + +#### 实战开发 +- 服务端 +- web前端 + + +### 前端开发 +- 表单组件 +- 权限 +- Websocket客户端 +- 工具库 +- 发布部署 + +#### 附录 +- [网址收录](append-website.md) \ No newline at end of file diff --git a/docs/guide-zh-CN/addon-flow.md b/docs/guide-zh-CN/addon-flow.md new file mode 100644 index 0000000..9098fa3 --- /dev/null +++ b/docs/guide-zh-CN/addon-flow.md @@ -0,0 +1,195 @@ +## 模块开发流程 + +目录 + +- 创建新插件 +- 开发 +- 调用主模块服务接口 +- 访问路径 +- 数据迁移 + + + +### 创建新插件 + +1、HotGo 后台进入 开发工具->插件管理->找到创建新插件,根据引导进行创建即可。 + +> 创建成功后会在 根目录的 addons 目录下生成插件文件 + +2、创建插件完毕重启服务端后,插件管理中会出现你新创建的插件信息。操作栏有几个按钮,在此进行说明 +- 安装:会自动执行 server/xxx插件/main.go 文件中的Install方法,方法中的具体逻辑默认为空,可以根据实际情况自行配置。如生成后台菜单、生成插件配置表初始化数据、迁移home页面、web项目文件等。 +``` +// Install 安装模块 +func (m *module) Install(ctx context.Context) (err error) { + // ... + return +} +``` + +- 更新:会自动执行 server/xxx插件/main.go 文件中的Upgrade方法,方法中的具体逻辑默认为空,可以根据实际情况自行配置。 +``` +// Upgrade 更新模块 +func (m *module) Upgrade(ctx context.Context) (err error) { + // ... + return +} +``` + +- 卸载:会自动执行 server/xxx插件/main.go 文件中的UnInstall方法,方法中的具体逻辑默认为空,可以根据实际情况自行配置。如会清除所有的数据表和已安装的信息等。 +``` +// UnInstall 卸载模块 +func (m *module) UnInstall(ctx context.Context) (err error) { + // ... + return +} +``` + + + +### 开发 + +完全可以根据HotGo正常的开发流程去开发对应的API、控制器、业务逻辑、插件内的应用 + +### 调用主模块服务接口 + +这里推荐的方式是在插件input层新建一个结构,继承主模块中的input结构。这样做的目的是为了服务与服务之间的输入/输出关系解耦,便于参数扩展和避免插件模块下使用`gf gen service`时出现`import cycle not allowed`。 + +一个简单的例子: +> 假设hgexample插件模块要通过主模块的服务接口更新插件配置 + +文件:\server\addons\hgexample\model\input\sysin\config.go +```go +package sysin + +import ( + "hotgo/internal/model/input/sysin" +) + +// UpdateConfigInp 更新指定配置 +type UpdateConfigInp struct { + sysin.UpdateAddonsConfigInp +} + +``` + +插件模块业务逻辑:\server\addons\hgexample\logic\sys\config.go +```go +package sys + +import ( + "context" + "hotgo/addons/hgexample/global" + "hotgo/addons/hgexample/model/input/sysin" + "hotgo/addons/hgexample/service" + isc "hotgo/internal/service" +) + +type sSysConfig struct{} + +func NewSysConfig() *sSysConfig { + return &sSysConfig{} +} + +func init() { + service.RegisterSysConfig(NewSysConfig()) +} + +// UpdateConfigByGroup 更新指定分组的配置 +func (s *sSysConfig) UpdateConfigByGroup(ctx context.Context, in sysin.UpdateConfigInp) error { + in.UpdateAddonsConfigInp.AddonName = global.GetSkeleton().Name + return isc.SysAddonsConfig().UpdateConfigByGroup(ctx, in.UpdateAddonsConfigInp) +} + +``` + +主模块input:\server\internal\model\input\sysin\addons_config.go +```go +package sysin + +import ( + "github.com/gogf/gf/v2/frame/g" +) + +// UpdateAddonsConfigInp 更新指定插件的配置 +type UpdateAddonsConfigInp struct { + AddonName string `json:"addonName"` + Group string `json:"group"` + List g.Map `json:"list"` +} + +``` + +主模块业务逻辑:\server\internal\logic\sys\addons_config.go +```go +package sys + +import ( + "context" + "hotgo/internal/model/input/sysin" + "hotgo/internal/service" +) + +type sSysAddonsConfig struct{} + +func NewSysAddonsConfig() *sSysAddonsConfig { + return &sSysAddonsConfig{} +} + +func init() { + service.RegisterSysAddonsConfig(NewSysAddonsConfig()) +} + +// UpdateConfigByGroup 更新指定分组的配置 +func (s *sSysAddonsConfig) UpdateConfigByGroup(ctx context.Context, in sysin.UpdateAddonsConfigInp) error { + // ... + return nil +} + +``` + + + + +### 访问路径 + +#### 后台插件访问路径 + +``` +// IP+端口或域名/admin/插件名称/API路径 +如:127.0.0.1:8000/admin/hgexample/index/test +``` + +对应控制器路径:`server/addons/hgexample/controller/admin/sys/index.go` + +#### 前端API插件访问路径 + +``` +// IP+端口或域名/api/插件名称/API路径 +如:127.0.0.1:8000/api/hgexample/index/test +``` + +对应控制器路径:`server/addons/hgexample/controller/api/index.go` + +#### 前台页面插件访问路径 + +``` +// IP+端口或域名/home/插件名称/API路径 +如:127.0.0.1:8000/home/hgexample/index/test +``` + +对应控制器路径:`server/addons/hgexample/controller/home/index.go` + + +#### Websocket插件访问路径 + +``` +// IP+端口或域名/socket/插件名称/API路径 +如:127.0.0.1:8000/socket/hgexample/index/test +``` + +对应控制器路径:`server/addons/hgexample/controller/socket/index.go` + + +### 数据迁移 + +可以将数据迁移逻辑写进server/xxx插件/main.go 文件中的Install方法中,并遵循系统规范进行数据安装 diff --git a/docs/guide-zh-CN/addon-helper.md b/docs/guide-zh-CN/addon-helper.md new file mode 100644 index 0000000..3aa4c39 --- /dev/null +++ b/docs/guide-zh-CN/addon-helper.md @@ -0,0 +1,109 @@ +## 模块辅助说明 + +目录 + +- 模块结构 +- 获取模块信息 +- 插件路由规则 + + +#### 模块结构 +```go +// Skeleton 模块骨架 +type Skeleton struct { + Label string `json:"label"` // 标识 + Name string `json:"name"` // 名称 + Group int `json:"group"` // 分组 + Logo string `json:"logo"` // logo + Brief string `json:"brief"` // 简介 + Description string `json:"description"` // 详细描述 + Author string `json:"author"` // 作者 + Version string `json:"version"` // 版本号 + RootPath string `json:"rootPath"` // 根路径 +} + +func (s *Skeleton) GetModule() Module { + return GetModule(s.Name) +} + +// Module 插件模块 +type Module interface { + Init(ctx context.Context) // 初始化 + InitRouter(ctx context.Context, group *ghttp.RouterGroup) // 初始化并注册路由 + Ctx() context.Context // 上下文 + GetSkeleton() *Skeleton // 架子 + Install(ctx context.Context) error // 安装模块 + Upgrade(ctx context.Context) error // 更新模块 + UnInstall(ctx context.Context) error // 卸载模块 +} +``` + +#### 获取模块信息 + +- 在插件模块内 +```go +package main + +import ( + "fmt" + "hotgo/addons/hgexample/global" +) + +func test() { + fmt.Printf("当前插件模块是:%+v", global.GetSkeleton()) +} +``` + +- 在插件模块外 +```go +package main + +import ( + "context" + "fmt" + "hotgo/internal/library/addons" + "hotgo/internal/library/contexts" +) + +func test(ctx context.Context) { + fmt.Printf("当前是否为插件请求:%v", contexts.IsAddonRequest(ctx)) + if contexts.IsAddonRequest(ctx) { + fmt.Printf("当前插件名称:%v", contexts.GetAddonName(ctx)) + fmt.Printf("当前插件信息:%v", addons.GetModule(contexts.GetAddonName(ctx))) + } +} +``` + +- 更多辅助方法请参考:\server\internal\library\addons + +#### 插件路由规则 +- 如果你不喜欢现在的路由风格,可以自行调整。修改位置在:\server\internal\library\addons\addons.go的RouterPrefix方法。 +- 调整后如web前端页面中有之前的路由风格也需同步修改。 + +```go +package main + +import ( + "context" + "github.com/gogf/gf/v2/frame/g" + "hotgo/internal/consts" +) + +// RouterPrefix 路由前缀 +// 最终效果:/应用名称/插件模块名称/xxx/xxx +func RouterPrefix(ctx context.Context, app, name string) string { + var prefix = "/" + switch app { + case consts.AppAdmin: + prefix = g.Cfg().MustGet(ctx, "router.admin.prefix", "/admin").String() + case consts.AppApi: + prefix = g.Cfg().MustGet(ctx, "router.api.prefix", "/api").String() + case consts.AppHome: + prefix = g.Cfg().MustGet(ctx, "router.home.prefix", "/home").String() + case consts.AppWebSocket: + prefix = g.Cfg().MustGet(ctx, "router.ws.prefix", "/socket").String() + } + + return prefix + "/" + name +} +``` \ No newline at end of file diff --git a/docs/guide-zh-CN/addon-introduce-catalog.md b/docs/guide-zh-CN/addon-introduce-catalog.md new file mode 100644 index 0000000..8591ded --- /dev/null +++ b/docs/guide-zh-CN/addon-introduce-catalog.md @@ -0,0 +1,36 @@ +## 模块介绍及目录 + +目录 + +- 模块介绍 +- 启动流程 +- 目录结构 + +### 模块介绍 + +> 定位:开发独立、临时性、工具类型的功能时推荐使用插件化开发,例如:小游戏(大转盘/消消乐/抽奖/大屏互动/红包等)、小插件(广告管理/文章管理/友情链接等等)、小模块(报名/投票/签到)、小程序、大型插件微商城等等。 + +> 插件模块方便多项目复用,同时完美支持多人协同开发,每个插件模块都有独立的微架构目录结构,多插件之间完全隔离。 + +### 启动流程 + +HotGo 入口文件->隐式注入(hotgo/addons/modules)->注册所有插件->初始化已安装的插件->写入路由组->根据 HotGo 正常的开发和访问流程去开发访问插件 + + +### 目录结构 +- 详细介绍请参考:[目录结构](sys-catalog.md) +``` +/server +├── addons +│ ├── modules +│ ├── xxx插件 +│ | ├── api +│ | ├── controller +│ | ├── global +│ | ├── logic +│ | ├── model +│ | ├── router +│ | ├── service +│ | ├── main.go +│ | └── README.md +``` diff --git a/docs/guide-zh-CN/addon-version-upgrade.md b/docs/guide-zh-CN/addon-version-upgrade.md new file mode 100644 index 0000000..0fac9a4 --- /dev/null +++ b/docs/guide-zh-CN/addon-version-upgrade.md @@ -0,0 +1,104 @@ +## RageFrame 2.x 插件升级到 3.x + +目录 + +- 路由替换 +- 配置移除 +- UI 替换 +- Icons 替换 +- 表单组件 替换 +- 安装 + +> 注意:默认当已安装 PhpStorm 等可以批量替换的编译器/软件 + +### 路由替换 + +1. 查找 `插件/common/config` 目录 + +2. 替换 `route` 为 `name` + +### 配置移除 + +1. 查找 `插件/AddonConfig.php` 文件 + +2. 找到 `appsConfig` 变量的 `merapi` 删除掉,移除掉以后的配置 + +``` +public $appsConfig = [ + 'backend' => 'common/config/backend.php', + 'frontend' => 'common/config/frontend.php', + 'merchant' => 'common/config/merchant.php', + 'html5' => 'common/config/html5.php', + 'api' => 'common/config/api.php', + 'oauth2' => 'common/config/oauth2.php', +]; +``` + +### UI 替换 + +1. 查找 `插件` 目录 + +2. 替换 `
Hello,@{.Data.name}!!
+@{.Data.module}
+服务器时间:@{.Data.time}
+"` +} diff --git a/server/addons/hgexample/api/websocket/index/index.go b/server/addons/hgexample/api/websocket/index/index.go new file mode 100644 index 0000000..f8aaf38 --- /dev/null +++ b/server/addons/hgexample/api/websocket/index/index.go @@ -0,0 +1,22 @@ +// Package index +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +// +package index + +import ( + "github.com/gogf/gf/v2/frame/g" + "hotgo/addons/hgexample/model/input/sysin" +) + +// TestReq 测试 +type TestReq struct { + g.Meta `path:"/index/test" method:"get" tags:"功能案例" summary:"测试"` + sysin.IndexTestInp +} + +type TestRes struct { + *sysin.IndexTestModel +} diff --git a/server/addons/hgexample/controller/admin/sys/config.go b/server/addons/hgexample/controller/admin/sys/config.go new file mode 100644 index 0000000..0d91c50 --- /dev/null +++ b/server/addons/hgexample/controller/admin/sys/config.go @@ -0,0 +1,46 @@ +// Package sys +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package sys + +import ( + "context" + "github.com/gogf/gf/v2/util/gconv" + "hotgo/addons/hgexample/model/input/sysin" + "hotgo/addons/hgexample/service" + "hotgo/api/admin/config" + isysin "hotgo/internal/model/input/sysin" +) + +var ( + Config = cConfig{} +) + +type cConfig struct{} + +// GetConfig 获取指定分组的配置 +func (c *cConfig) GetConfig(ctx context.Context, req *config.GetReq) (res *config.GetRes, err error) { + var in sysin.GetConfigInp + if err = gconv.Scan(req, &in); err != nil { + return + } + + data, err := service.SysConfig().GetConfigByGroup(ctx, in) + + res = new(config.GetRes) + res.GetConfigModel = (*isysin.GetConfigModel)(data) + return +} + +// UpdateConfig 更新指定分组的配置 +func (c *cConfig) UpdateConfig(ctx context.Context, req *config.UpdateReq) (res *config.UpdateRes, err error) { + var in sysin.UpdateConfigInp + if err = gconv.Scan(req, &in); err != nil { + return + } + + err = service.SysConfig().UpdateConfigByGroup(ctx, in) + return +} diff --git a/server/addons/hgexample/controller/admin/sys/index.go b/server/addons/hgexample/controller/admin/sys/index.go new file mode 100644 index 0000000..502e990 --- /dev/null +++ b/server/addons/hgexample/controller/admin/sys/index.go @@ -0,0 +1,43 @@ +// Package sys +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +// +package sys + +import ( + "context" + "github.com/gogf/gf/v2/util/gconv" + "hotgo/addons/hgexample/api/admin/index" + "hotgo/addons/hgexample/model/input/sysin" + "hotgo/addons/hgexample/service" + "hotgo/utility/validate" +) + +var ( + Index = cIndex{} +) + +type cIndex struct{} + +// Test 测试 +func (c *cIndex) Test(ctx context.Context, req *index.TestReq) (res *index.TestRes, err error) { + var in sysin.IndexTestInp + if err = gconv.Scan(req, &in); err != nil { + return nil, err + } + + if err = validate.PreFilter(ctx, &in); err != nil { + return nil, err + } + + data, err := service.SysIndex().Test(ctx, in) + if err != nil { + return + } + + res = new(index.TestRes) + res.IndexTestModel = data + return +} diff --git a/server/addons/hgexample/controller/admin/sys/table.go b/server/addons/hgexample/controller/admin/sys/table.go new file mode 100644 index 0000000..50d9fb1 --- /dev/null +++ b/server/addons/hgexample/controller/admin/sys/table.go @@ -0,0 +1,135 @@ +// Package sys +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +// +package sys + +import ( + "context" + "github.com/gogf/gf/v2/util/gconv" + "hotgo/addons/hgexample/api/admin/table" + "hotgo/addons/hgexample/model/input/sysin" + "hotgo/addons/hgexample/service" + "hotgo/internal/model/input/form" + "hotgo/utility/validate" +) + +var ( + Table = cTable{} +) + +type cTable struct{} + +// List 查看列表 +func (c *cTable) List(ctx context.Context, req *table.ListReq) (res *table.ListRes, err error) { + var in sysin.TableListInp + if err = gconv.Scan(req, &in); err != nil { + return + } + + if err = validate.PreFilter(ctx, &in); err != nil { + return + } + + list, totalCount, err := service.SysTable().List(ctx, in) + if err != nil { + return + } + + res = new(table.ListRes) + res.List = list + res.PageCount = form.CalPageCount(totalCount, req.PerPage) + res.Page = req.Page + res.PerPage = req.PerPage + return +} + +// Export 导出列表 +func (c *cTable) Export(ctx context.Context, req *table.ExportReq) (res *table.ExportRes, err error) { + var in sysin.TableListInp + if err = gconv.Scan(req, &in); err != nil { + return + } + + err = service.SysTable().Export(ctx, in) + return +} + +// Edit 更新 +func (c *cTable) Edit(ctx context.Context, req *table.EditReq) (res *table.EditRes, err error) { + var in sysin.TableEditInp + if err = gconv.Scan(req, &in); err != nil { + return + } + + if err = validate.PreFilter(ctx, &in); err != nil { + return + } + + err = service.SysTable().Edit(ctx, in) + return +} + +// MaxSort 最大排序 +func (c *cTable) MaxSort(ctx context.Context, req *table.MaxSortReq) (res *table.MaxSortRes, err error) { + data, err := service.SysTable().MaxSort(ctx, sysin.TableMaxSortInp{}) + if err != nil { + return + } + + res = new(table.MaxSortRes) + res.TableMaxSortModel = data + return +} + +// View 获取指定信息 +func (c *cTable) View(ctx context.Context, req *table.ViewReq) (res *table.ViewRes, err error) { + var in sysin.TableViewInp + if err = gconv.Scan(req, &in); err != nil { + return + } + + data, err := service.SysTable().View(ctx, in) + if err != nil { + return + } + + res = new(table.ViewRes) + res.TableViewModel = data + return +} + +// Delete 删除 +func (c *cTable) Delete(ctx context.Context, req *table.DeleteReq) (res *table.DeleteRes, err error) { + var in sysin.TableDeleteInp + if err = gconv.Scan(req, &in); err != nil { + return + } + + err = service.SysTable().Delete(ctx, in) + return +} + +// Status 更新状态 +func (c *cTable) Status(ctx context.Context, req *table.StatusReq) (res *table.StatusRes, err error) { + var in sysin.TableStatusInp + if err = gconv.Scan(req, &in); err != nil { + return + } + + err = service.SysTable().Status(ctx, in) + return +} + +// Switch 更新开关状态 +func (c *cTable) Switch(ctx context.Context, req *table.SwitchReq) (res *table.SwitchRes, err error) { + var in sysin.TableSwitchInp + if err = gconv.Scan(req, &in); err != nil { + return + } + + err = service.SysTable().Switch(ctx, in) + return +} diff --git a/server/addons/hgexample/controller/api/index.go b/server/addons/hgexample/controller/api/index.go new file mode 100644 index 0000000..f36b8c8 --- /dev/null +++ b/server/addons/hgexample/controller/api/index.go @@ -0,0 +1,43 @@ +// Package api +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +// +package api + +import ( + "context" + "github.com/gogf/gf/v2/util/gconv" + "hotgo/addons/hgexample/api/api/index" + "hotgo/addons/hgexample/model/input/sysin" + "hotgo/addons/hgexample/service" + "hotgo/utility/validate" +) + +var ( + Index = cIndex{} +) + +type cIndex struct{} + +// Test 测试 +func (c *cIndex) Test(ctx context.Context, req *index.TestReq) (res *index.TestRes, err error) { + var in sysin.IndexTestInp + if err = gconv.Scan(req, &in); err != nil { + return nil, err + } + + if err = validate.PreFilter(ctx, &in); err != nil { + return nil, err + } + + data, err := service.SysIndex().Test(ctx, in) + if err != nil { + return + } + + res = new(index.TestRes) + res.IndexTestModel = data + return +} diff --git a/server/addons/hgexample/controller/home/index.go b/server/addons/hgexample/controller/home/index.go new file mode 100644 index 0000000..f9017d8 --- /dev/null +++ b/server/addons/hgexample/controller/home/index.go @@ -0,0 +1,48 @@ +// Package home +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +// +package home + +import ( + "context" + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/util/gconv" + "hotgo/addons/hgexample/api/home/index" + "hotgo/addons/hgexample/global" + "hotgo/addons/hgexample/model/input/sysin" + "hotgo/addons/hgexample/service" + "hotgo/internal/model" + isc "hotgo/internal/service" + "hotgo/utility/validate" +) + +// Index 基础 +var Index = cIndex{} + +type cIndex struct{} + +func (a *cIndex) Index(ctx context.Context, req *index.TestReq) (res *index.TestRes, err error) { + var in sysin.IndexTestInp + if err = gconv.Scan(req, &in); err != nil { + return nil, err + } + + if err = validate.PreFilter(ctx, &in); err != nil { + return nil, err + } + + data, err := service.SysIndex().Test(ctx, in) + if err != nil { + return + } + + isc.View().RenderTpl(ctx, global.Tpl("home/index.html"), model.View{Data: g.Map{ + "name": data.Name, + "module": data.Module, + "time": data.Time, + }}) + return +} diff --git a/server/addons/hgexample/controller/websocket/index.go b/server/addons/hgexample/controller/websocket/index.go new file mode 100644 index 0000000..a0425be --- /dev/null +++ b/server/addons/hgexample/controller/websocket/index.go @@ -0,0 +1,43 @@ +// Package websocket +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +// +package websocket + +import ( + "context" + "github.com/gogf/gf/v2/util/gconv" + "hotgo/addons/hgexample/api/websocket/index" + "hotgo/addons/hgexample/model/input/sysin" + "hotgo/addons/hgexample/service" + "hotgo/utility/validate" +) + +var ( + Index = cIndex{} +) + +type cIndex struct{} + +// Test 测试 +func (c *cIndex) Test(ctx context.Context, req *index.TestReq) (res *index.TestRes, err error) { + var in sysin.IndexTestInp + if err = gconv.Scan(req, &in); err != nil { + return nil, err + } + + if err = validate.PreFilter(ctx, &in); err != nil { + return nil, err + } + + data, err := service.SysIndex().Test(ctx, in) + if err != nil { + return + } + + res = new(index.TestRes) + res.IndexTestModel = data + return +} diff --git a/server/addons/hgexample/global/global.go b/server/addons/hgexample/global/global.go new file mode 100644 index 0000000..f549f88 --- /dev/null +++ b/server/addons/hgexample/global/global.go @@ -0,0 +1,12 @@ +// Package global +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package global + +import "hotgo/internal/library/addons" + +var ( + skeleton *addons.Skeleton // 插件架子 +) diff --git a/server/addons/hgexample/global/init.go b/server/addons/hgexample/global/init.go new file mode 100644 index 0000000..1a13b3f --- /dev/null +++ b/server/addons/hgexample/global/init.go @@ -0,0 +1,26 @@ +// Package global +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package global + +import ( + "context" + "hotgo/internal/library/addons" +) + +func Init(ctx context.Context, sk *addons.Skeleton) { + skeleton = sk +} + +func GetSkeleton() *addons.Skeleton { + if skeleton == nil { + panic("addon skeleton not initialized.") + } + return skeleton +} + +func Tpl(tpl string) string { + return addons.Tpl(skeleton.Name, tpl) +} diff --git a/server/resource/public/plugin/.gitkeep b/server/addons/hgexample/logic/.gitkeep similarity index 100% rename from server/resource/public/plugin/.gitkeep rename to server/addons/hgexample/logic/.gitkeep diff --git a/server/addons/hgexample/logic/logic.go b/server/addons/hgexample/logic/logic.go new file mode 100644 index 0000000..cc557f4 --- /dev/null +++ b/server/addons/hgexample/logic/logic.go @@ -0,0 +1,9 @@ +// ========================================================================== +// Code generated by GoFrame CLI tool. DO NOT EDIT. +// ========================================================================== + +package logic + +import ( + _ "hotgo/addons/hgexample/logic/sys" +) diff --git a/server/addons/hgexample/logic/sys/config.go b/server/addons/hgexample/logic/sys/config.go new file mode 100644 index 0000000..378af85 --- /dev/null +++ b/server/addons/hgexample/logic/sys/config.go @@ -0,0 +1,54 @@ +package sys + +import ( + "context" + "github.com/gogf/gf/v2/util/gconv" + "hotgo/addons/hgexample/global" + "hotgo/addons/hgexample/model" + "hotgo/addons/hgexample/model/input/sysin" + "hotgo/addons/hgexample/service" + isc "hotgo/internal/service" +) + +type sSysConfig struct{} + +func NewSysConfig() *sSysConfig { + return &sSysConfig{} +} + +func init() { + service.RegisterSysConfig(NewSysConfig()) +} + +// GetBasic 获取基础配置 +func (s *sSysConfig) GetBasic(ctx context.Context) (conf *model.BasicConfig, err error) { + var in sysin.GetConfigInp + in.GetAddonsConfigInp.AddonName = global.GetSkeleton().Name + in.GetAddonsConfigInp.Group = "basic" + models, err := isc.SysAddonsConfig().GetConfigByGroup(ctx, in.GetAddonsConfigInp) + if err != nil { + return + } + + err = gconv.Struct(models.List, &conf) + return +} + +// GetConfigByGroup 获取指定分组配置 +func (s *sSysConfig) GetConfigByGroup(ctx context.Context, in sysin.GetConfigInp) (res *sysin.GetConfigModel, err error) { + in.GetAddonsConfigInp.AddonName = global.GetSkeleton().Name + models, err := isc.SysAddonsConfig().GetConfigByGroup(ctx, in.GetAddonsConfigInp) + if err != nil { + return + } + + res = new(sysin.GetConfigModel) + res.List = models.List + return +} + +// UpdateConfigByGroup 更新指定分组的配置 +func (s *sSysConfig) UpdateConfigByGroup(ctx context.Context, in sysin.UpdateConfigInp) error { + in.UpdateAddonsConfigInp.AddonName = global.GetSkeleton().Name + return isc.SysAddonsConfig().UpdateConfigByGroup(ctx, in.UpdateAddonsConfigInp) +} diff --git a/server/addons/hgexample/logic/sys/index.go b/server/addons/hgexample/logic/sys/index.go new file mode 100644 index 0000000..2b2359f --- /dev/null +++ b/server/addons/hgexample/logic/sys/index.go @@ -0,0 +1,35 @@ +// Package sys +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package sys + +import ( + "context" + "fmt" + "github.com/gogf/gf/v2/os/gtime" + "hotgo/addons/hgexample/global" + "hotgo/addons/hgexample/model/input/sysin" + "hotgo/addons/hgexample/service" + "hotgo/internal/library/contexts" +) + +type sSysIndex struct{} + +func NewSysIndex() *sSysIndex { + return &sSysIndex{} +} + +func init() { + service.RegisterSysIndex(NewSysIndex()) +} + +// Test 测试 +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.Time = gtime.Now() + return +} diff --git a/server/addons/hgexample/logic/sys/table.go b/server/addons/hgexample/logic/sys/table.go new file mode 100644 index 0000000..190bf1a --- /dev/null +++ b/server/addons/hgexample/logic/sys/table.go @@ -0,0 +1,244 @@ +// Package sys +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package sys + +import ( + "context" + "fmt" + "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/errors/gerror" + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gctx" + "github.com/gogf/gf/v2/util/gconv" + "hotgo/addons/hgexample/model/input/sysin" + "hotgo/addons/hgexample/service" + "hotgo/internal/consts" + "hotgo/internal/dao" + "hotgo/internal/library/contexts" + "hotgo/internal/library/hgorm" + "hotgo/internal/library/hgorm/handler" + "hotgo/internal/model/input/form" + "hotgo/utility/convert" + "hotgo/utility/excel" + "hotgo/utility/validate" +) + +type sSysTable struct{} + +func NewSysTable() *sSysTable { + return &sSysTable{} +} + +func init() { + service.RegisterSysTable(NewSysTable()) +} + +// Model Orm模型 +func (s *sSysTable) Model(ctx context.Context, option ...*handler.Option) *gdb.Model { + return handler.Model(dao.AddonHgexampleTable.Ctx(ctx), option...) +} + +// List 获取列表 +func (s *sSysTable) List(ctx context.Context, in sysin.TableListInp) (list []*sysin.TableListModel, totalCount int, err error) { + mod := s.Model(ctx) + + if in.Title != "" { + mod = mod.WhereLike(dao.AddonHgexampleTable.Columns().Title, "%"+in.Title+"%") + } + + if in.Content != "" { + mod = mod.WhereLike(dao.AddonHgexampleTable.Columns().Content, "%"+in.Content+"%") + } + + if in.Status > 0 { + mod = mod.Where(dao.AddonHgexampleTable.Columns().Status, in.Status) + } + + if in.Switch > 0 { + mod = mod.Where(dao.AddonHgexampleTable.Columns().Switch, in.Switch) + } + + if len(in.Price) > 0 { + if in.Price[0] > float64(0) && in.Price[1] > float64(0) { + mod = mod.WhereBetween(dao.AddonHgexampleTable.Columns().Price, in.Price[0], in.Price[1]) + } else if in.Price[0] > float64(0) && in.Price[1] == float64(0) { + mod = mod.WhereGTE(dao.AddonHgexampleTable.Columns().Price, in.Price[0]) + } else if in.Price[0] == float64(0) && in.Price[1] > float64(0) { + mod = mod.WhereLTE(dao.AddonHgexampleTable.Columns().Price, in.Price[1]) + } + } + + if in.ActivityAt != nil { + mod = mod.Where(dao.AddonHgexampleTable.Columns().ActivityAt, in.ActivityAt) + } + + if len(in.CreatedAt) == 2 { + mod = mod.WhereBetween(dao.AddonHgexampleTable.Columns().CreatedAt, in.CreatedAt[0], in.CreatedAt[1]) + } + + if !in.Flag.IsNil() { + mod = mod.Where(fmt.Sprintf(`JSON_CONTAINS(%s,'%v')`, dao.AddonHgexampleTable.Columns().Flag, in.Flag)) + } + + if !in.Hobby.IsNil() { + mod = mod.Where(fmt.Sprintf(`JSON_CONTAINS(%s,'%v')`, dao.AddonHgexampleTable.Columns().Hobby, in.Hobby)) + } + + //// 关联表testCategory + //mod = mod.LeftJoin(hgorm.GenJoinOnRelation( + // dao.AddonHgexampleTable.Table(), dao.AddonHgexampleTable.Columns().CategoryId, // 主表表名,关联条件 + // dao.AddonHgexampleTableCategory.Table(), "testCategory", dao.AddonHgexampleTableCategory.Columns().Id, // 关联表表名,别名,关联条件 + //)...) + // + //mod = mod.Where(`testCategory.`+dao.AddonHgexampleTableCategory.Columns().Name, "微信公众号") + + totalCount, err = mod.Clone().Count(1) + if err != nil { + err = gerror.Wrap(err, consts.ErrorORM) + return + } + + if totalCount == 0 { + return + } + + ////关联表select + //fields, err := hgorm.GenJoinSelect(ctx, sysin.TableListModel{}, dao.AddonHgexampleTable, []*hgorm.Join{ + // {Dao: dao.AddonHgexampleTableCategory, Alias: "testCategory"}, + // //{Dao: dao.AddonHgexampleTableCategory, Alias: "testCategory"}, + //}) + + fields, err := hgorm.GenSelect(ctx, sysin.TableListModel{}, dao.AddonHgexampleTable) + if err != nil { + return + } + + if err = mod.Fields(fields).Page(in.Page, in.PerPage).OrderAsc(dao.AddonHgexampleTable.Columns().Sort).OrderDesc(dao.AddonHgexampleTable.Columns().Id).Scan(&list); err != nil { + err = gerror.Wrap(err, consts.ErrorORM) + return + } + return +} + +// Export 导出 +func (s *sSysTable) Export(ctx context.Context, in sysin.TableListInp) (err error) { + list, totalCount, err := s.List(ctx, in) + if err != nil { + return + } + + // 字段的排序是依据tags的字段顺序,如果你不想使用默认的排序方式,可以直接定义 tags = []string{"字段名称", "字段名称2", ...} + tags, err := convert.GetEntityDescTags(sysin.TableExportModel{}) + if err != nil { + return + } + + var ( + fileName = "表格例子导出-" + gctx.CtxId(ctx) + ".xlsx" + sheetName = fmt.Sprintf("索引条件共%v行,共%v页,当前导出是第%v页,本页共%v行", totalCount, form.CalPageCount(totalCount, in.PerPage), in.Page, len(list)) + exports []sysin.TableExportModel + ) + + if err = gconv.Scan(list, &exports); err != nil { + return + } + + if err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName); err != nil { + return + } + return +} + +// Edit 修改/新增 +func (s *sSysTable) Edit(ctx context.Context, in sysin.TableEditInp) (err error) { + if err = hgorm.IsUnique(ctx, dao.AddonHgexampleTable, g.Map{dao.AddonHgexampleTable.Columns().Qq: in.Qq}, "QQ号码已存在,请换一个", in.Id); err != nil { + return + } + + // 修改 + if in.Id > 0 { + in.UpdatedBy = contexts.GetUserId(ctx) + _, err = s.Model(ctx).Where(dao.AddonHgexampleTable.Columns().Id, in.Id).Data(in).Update() + return + } + + // 新增 + in.CreatedBy = contexts.GetUserId(ctx) + _, err = s.Model(ctx, &handler.Option{FilterAuth: false}).Data(in).Insert() + return +} + +// Delete 删除 +func (s *sSysTable) Delete(ctx context.Context, in sysin.TableDeleteInp) (err error) { + _, err = s.Model(ctx).Where(dao.AddonHgexampleTable.Columns().Id, in.Id).Delete() + return +} + +// Status 更新状态 +func (s *sSysTable) Status(ctx context.Context, in sysin.TableStatusInp) (err error) { + if in.Id <= 0 { + err = gerror.New("ID不能为空") + return + } + + if in.Status <= 0 { + err = gerror.New("状态不能为空") + return + } + + if !validate.InSliceInt(consts.StatusMap, in.Status) { + err = gerror.New("状态不正确") + return + } + + // 修改 + _, err = s.Model(ctx).Where(dao.AddonHgexampleTable.Columns().Id, in.Id).Data(g.Map{ + dao.AddonHgexampleTable.Columns().Status: in.Status, + dao.AddonHgexampleTable.Columns().UpdatedBy: contexts.GetUserId(ctx), + }).Update() + return +} + +// Switch 更新开关状态 +func (s *sSysTable) Switch(ctx context.Context, in sysin.TableSwitchInp) (err error) { + var fields = []string{ + dao.AddonHgexampleTable.Columns().Switch, + // ... + } + + if !validate.InSliceString(fields, in.Key) { + err = gerror.New("开关键名不在白名单") + return + } + + // 修改 + _, err = s.Model(ctx).Where(dao.AddonHgexampleTable.Columns().Id, in.Id).Data(g.Map{ + in.Key: in.Value, + dao.AddonHgexampleTable.Columns().UpdatedBy: contexts.GetUserId(ctx), + }).Update() + return +} + +// MaxSort 最大排序 +func (s *sSysTable) MaxSort(ctx context.Context, in sysin.TableMaxSortInp) (res *sysin.TableMaxSortModel, err error) { + if err = dao.AddonHgexampleTable.Ctx(ctx).Fields(dao.AddonHgexampleTable.Columns().Sort).OrderDesc(dao.AddonHgexampleTable.Columns().Sort).Scan(&res); err != nil { + err = gerror.Wrap(err, consts.ErrorORM) + return + } + + if res == nil { + res = new(sysin.TableMaxSortModel) + } + + res.Sort = form.DefaultMaxSort(ctx, res.Sort) + return +} + +// View 获取指定信息 +func (s *sSysTable) View(ctx context.Context, in sysin.TableViewInp) (res *sysin.TableViewModel, err error) { + err = s.Model(ctx).Where(dao.AddonHgexampleTable.Columns().Id, in.Id).Scan(&res) + return +} diff --git a/server/addons/hgexample/main.go b/server/addons/hgexample/main.go new file mode 100644 index 0000000..ac3e85d --- /dev/null +++ b/server/addons/hgexample/main.go @@ -0,0 +1,89 @@ +// Package hgexample +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package hgexample + +import ( + "context" + "github.com/gogf/gf/v2/net/ghttp" + "github.com/gogf/gf/v2/os/gctx" + "hotgo/addons/hgexample/global" + _ "hotgo/addons/hgexample/logic" + "hotgo/addons/hgexample/router" + "hotgo/internal/library/addons" + "sync" +) + +type module struct { + skeleton *addons.Skeleton + ctx context.Context + sync.Mutex +} + +func init() { + newModule() +} + +func newModule() { + m := &module{ + skeleton: &addons.Skeleton{ + Label: "功能案例", + Name: "hgexample", + Group: 1, + Logo: "", + Brief: "系统的一些功能案例", + Description: "系统自带的功能使用示例及其说明,包含一些简单的交互", + Author: "孟帅", + Version: "v1.0.0", // 当该版本号高于已安装的版本号时,会提示可以更新 + RootPath: addons.GetModulePath("hgexample"), + }, + ctx: gctx.New(), + } + + addons.RegisterModule(m) +} + +// Init 初始化 +func (m *module) Init(ctx context.Context) { + global.Init(ctx, m.skeleton) + // ... +} + +// InitRouter 初始化WEB路由 +func (m *module) InitRouter(ctx context.Context, group *ghttp.RouterGroup) { + m.Init(ctx) + router.Admin(ctx, group) + router.Api(ctx, group) + router.Home(ctx, group) + router.WebSocket(ctx, group) +} + +// Ctx 上下文 +func (m *module) Ctx() context.Context { + return m.ctx +} + +// GetSkeleton 架子 +func (m *module) GetSkeleton() *addons.Skeleton { + return m.skeleton +} + +// Install 安装模块 +func (m *module) Install(ctx context.Context) (err error) { + // ... + return +} + +// Upgrade 更新模块 +func (m *module) Upgrade(ctx context.Context) (err error) { + // ... + return +} + +// UnInstall 卸载模块 +func (m *module) UnInstall(ctx context.Context) (err error) { + // ... + return +} diff --git a/server/addons/hgexample/model/config.go b/server/addons/hgexample/model/config.go new file mode 100644 index 0000000..7496b4b --- /dev/null +++ b/server/addons/hgexample/model/config.go @@ -0,0 +1,11 @@ +// Package model +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package model + +// BasicConfig 基础配置 +type BasicConfig struct { + Test string `json:"basicTest"` +} diff --git a/server/addons/hgexample/model/input/sysin/config.go b/server/addons/hgexample/model/input/sysin/config.go new file mode 100644 index 0000000..05c4fc1 --- /dev/null +++ b/server/addons/hgexample/model/input/sysin/config.go @@ -0,0 +1,24 @@ +// Package sysin +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package sysin + +import ( + "github.com/gogf/gf/v2/frame/g" + "hotgo/internal/model/input/sysin" +) + +// UpdateConfigInp 更新指定配置 +type UpdateConfigInp struct { + sysin.UpdateAddonsConfigInp +} + +type GetConfigInp struct { + sysin.GetAddonsConfigInp +} + +type GetConfigModel struct { + List g.Map `json:"list"` +} diff --git a/server/addons/hgexample/model/input/sysin/index.go b/server/addons/hgexample/model/input/sysin/index.go new file mode 100644 index 0000000..8e19ad5 --- /dev/null +++ b/server/addons/hgexample/model/input/sysin/index.go @@ -0,0 +1,27 @@ +// Package sysin +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +// +package sysin + +import ( + "context" + "github.com/gogf/gf/v2/os/gtime" +) + +// IndexTestInp 测试 +type IndexTestInp struct { + Name string `json:"name" d:"HotGo" dc:"名称"` +} + +func (in *IndexTestInp) Filter(ctx context.Context) (err error) { + return +} + +type IndexTestModel struct { + Name string `json:"name" dc:"名称"` + Module string `json:"module" dc:"当前插件模块"` + Time *gtime.Time `json:"time" dc:"当前时间"` +} diff --git a/server/internal/model/input/adminin/test.go b/server/addons/hgexample/model/input/sysin/table.go similarity index 72% rename from server/internal/model/input/adminin/test.go rename to server/addons/hgexample/model/input/sysin/table.go index d9090ee..5cb043a 100644 --- a/server/internal/model/input/adminin/test.go +++ b/server/addons/hgexample/model/input/sysin/table.go @@ -1,10 +1,10 @@ -// Package adminin +// Package sysin // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // -package adminin +package sysin import ( "context" @@ -18,14 +18,14 @@ import ( "hotgo/utility/validate" ) -// TestEditInp 修改/新增 -type TestEditInp struct { - entity.Test +// TableEditInp 修改/新增 +type TableEditInp struct { + entity.AddonHgexampleTable } -type TestEditModel struct{} +type TableEditModel struct{} -func (in *TestEditInp) Filter(ctx context.Context) (err error) { +func (in *TableEditInp) Filter(ctx context.Context) (err error) { if in.Map.IsNil() { in.Map = gjson.New(consts.NilJsonToString) } @@ -57,24 +57,24 @@ func (in *TestEditInp) Filter(ctx context.Context) (err error) { return } -// TestDeleteInp 删除类型 -type TestDeleteInp struct { - Id interface{} `json:"id" v:"required#测试ID不能为空" dc:"测试ID"` +// TableDeleteInp 删除类型 +type TableDeleteInp struct { + Id interface{} `json:"id" v:"required#表格ID不能为空" dc:"表格ID"` } -type TestDeleteModel struct{} +type TableDeleteModel struct{} -// TestViewInp 获取信息 -type TestViewInp struct { - Id int64 `json:"id" v:"required#测试ID不能为空" dc:"测试ID"` +// TableViewInp 获取信息 +type TableViewInp struct { + Id int64 `json:"id" v:"required#表格ID不能为空" dc:"表格ID"` } -type TestViewModel struct { - entity.Test +type TableViewModel struct { + entity.AddonHgexampleTable } -// TestListInp 获取列表 -type TestListInp struct { +// TableListInp 获取列表 +type TableListInp struct { form.PageReq Id int64 `json:"id" description:""` Flag *gjson.Json `json:"flag" description:"标签"` @@ -88,15 +88,15 @@ type TestListInp struct { CreatedAt []*gtime.Time `json:"createdAt" description:"创建时间"` } -type TestListModel struct { - entity.Test - TestCategoryName string `json:"testCategoryName" description:"分类名称"` - TestCategoryDescription string `json:"testCategoryDescription" description:"分类描述"` - TestCategoryRemark string `json:"testCategoryRemark" description:"分类备注"` - SysProvincesTitle string `json:"sysProvincesTitle" description:""` +type TableListModel struct { + entity.AddonHgexampleTable + TableCategoryName string `json:"TableCategoryName" description:"分类名称"` + TableCategoryDescription string `json:"TableCategoryDescription" description:"分类描述"` + TableCategoryRemark string `json:"TableCategoryRemark" description:"分类备注"` + SysProvincesTitle string `json:"sysProvincesTitle" description:""` } -func (in *TestListInp) Filter(ctx context.Context) (err error) { +func (in *TableListInp) Filter(ctx context.Context) (err error) { if !in.Flag.IsNil() { in.Flag = gjson.New(in.Flag.Var().Ints()) } @@ -106,7 +106,7 @@ func (in *TestListInp) Filter(ctx context.Context) (err error) { return } -type TestExportModel struct { +type TableExportModel struct { Id int64 `json:"id" description:""` CategoryId int64 `json:"categoryId" description:"分类ID"` Flag *gjson.Json `json:"flag" description:"标签"` @@ -138,25 +138,25 @@ type TestExportModel struct { DeletedAt *gtime.Time `json:"deletedAt" description:"删除时间"` } -// TestMaxSortInp 最大排序 -type TestMaxSortInp struct{} +// TableMaxSortInp 最大排序 +type TableMaxSortInp struct{} -type TestMaxSortModel struct { +type TableMaxSortModel struct { Sort int `json:"sort" description:"排序"` } -// TestStatusInp 更新状态 -type TestStatusInp struct { - Id int64 `json:"id" v:"required#测试ID不能为空" dc:"测试ID"` +// TableStatusInp 更新状态 +type TableStatusInp struct { + Id int64 `json:"id" v:"required#表格ID不能为空" dc:"表格ID"` Status int `json:"status" dc:"状态"` } -type TestStatusModel struct{} +type TableStatusModel struct{} -// TestSwitchInp 更新开关状态 -type TestSwitchInp struct { +// TableSwitchInp 更新开关状态 +type TableSwitchInp struct { form.SwitchReq - Id int64 `json:"id" v:"required#测试ID不能为空" dc:"测试ID"` + Id int64 `json:"id" v:"required#表格ID不能为空" dc:"表格ID"` } -type TestSwitchModel struct{} +type TableSwitchModel struct{} diff --git a/server/addons/hgexample/router/admin.go b/server/addons/hgexample/router/admin.go new file mode 100644 index 0000000..66620d9 --- /dev/null +++ b/server/addons/hgexample/router/admin.go @@ -0,0 +1,34 @@ +// Package router +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package router + +import ( + "context" + "github.com/gogf/gf/v2/net/ghttp" + "hotgo/addons/hgexample/controller/admin/sys" + "hotgo/addons/hgexample/global" + "hotgo/addons/hgexample/router/genrouter" + "hotgo/internal/consts" + "hotgo/internal/library/addons" + "hotgo/internal/service" +) + +func Admin(ctx context.Context, group *ghttp.RouterGroup) { + prefix := addons.RouterPrefix(ctx, consts.AppAdmin, global.GetSkeleton().Name) + group.Group(prefix, func(group *ghttp.RouterGroup) { + group.Bind( + sys.Index, + ) + group.Middleware(service.Middleware().AdminAuth) + group.Bind( + sys.Config, + sys.Table, + ) + }) + + // 注册生成路由 + genrouter.Register(ctx, group) +} diff --git a/server/addons/hgexample/router/api.go b/server/addons/hgexample/router/api.go new file mode 100644 index 0000000..60c3626 --- /dev/null +++ b/server/addons/hgexample/router/api.go @@ -0,0 +1,32 @@ +// Package router +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package router + +import ( + "context" + "github.com/gogf/gf/v2/net/ghttp" + "hotgo/addons/hgexample/controller/api" + "hotgo/addons/hgexample/global" + "hotgo/internal/consts" + "hotgo/internal/library/addons" + "hotgo/internal/service" +) + +// Api 前台路由 +func Api(ctx context.Context, group *ghttp.RouterGroup) { + prefix := addons.RouterPrefix(ctx, consts.AppApi, global.GetSkeleton().Name) + group.Group(prefix, func(group *ghttp.RouterGroup) { + group.Bind( + // 无需验证的路由 + api.Index, + ) + group.Middleware(service.Middleware().ApiAuth) + group.Bind( + // 需要验证的路由 + // ... + ) + }) +} diff --git a/server/addons/hgexample/router/genrouter/init.go b/server/addons/hgexample/router/genrouter/init.go new file mode 100644 index 0000000..ad87248 --- /dev/null +++ b/server/addons/hgexample/router/genrouter/init.go @@ -0,0 +1,34 @@ +// Package genrouter +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package genrouter + +import ( + "context" + "github.com/gogf/gf/v2/net/ghttp" + "hotgo/addons/hgexample/global" + "hotgo/internal/consts" + "hotgo/internal/library/addons" + "hotgo/internal/service" +) + +var ( + NoLogin []interface{} // 无需登录 + LoginRequiredRouter []interface{} // 需要登录 +) + +// Register 注册通过代码生成的后台路由 +func Register(ctx context.Context, group *ghttp.RouterGroup) { + prefix := addons.RouterPrefix(ctx, consts.AppAdmin, global.GetSkeleton().Name) + group.Group(prefix, func(group *ghttp.RouterGroup) { + if len(NoLogin) > 0 { + group.Bind(NoLogin...) + } + group.Middleware(service.Middleware().AdminAuth) + if len(LoginRequiredRouter) > 0 { + group.Bind(LoginRequiredRouter...) + } + }) +} diff --git a/server/addons/hgexample/router/home.go b/server/addons/hgexample/router/home.go new file mode 100644 index 0000000..d985980 --- /dev/null +++ b/server/addons/hgexample/router/home.go @@ -0,0 +1,25 @@ +// Package router +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package router + +import ( + "context" + "github.com/gogf/gf/v2/net/ghttp" + "hotgo/addons/hgexample/controller/home" + "hotgo/addons/hgexample/global" + "hotgo/internal/consts" + "hotgo/internal/library/addons" +) + +// Home 前台页面路由 +func Home(ctx context.Context, group *ghttp.RouterGroup) { + prefix := addons.RouterPrefix(ctx, consts.AppHome, global.GetSkeleton().Name) + group.Group(prefix, func(group *ghttp.RouterGroup) { + group.Bind( + home.Index, + ) + }) +} diff --git a/server/addons/hgexample/router/websocket.go b/server/addons/hgexample/router/websocket.go new file mode 100644 index 0000000..facdcc2 --- /dev/null +++ b/server/addons/hgexample/router/websocket.go @@ -0,0 +1,40 @@ +// Package router +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package router + +import ( + "context" + "github.com/gogf/gf/v2/net/ghttp" + "hotgo/addons/hgexample/controller/websocket" + "hotgo/addons/hgexample/global" + "hotgo/internal/consts" + "hotgo/internal/library/addons" + "hotgo/internal/service" + ws "hotgo/internal/websocket" +) + +// WebSocket ws路由配置 +func WebSocket(ctx context.Context, group *ghttp.RouterGroup) { + prefix := addons.RouterPrefix(ctx, consts.AppWebSocket, global.GetSkeleton().Name) + group.Group(prefix, func(group *ghttp.RouterGroup) { + group.Bind( + // 无需验证的路由 + websocket.Index, + ) + // ws连接中间件 + group.Middleware(service.Middleware().WebSocketToken) + group.Bind( + // 需要验证的路由 + // .. + ) + }) + + // 注册消息路由 + ws.RegisterMsg(ws.EventHandlers{ + // ... + }) + +} diff --git a/server/addons/hgexample/service/.gitkeep b/server/addons/hgexample/service/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/server/addons/hgexample/service/sys.go b/server/addons/hgexample/service/sys.go new file mode 100644 index 0000000..5e04b2f --- /dev/null +++ b/server/addons/hgexample/service/sys.go @@ -0,0 +1,76 @@ +// ================================================================================ +// Code generated by GoFrame CLI tool. DO NOT EDIT. +// You can delete these comments if you wish manually maintain this interface file. +// ================================================================================ + +package service + +import ( + "context" + "hotgo/addons/hgexample/model" + "hotgo/addons/hgexample/model/input/sysin" + "hotgo/internal/library/hgorm/handler" + + "github.com/gogf/gf/v2/database/gdb" +) + +type ( + ISysConfig interface { + GetBasic(ctx context.Context) (conf *model.BasicConfig, err error) + GetConfigByGroup(ctx context.Context, in sysin.GetConfigInp) (res *sysin.GetConfigModel, err error) + UpdateConfigByGroup(ctx context.Context, in sysin.UpdateConfigInp) error + } + ISysIndex interface { + Test(ctx context.Context, in sysin.IndexTestInp) (res *sysin.IndexTestModel, err error) + } + ISysTable interface { + Model(ctx context.Context, option ...*handler.Option) *gdb.Model + List(ctx context.Context, in sysin.TableListInp) (list []*sysin.TableListModel, totalCount int, err error) + Export(ctx context.Context, in sysin.TableListInp) (err error) + Edit(ctx context.Context, in sysin.TableEditInp) (err error) + Delete(ctx context.Context, in sysin.TableDeleteInp) (err error) + Status(ctx context.Context, in sysin.TableStatusInp) (err error) + Switch(ctx context.Context, in sysin.TableSwitchInp) (err error) + MaxSort(ctx context.Context, in sysin.TableMaxSortInp) (res *sysin.TableMaxSortModel, err error) + View(ctx context.Context, in sysin.TableViewInp) (res *sysin.TableViewModel, err error) + } +) + +var ( + localSysTable ISysTable + localSysConfig ISysConfig + localSysIndex ISysIndex +) + +func SysConfig() ISysConfig { + if localSysConfig == nil { + panic("implement not found for interface ISysConfig, forgot register?") + } + return localSysConfig +} + +func RegisterSysConfig(i ISysConfig) { + localSysConfig = i +} + +func SysIndex() ISysIndex { + if localSysIndex == nil { + panic("implement not found for interface ISysIndex, forgot register?") + } + return localSysIndex +} + +func RegisterSysIndex(i ISysIndex) { + localSysIndex = i +} + +func SysTable() ISysTable { + if localSysTable == nil { + panic("implement not found for interface ISysTable, forgot register?") + } + return localSysTable +} + +func RegisterSysTable(i ISysTable) { + localSysTable = i +} diff --git a/server/addons/modules/.gitkeep b/server/addons/modules/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/server/addons/modules/hgexample.go b/server/addons/modules/hgexample.go new file mode 100644 index 0000000..eafbc58 --- /dev/null +++ b/server/addons/modules/hgexample.go @@ -0,0 +1,8 @@ +// Package modules +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package modules + +import _ "hotgo/addons/hgexample" diff --git a/server/api/admin/addons/addons.go b/server/api/admin/addons/addons.go new file mode 100644 index 0000000..1425902 --- /dev/null +++ b/server/api/admin/addons/addons.go @@ -0,0 +1,62 @@ +// Package addons +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package addons + +import ( + "github.com/gogf/gf/v2/frame/g" + "hotgo/internal/model/input/form" + "hotgo/internal/model/input/sysin" +) + +// ListReq 查询列表 +type ListReq struct { + g.Meta `path:"/addons/list" method:"get" tags:"插件管理" summary:"获取插件列表"` + sysin.AddonsListInp +} + +type ListRes struct { + List []*sysin.AddonsListModel `json:"list" dc:"数据列表"` + form.PageRes +} + +type SelectsReq struct { + g.Meta `path:"/addons/selects" method:"get" tags:"插件管理" summary:"生成入口选项"` +} +type SelectsRes struct { + *sysin.AddonsSelectsModel +} + +// BuildReq 提交生成 +type BuildReq struct { + g.Meta `path:"/addons/build" method:"post" tags:"插件管理" summary:"提交生成"` + sysin.AddonsBuildInp +} +type BuildRes struct { +} + +// InstallReq 安装模块 +type InstallReq struct { + g.Meta `path:"/addons/install" method:"post" tags:"插件管理" summary:"安装模块"` + sysin.AddonsInstallInp +} +type InstallRes struct { +} + +// UpgradeReq 更新模块 +type UpgradeReq struct { + g.Meta `path:"/addons/upgrade" method:"post" tags:"插件管理" summary:"更新模块"` + sysin.AddonsUpgradeInp +} +type UpgradeRes struct { +} + +// UnInstallReq 卸载模块 +type UnInstallReq struct { + g.Meta `path:"/addons/uninstall" method:"post" tags:"插件管理" summary:"卸载模块"` + sysin.AddonsUnInstallInp +} +type UnInstallRes struct { +} diff --git a/server/api/backend/attachment/attachment.go b/server/api/admin/attachment/attachment.go similarity index 97% rename from server/api/backend/attachment/attachment.go rename to server/api/admin/attachment/attachment.go index 678dca8..d8f0982 100644 --- a/server/api/backend/attachment/attachment.go +++ b/server/api/admin/attachment/attachment.go @@ -1,6 +1,6 @@ // Package attachment // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/blacklist/blacklist.go b/server/api/admin/blacklist/blacklist.go similarity index 97% rename from server/api/backend/blacklist/blacklist.go rename to server/api/admin/blacklist/blacklist.go index 28f1278..de526b2 100644 --- a/server/api/backend/blacklist/blacklist.go +++ b/server/api/admin/blacklist/blacklist.go @@ -1,6 +1,6 @@ // Package blacklist // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/common/console.go b/server/api/admin/common/console.go similarity index 96% rename from server/api/backend/common/console.go rename to server/api/admin/common/console.go index 14ca36f..1ec7602 100644 --- a/server/api/backend/common/console.go +++ b/server/api/admin/common/console.go @@ -1,6 +1,6 @@ // Package common // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/common/ems.go b/server/api/admin/common/ems.go similarity index 94% rename from server/api/backend/common/ems.go rename to server/api/admin/common/ems.go index 13fd5c2..c4d8bd7 100644 --- a/server/api/backend/common/ems.go +++ b/server/api/admin/common/ems.go @@ -1,6 +1,6 @@ // Package common // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/common/site.go b/server/api/admin/common/site.go similarity index 94% rename from server/api/backend/common/site.go rename to server/api/admin/common/site.go index 13eca9a..e4517d0 100644 --- a/server/api/backend/common/site.go +++ b/server/api/admin/common/site.go @@ -1,6 +1,6 @@ // Package common // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -47,6 +47,7 @@ type SiteConfigReq struct { type SiteConfigRes struct { Version string `json:"version" dc:"系统版本"` WsAddr string `json:"wsAddr" dc:"客户端websocket地址"` + Domain string `json:"domain" dc:"对外域名"` } // SitePingReq ping diff --git a/server/api/backend/common/sms.go b/server/api/admin/common/sms.go similarity index 95% rename from server/api/backend/common/sms.go rename to server/api/admin/common/sms.go index c527c12..ad79af8 100644 --- a/server/api/backend/common/sms.go +++ b/server/api/admin/common/sms.go @@ -1,6 +1,6 @@ // Package common // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/common/upload.go b/server/api/admin/common/upload.go similarity index 93% rename from server/api/backend/common/upload.go rename to server/api/admin/common/upload.go index 8b19de7..005a8b5 100644 --- a/server/api/backend/common/upload.go +++ b/server/api/admin/common/upload.go @@ -1,6 +1,6 @@ // Package common // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/config/config.go b/server/api/admin/config/config.go similarity index 95% rename from server/api/backend/config/config.go rename to server/api/admin/config/config.go index bbd8617..0a95add 100644 --- a/server/api/backend/config/config.go +++ b/server/api/admin/config/config.go @@ -1,9 +1,8 @@ // Package config // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE -// package config import ( diff --git a/server/api/backend/cron/cron.go b/server/api/admin/cron/cron.go similarity index 97% rename from server/api/backend/cron/cron.go rename to server/api/admin/cron/cron.go index c6c9d4d..53bf621 100644 --- a/server/api/backend/cron/cron.go +++ b/server/api/admin/cron/cron.go @@ -1,6 +1,6 @@ // Package cron // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/cron/cron_group.go b/server/api/admin/cron/cron_group.go similarity index 98% rename from server/api/backend/cron/cron_group.go rename to server/api/admin/cron/cron_group.go index dedf18c..03de648 100644 --- a/server/api/backend/cron/cron_group.go +++ b/server/api/admin/cron/cron_group.go @@ -1,6 +1,6 @@ // Package cron // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/curddemo/curddemo.go b/server/api/admin/curddemo/curddemo.go similarity index 96% rename from server/api/backend/curddemo/curddemo.go rename to server/api/admin/curddemo/curddemo.go index 3017576..4cc52fb 100644 --- a/server/api/backend/curddemo/curddemo.go +++ b/server/api/admin/curddemo/curddemo.go @@ -3,8 +3,8 @@ // @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE -// @AutoGenerate Version 2.1.2 -// @AutoGenerate Date 2023-02-08 17:47:32 +// @AutoGenerate Version 2.1.4 +// @AutoGenerate Date 2023-02-20 16:41:58 // package curddemo diff --git a/server/api/backend/dept/dept.go b/server/api/admin/dept/dept.go similarity index 98% rename from server/api/backend/dept/dept.go rename to server/api/admin/dept/dept.go index f8300ff..493a874 100644 --- a/server/api/backend/dept/dept.go +++ b/server/api/admin/dept/dept.go @@ -1,6 +1,6 @@ // Package dept // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/dict/dict_data.go b/server/api/admin/dict/dict_data.go similarity index 97% rename from server/api/backend/dict/dict_data.go rename to server/api/admin/dict/dict_data.go index b087ed9..c264041 100644 --- a/server/api/backend/dict/dict_data.go +++ b/server/api/admin/dict/dict_data.go @@ -1,6 +1,6 @@ // Package dict // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/dict/dict_type.go b/server/api/admin/dict/dict_type.go similarity index 96% rename from server/api/backend/dict/dict_type.go rename to server/api/admin/dict/dict_type.go index 9b95a96..6949f52 100644 --- a/server/api/backend/dict/dict_type.go +++ b/server/api/admin/dict/dict_type.go @@ -1,6 +1,6 @@ // Package dict // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/emslog/emslog.go b/server/api/admin/emslog/emslog.go similarity index 87% rename from server/api/backend/emslog/emslog.go rename to server/api/admin/emslog/emslog.go index 15050c6..42f03cf 100644 --- a/server/api/backend/emslog/emslog.go +++ b/server/api/admin/emslog/emslog.go @@ -1,3 +1,9 @@ +// Package emslog +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +// package emslog import ( diff --git a/server/api/backend/gencodes/gencodes.go b/server/api/admin/gencodes/gencodes.go similarity index 97% rename from server/api/backend/gencodes/gencodes.go rename to server/api/admin/gencodes/gencodes.go index c3e71ab..bbac65e 100644 --- a/server/api/backend/gencodes/gencodes.go +++ b/server/api/admin/gencodes/gencodes.go @@ -1,6 +1,6 @@ -// Package hggen +// Package gencodes // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/log/log.go b/server/api/admin/log/log.go similarity index 98% rename from server/api/backend/log/log.go rename to server/api/admin/log/log.go index b722caf..72a3d0b 100644 --- a/server/api/backend/log/log.go +++ b/server/api/admin/log/log.go @@ -1,6 +1,6 @@ // Package log // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/loginlog/loginlog.go b/server/api/admin/loginlog/loginlog.go similarity index 100% rename from server/api/backend/loginlog/loginlog.go rename to server/api/admin/loginlog/loginlog.go diff --git a/server/api/backend/member/member.go b/server/api/admin/member/member.go similarity index 98% rename from server/api/backend/member/member.go rename to server/api/admin/member/member.go index 34bcd67..023abcc 100644 --- a/server/api/backend/member/member.go +++ b/server/api/admin/member/member.go @@ -1,6 +1,6 @@ // Package member // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/menu/menu.go b/server/api/admin/menu/menu.go similarity index 98% rename from server/api/backend/menu/menu.go rename to server/api/admin/menu/menu.go index 135a468..a4a00aa 100644 --- a/server/api/backend/menu/menu.go +++ b/server/api/admin/menu/menu.go @@ -1,6 +1,6 @@ // Package menu // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/monitor/monitor.go b/server/api/admin/monitor/monitor.go similarity index 98% rename from server/api/backend/monitor/monitor.go rename to server/api/admin/monitor/monitor.go index 0a028c0..4ee9d53 100644 --- a/server/api/backend/monitor/monitor.go +++ b/server/api/admin/monitor/monitor.go @@ -1,6 +1,6 @@ // Package monitor // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/notice/notice.go b/server/api/admin/notice/notice.go similarity index 98% rename from server/api/backend/notice/notice.go rename to server/api/admin/notice/notice.go index 7f2ca69..b74e994 100644 --- a/server/api/backend/notice/notice.go +++ b/server/api/admin/notice/notice.go @@ -1,6 +1,6 @@ // Package notice // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/post/post.go b/server/api/admin/post/post.go similarity index 98% rename from server/api/backend/post/post.go rename to server/api/admin/post/post.go index 052ced9..87db8df 100644 --- a/server/api/backend/post/post.go +++ b/server/api/admin/post/post.go @@ -1,6 +1,6 @@ // Package post // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/provinces/provinces.go b/server/api/admin/provinces/provinces.go similarity index 98% rename from server/api/backend/provinces/provinces.go rename to server/api/admin/provinces/provinces.go index 38f32d6..610af7c 100644 --- a/server/api/backend/provinces/provinces.go +++ b/server/api/admin/provinces/provinces.go @@ -1,6 +1,6 @@ // Package provinces // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/role/role.go b/server/api/admin/role/role.go similarity index 99% rename from server/api/backend/role/role.go rename to server/api/admin/role/role.go index 55b8ba1..3338196 100644 --- a/server/api/backend/role/role.go +++ b/server/api/admin/role/role.go @@ -1,6 +1,6 @@ // Package role // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/servelog/servelog.go b/server/api/admin/servelog/servelog.go similarity index 100% rename from server/api/backend/servelog/servelog.go rename to server/api/admin/servelog/servelog.go diff --git a/server/api/backend/smslog/smslog.go b/server/api/admin/smslog/smslog.go similarity index 100% rename from server/api/backend/smslog/smslog.go rename to server/api/admin/smslog/smslog.go diff --git a/server/api/backend/user/hello.go b/server/api/admin/user/hello.go similarity index 90% rename from server/api/backend/user/hello.go rename to server/api/admin/user/hello.go index b1f6e93..0715d15 100644 --- a/server/api/backend/user/hello.go +++ b/server/api/admin/user/hello.go @@ -1,6 +1,6 @@ // Package user // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/api/member/member.go b/server/api/api/member/member.go index ea66c39..03debe5 100644 --- a/server/api/api/member/member.go +++ b/server/api/api/member/member.go @@ -1,6 +1,6 @@ // Package member // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/api/user/hello.go b/server/api/api/user/hello.go index b1f6e93..0715d15 100644 --- a/server/api/api/user/hello.go +++ b/server/api/api/user/hello.go @@ -1,6 +1,6 @@ // Package user // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/backend/test/test.go b/server/api/backend/test/test.go deleted file mode 100644 index a4a3143..0000000 --- a/server/api/backend/test/test.go +++ /dev/null @@ -1,77 +0,0 @@ -// Package test -// @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI -// @Author Ms <133814250@qq.com> -// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE -// -package test - -import ( - "github.com/gogf/gf/v2/frame/g" - "hotgo/internal/model/input/adminin" - "hotgo/internal/model/input/form" -) - -// ListReq 查询列表 -type ListReq struct { - g.Meta `path:"/test/list" method:"get" tags:"测试" summary:"获取测试列表"` - adminin.TestListInp -} - -type ListRes struct { - form.PageRes - List []*adminin.TestListModel `json:"list" dc:"数据列表"` -} - -// ExportReq 导出列表 -type ExportReq struct { - g.Meta `path:"/test/export" method:"get" tags:"测试" summary:"导出测试列表"` - adminin.TestListInp -} - -type ExportRes struct{} - -// ViewReq 获取信息 -type ViewReq struct { - g.Meta `path:"/test/view" method:"get" tags:"测试" summary:"获取指定信息"` - adminin.TestViewInp -} -type ViewRes struct { - *adminin.TestViewModel -} - -// EditReq 修改/新增 -type EditReq struct { - g.Meta `path:"/test/edit" method:"post" tags:"测试" summary:"修改/新增测试"` - adminin.TestEditInp -} -type EditRes struct{} - -// DeleteReq 删除 -type DeleteReq struct { - g.Meta `path:"/test/delete" method:"post" tags:"测试" summary:"删除测试"` - adminin.TestDeleteInp -} -type DeleteRes struct{} - -// MaxSortReq 最大排序 -type MaxSortReq struct { - g.Meta `path:"/test/maxSort" method:"get" tags:"测试" summary:"测试最大排序"` -} -type MaxSortRes struct { - *adminin.TestMaxSortModel -} - -// StatusReq 更新状态 -type StatusReq struct { - g.Meta `path:"/test/status" method:"post" tags:"测试" summary:"更新测试状态"` - adminin.TestStatusInp -} -type StatusRes struct{} - -// SwitchReq 更新开关状态 -type SwitchReq struct { - g.Meta `path:"/test/switch" method:"post" tags:"测试" summary:"更新测试状态"` - adminin.TestSwitchInp -} -type SwitchRes struct{} diff --git a/server/api/home/base/site.go b/server/api/home/base/site.go index 6d06972..e5600a0 100644 --- a/server/api/home/base/site.go +++ b/server/api/home/base/site.go @@ -1,6 +1,6 @@ // Package base // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/api/websocket/base/send.go b/server/api/websocket/base/send.go new file mode 100644 index 0000000..5a9c72c --- /dev/null +++ b/server/api/websocket/base/send.go @@ -0,0 +1,15 @@ +package base + +import ( + "github.com/gogf/gf/v2/frame/g" + "hotgo/internal/model/input/websocketin" +) + +// SendToTagReq 发送标签消息 +type SendToTagReq struct { + g.Meta `path:"/send/toTag" method:"post" tags:"WebSocket" summary:"发送标签消息"` + websocketin.SendToTagInput +} + +type SendToTagRes struct { +} diff --git a/server/go.mod b/server/go.mod index 849d614..26800e3 100644 --- a/server/go.mod +++ b/server/go.mod @@ -1,9 +1,8 @@ module hotgo -go 1.15 +go 1.18 require ( - github.com/BurntSushi/toml v1.2.1 // indirect github.com/Shopify/sarama v1.34.1 github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.2 github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.5 @@ -13,37 +12,98 @@ require ( github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 github.com/bufanyun/pool v0.2.1 github.com/casbin/casbin/v2 v2.55.0 - github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/clbanning/mxj/v2 v2.5.7 // indirect github.com/dgrijalva/jwt-go v3.2.0+incompatible - github.com/fatih/color v1.14.1 // indirect github.com/forgoer/openssl v1.4.0 - github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-resty/resty/v2 v2.7.0 - github.com/go-sql-driver/mysql v1.7.0 // indirect - github.com/gogf/gf/contrib/drivers/mysql/v2 v2.3.1 - github.com/gogf/gf/contrib/nosql/redis/v2 v2.3.1 - github.com/gogf/gf/v2 v2.3.1 - github.com/golang/mock v1.6.0 // indirect + github.com/gogf/gf/contrib/drivers/mysql/v2 v2.3.2 + github.com/gogf/gf/contrib/nosql/redis/v2 v2.3.2 + github.com/gogf/gf/v2 v2.3.2 github.com/gomodule/redigo v1.8.8 - github.com/google/btree v1.1.2 // indirect github.com/gorilla/websocket v1.5.0 github.com/kayon/iploc v0.0.0-20200312105652-bda3e968a794 - github.com/magiconair/properties v1.8.7 // indirect - github.com/mattn/go-runewidth v0.0.14 // indirect github.com/mojocn/base64Captcha v1.3.5 github.com/olekukonko/tablewriter v0.0.5 - github.com/rivo/uniseg v0.4.3 // indirect github.com/shirou/gopsutil v3.21.11+incompatible github.com/shopspring/decimal v1.3.1 - github.com/tklauser/go-sysconf v0.3.10 // indirect github.com/ufilesdk-dev/ufile-gosdk v1.0.3 github.com/xuri/excelize/v2 v2.6.0 - github.com/yusufpapurcu/wmi v1.2.2 // indirect - go.opentelemetry.io/otel/sdk v1.11.2 // indirect - go.uber.org/atomic v1.7.0 // indirect - golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect - golang.org/x/net v0.5.0 // indirect golang.org/x/tools v0.1.12 gopkg.in/yaml.v3 v3.0.1 ) + +require ( + github.com/BurntSushi/toml v1.2.1 // indirect + github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible // indirect + github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 // indirect + github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 // indirect + github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect + github.com/alibabacloud-go/openapi-util v0.1.0 // indirect + github.com/alibabacloud-go/tea-utils v1.3.1 // indirect + github.com/alibabacloud-go/tea-xml v1.1.2 // indirect + github.com/aliyun/credentials-go v1.1.2 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/clbanning/mxj/v2 v2.5.7 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/eapache/go-resiliency v1.2.0 // indirect + github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect + github.com/eapache/queue v1.1.0 // indirect + github.com/emirpasic/gods v1.12.0 // indirect + github.com/fatih/color v1.14.1 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/go-redis/redis/v8 v8.11.5 // indirect + github.com/go-sql-driver/mysql v1.7.0 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/golang/mock v1.6.0 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/btree v1.1.2 // indirect + github.com/grokify/html-strip-tags-go v0.0.1 // indirect + github.com/hashicorp/errwrap v1.0.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-uuid v1.0.2 // indirect + github.com/jcmturner/aescts/v2 v2.0.0 // indirect + github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect + github.com/jcmturner/gofork v1.0.0 // indirect + github.com/jcmturner/gokrb5/v8 v8.4.2 // indirect + github.com/jcmturner/rpc/v2 v2.0.3 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.15.6 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect + github.com/pierrec/lz4/v4 v4.1.14 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/richardlehane/mscfb v1.0.4 // indirect + github.com/richardlehane/msoleps v1.0.1 // indirect + github.com/rivo/uniseg v0.4.3 // indirect + github.com/sirupsen/logrus v1.8.1 // indirect + github.com/tidwall/gjson v1.2.1 // indirect + github.com/tidwall/match v1.0.1 // indirect + github.com/tidwall/pretty v0.0.0-20190325153808-1166b9ac2b65 // indirect + github.com/tjfoc/gmsm v1.3.2 // indirect + github.com/tklauser/go-sysconf v0.3.10 // indirect + github.com/tklauser/numcpus v0.4.0 // indirect + github.com/xuri/efp v0.0.0-20220407160117-ad0f7a785be8 // indirect + github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22 // indirect + github.com/yusufpapurcu/wmi v1.2.2 // indirect + go.opentelemetry.io/otel v1.13.0 // indirect + go.opentelemetry.io/otel/sdk v1.13.0 // indirect + go.opentelemetry.io/otel/trace v1.13.0 // indirect + go.uber.org/atomic v1.7.0 // indirect + golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect + golang.org/x/image v0.0.0-20211028202545-6944b10bf410 // indirect + golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/net v0.7.0 // indirect + golang.org/x/sys v0.5.0 // indirect + golang.org/x/text v0.7.0 // indirect + gopkg.in/ini.v1 v1.56.0 // indirect + stathat.com/c/consistent v1.0.0 // indirect +) diff --git a/server/go.sum b/server/go.sum index 0661c1b..83bface 100644 --- a/server/go.sum +++ b/server/go.sum @@ -161,13 +161,13 @@ github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gogf/gf/contrib/drivers/mysql/v2 v2.3.1 h1:uSZtDmlTFS51A98KPgZElPigSGDi7PPDN6mxeIXtsLo= -github.com/gogf/gf/contrib/drivers/mysql/v2 v2.3.1/go.mod h1:z+/0qiOwMroAnj5ESuobTv0l5P83rf+XR3r6Fj8WJyk= -github.com/gogf/gf/contrib/nosql/redis/v2 v2.3.1 h1:0pt3KCUtVtBPC6m/6natIeBKBYAQUcfSqy5IR58ogLo= -github.com/gogf/gf/contrib/nosql/redis/v2 v2.3.1/go.mod h1:V9o2BF9ovJnaZhHImHAanqUgjX4kI51lgU45u5rPqvw= +github.com/gogf/gf/contrib/drivers/mysql/v2 v2.3.2 h1:BZww6QOFgiN/YvovUtN64sgnq59TIg8vtkG8AL6eSl0= +github.com/gogf/gf/contrib/drivers/mysql/v2 v2.3.2/go.mod h1:z+/0qiOwMroAnj5ESuobTv0l5P83rf+XR3r6Fj8WJyk= +github.com/gogf/gf/contrib/nosql/redis/v2 v2.3.2 h1:AsYganxtge0nz7eYDYdvGH6E2pRe5IuK45/OLHIFrj8= +github.com/gogf/gf/contrib/nosql/redis/v2 v2.3.2/go.mod h1:V9o2BF9ovJnaZhHImHAanqUgjX4kI51lgU45u5rPqvw= github.com/gogf/gf/v2 v2.0.0/go.mod h1:apktt6TleWtCIwpz63vBqUnw8MX8gWKoZyxgDpXFtgM= -github.com/gogf/gf/v2 v2.3.1 h1:uptCJK47N6KSRwTBnFAqBWYnYa/OXBkZ0OlhO9CK7bQ= -github.com/gogf/gf/v2 v2.3.1/go.mod h1:tsbmtwcAl2chcYoq/fP9W2FZf06aw4i89X34nbSHo9Y= +github.com/gogf/gf/v2 v2.3.2 h1:nlJ0zuDWqFb93/faZmr7V+GADx/lzz5Unz/9x6OJ2u8= +github.com/gogf/gf/v2 v2.3.2/go.mod h1:tsbmtwcAl2chcYoq/fP9W2FZf06aw4i89X34nbSHo9Y= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= @@ -199,7 +199,6 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -221,7 +220,6 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -240,9 +238,7 @@ github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORR github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= -github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= @@ -340,7 +336,6 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108 github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.0.0 h1:CcuG/HvWNkkaqCUpJifQY8z7qEMBJya6aLPx6ftGyjQ= github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= @@ -407,8 +402,6 @@ github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -416,9 +409,7 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/tidwall/gjson v1.2.1 h1:j0efZLrZUvNerEf6xqoi0NjWMK5YlLrR7Guo/dxY174= github.com/tidwall/gjson v1.2.1/go.mod h1:c/nTNbUr0E0OrXEhq1pwa8iEgc2DOt4ZZqAt1HtCkPA= github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc= @@ -450,7 +441,6 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -460,16 +450,16 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/otel v1.0.0/go.mod h1:AjRVh9A5/5DE7S+mZtTR6t8vpKKryam+0lREnfmS4cg= go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk= -go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0= -go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= +go.opentelemetry.io/otel v1.13.0 h1:1ZAKnNQKwBBxFtww/GwxNUyTf0AxkZzrukO8MeXqe4Y= +go.opentelemetry.io/otel v1.13.0/go.mod h1:FH3RtdZCzRkJYFTCsAKDy9l/XYjMdNv6QrkFFB8DvVg= go.opentelemetry.io/otel/sdk v1.0.0/go.mod h1:PCrDHlSy5x1kjezSdL37PhbFUMjrsLRshJ2zCzeXwbM= go.opentelemetry.io/otel/sdk v1.7.0/go.mod h1:uTEOTwaqIVuTGiJN7ii13Ibp75wJmYUDe374q6cZwUU= -go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU= -go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= +go.opentelemetry.io/otel/sdk v1.13.0 h1:BHib5g8MvdqS65yo2vV1s6Le42Hm6rrw08qU6yz5JaM= +go.opentelemetry.io/otel/sdk v1.13.0/go.mod h1:YLKPx5+6Vx/o1TCUYYs+bpymtkmazOMT6zoRrC7AQ7I= go.opentelemetry.io/otel/trace v1.0.0/go.mod h1:PXTWqayeFUlJV1YDNhsJYB184+IvAH814St6o6ajzIs= go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU= -go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0= -go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= +go.opentelemetry.io/otel/trace v1.13.0 h1:CBgRZ6ntv+Amuj1jDsMhZtlAPT6gbyIRdaIzFhfBSdY= +go.opentelemetry.io/otel/trace v1.13.0/go.mod h1:muCvmmO9KKpvuXSf3KKAXXB2ygNYHQ+ZfI5X08d3tds= go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= @@ -482,7 +472,6 @@ golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220408190544-5352b0902921/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= @@ -554,7 +543,6 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -563,9 +551,8 @@ golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220407224826-aac1ed45d8e3/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -583,7 +570,6 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -639,17 +625,12 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -658,8 +639,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8-0.20211105212822-18b340fc7af2/go.mod h1:EFNZuWvGYxIRUEX+K8UmCFwYmZjqcrnq15ZuVldZkZ0= -golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -789,7 +770,6 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/server/hack/config.yaml b/server/hack/config.yaml index d207e3b..ab4f527 100644 --- a/server/hack/config.yaml +++ b/server/hack/config.yaml @@ -3,14 +3,14 @@ gfcli: build: name: "hotgo" - arch: "amd64" - system: "linux" +# arch: "all" #amd64 +# system: "all" #linux mod: "none" cgo: 0 packSrc: "resource" packDst: "internal/packed/packed.go" version: "" - output: "./bin" + output: "./temp/hotgo" extra: "" # gf生成代码,如果你想调整hotgo中代码生成的相关dao、service代码,同样也受用于此配置 @@ -20,12 +20,13 @@ gfcli: group: "default" # 分组。使用hotgo代码生成功能时必须填 # path: "./app" # tables: "" #指定当前数据库中需要执行代码生成的数据表。如果为空,表示数据库的所有表都会生成。 - # tablesEx: "" #指定当前数据库中需要排除代码生成的数据表。 + tablesEx: "hg_sys_addons_install" #指定当前数据库中需要排除代码生成的数据表。 removePrefix: "hg_" descriptionTag: true noModelComment: true jsonCase: "CamelLower" gJsonSupport: true + clear: true # service: # 生成业务配置 # srcFolder: "internal/logic" diff --git a/server/internal/cmd/cmd.go b/server/internal/cmd/cmd.go index cd881b7..d87a949 100644 --- a/server/internal/cmd/cmd.go +++ b/server/internal/cmd/cmd.go @@ -1,6 +1,6 @@ // Package cmd // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -41,7 +41,7 @@ var ( --------------------------------------------------------------------------------- 更多 github地址:https://github.com/bufanyun/hotgo - 文档地址:文档正在书写中,请耐心等一等。 + 文档地址:https://github.com/bufanyun/hotgo/tree/v2.0/docs HotGo框架交流1群:190966648 `, } diff --git a/server/internal/cmd/handler_shutdown.go b/server/internal/cmd/handler_shutdown.go index bc90960..841bce6 100644 --- a/server/internal/cmd/handler_shutdown.go +++ b/server/internal/cmd/handler_shutdown.go @@ -1,6 +1,6 @@ // Package cmd // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/cmd/http.go b/server/internal/cmd/http.go index e55a0cf..30abe7e 100644 --- a/server/internal/cmd/http.go +++ b/server/internal/cmd/http.go @@ -1,9 +1,8 @@ // Package cmd // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE -// package cmd import ( @@ -11,6 +10,7 @@ import ( "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/os/gcmd" + "hotgo/internal/library/addons" "hotgo/internal/library/casbin" "hotgo/internal/router" "hotgo/internal/service" @@ -36,8 +36,7 @@ var ( }) // 请求结束事件回调 - s.BindHookHandler("/*any", ghttp.HookAfterOutput, service.Hook().AccessLog) - s.BindHookHandler("/*any", ghttp.HookAfterOutput, service.Hook().LastActive) + s.BindHookHandler("/*any", ghttp.HookAfterOutput, service.Hook().AfterOutput) s.Group("/", func(group *ghttp.RouterGroup) { @@ -61,6 +60,9 @@ var ( // 注册前台页面路由 router.Home(ctx, group) + + // 注册插件路由 + addons.RegisterModulesRouter(ctx, group) }) // 启动定时任务 diff --git a/server/internal/cmd/queue.go b/server/internal/cmd/queue.go index e97034c..974d1a2 100644 --- a/server/internal/cmd/queue.go +++ b/server/internal/cmd/queue.go @@ -1,6 +1,6 @@ // Package cmd // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/cmd/tools.go b/server/internal/cmd/tools.go index 0cc89d7..07a8b06 100644 --- a/server/internal/cmd/tools.go +++ b/server/internal/cmd/tools.go @@ -1,6 +1,6 @@ // Package cmd // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/consts/addons.go b/server/internal/consts/addons.go new file mode 100644 index 0000000..2b572e5 --- /dev/null +++ b/server/internal/consts/addons.go @@ -0,0 +1,51 @@ +package consts + +const ( + AddonsTag = "addons_" // 插件标签前缀 + AddonsDir = "addons" // 插件路径 +) + +const ( + AddonsGroupPlug = 1 // 功能扩展 + AddonsGroupBusiness = 2 // 主要业务 + AddonsGroupThirdParty = 3 // 第三方插件 + AddonsGroupMiniApp = 4 // 小程序 + AddonsGroupCustomer = 5 // 客户关系 + AddonsGroupActivity = 6 // 营销及活动 + AddonsGroupServices = 7 // 常用服务及工具 + AddonsGroupBiz = 8 // 行业解决方案 +) + +var AddonsGroupNameMap = map[int]string{ + AddonsGroupPlug: "功能扩展", + AddonsGroupBusiness: "主要业务", + AddonsGroupThirdParty: "第三方插件", + AddonsGroupMiniApp: "小程序", + AddonsGroupCustomer: "客户关系", + AddonsGroupActivity: "营销及活动", + AddonsGroupServices: "常用服务及工具", + AddonsGroupBiz: "行业解决方案", +} + +var AddonsGroupIconMap = map[int]string{ + AddonsGroupPlug: "AppstoreAddOutlined", + AddonsGroupBusiness: "FireOutlined", + AddonsGroupThirdParty: "ApiOutlined", + AddonsGroupMiniApp: "RocketOutlined", + AddonsGroupCustomer: "UserSwitchOutlined", + AddonsGroupActivity: "TagOutlined", + AddonsGroupServices: "ToolOutlined", + AddonsGroupBiz: "CheckCircleOutlined", +} + +const ( + AddonsInstallStatusOk = 1 // 已安装 + AddonsInstallStatusNo = 2 // 未安装 + AddonsInstallStatusUn = 3 // 已卸载 +) + +var AddonsInstallStatusNameMap = map[int]string{ + AddonsInstallStatusOk: "已安装", + AddonsInstallStatusNo: "未安装", + AddonsInstallStatusUn: "已卸载", +} diff --git a/server/internal/consts/app.go b/server/internal/consts/app.go index 667060f..9b57213 100644 --- a/server/internal/consts/app.go +++ b/server/internal/consts/app.go @@ -1,14 +1,15 @@ // Package consts // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE -// package consts // 应用类型 const ( - AppAdmin = "admin" - AppApi = "api" - AppDefault = "default" + AppAdmin = "admin" + AppApi = "api" + AppHome = "home" + AppWebSocket = "websocket" + AppDefault = "default" ) diff --git a/server/internal/consts/redis.go b/server/internal/consts/cache.go similarity index 53% rename from server/internal/consts/redis.go rename to server/internal/consts/cache.go index 662ef19..34f9f76 100644 --- a/server/internal/consts/redis.go +++ b/server/internal/consts/cache.go @@ -1,13 +1,12 @@ // Package consts // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE -// package consts -// redis +// cache const ( - RedisJwtToken = "jwtToken:" // JWT-token - RedisJwtUserBind = "jwtUserBind:" // JWT-用户身份绑定 + CacheJwtToken = "jwt_token:" // JWT-token + CacheJwtUserBind = "jwt_user_bind:" // JWT-用户身份绑定 ) diff --git a/server/internal/consts/config.go b/server/internal/consts/config.go index 7f4a47a..6d13dba 100644 --- a/server/internal/consts/config.go +++ b/server/internal/consts/config.go @@ -1,6 +1,6 @@ // Package consts // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/consts/context.go b/server/internal/consts/context.go index eca8509..d96e797 100644 --- a/server/internal/consts/context.go +++ b/server/internal/consts/context.go @@ -1,6 +1,6 @@ // Package consts // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/consts/cron.go b/server/internal/consts/cron.go index 800bd60..b2ec551 100644 --- a/server/internal/consts/cron.go +++ b/server/internal/consts/cron.go @@ -1,6 +1,6 @@ // Package consts // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/consts/debris.go b/server/internal/consts/debris.go index d290658..b8bb253 100644 --- a/server/internal/consts/debris.go +++ b/server/internal/consts/debris.go @@ -1,6 +1,6 @@ // Package consts // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/consts/error.go b/server/internal/consts/error.go index c2fe5d0..3d82248 100644 --- a/server/internal/consts/error.go +++ b/server/internal/consts/error.go @@ -1,6 +1,6 @@ // Package consts // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/consts/gencodes.go b/server/internal/consts/gencodes.go index a718c4b..5f87aaa 100644 --- a/server/internal/consts/gencodes.go +++ b/server/internal/consts/gencodes.go @@ -1,6 +1,6 @@ // Package consts // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/consts/queue.go b/server/internal/consts/queue.go index 21059bd..d105f6b 100644 --- a/server/internal/consts/queue.go +++ b/server/internal/consts/queue.go @@ -1,6 +1,6 @@ // Package consts // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/consts/role.go b/server/internal/consts/role.go index 093f992..e8d59bb 100644 --- a/server/internal/consts/role.go +++ b/server/internal/consts/role.go @@ -1,6 +1,6 @@ // Package consts // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/consts/status.go b/server/internal/consts/status.go index a382400..ee7ddf7 100644 --- a/server/internal/consts/status.go +++ b/server/internal/consts/status.go @@ -1,6 +1,6 @@ // Package consts // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/consts/upload.go b/server/internal/consts/upload.go index 3025eb9..2d6c2ff 100644 --- a/server/internal/consts/upload.go +++ b/server/internal/consts/upload.go @@ -1,6 +1,6 @@ // Package consts // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/consts/version.go b/server/internal/consts/version.go index d6b2c0e..ecb18dd 100644 --- a/server/internal/consts/version.go +++ b/server/internal/consts/version.go @@ -1,12 +1,11 @@ // Package consts // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE -// package consts // VersionApp HotGo版本 const ( - VersionApp = "2.1.3" + VersionApp = "2.2.10" ) diff --git a/server/internal/controller/backend/admin/dept.go b/server/internal/controller/admin/admin/dept.go similarity index 97% rename from server/internal/controller/backend/admin/dept.go rename to server/internal/controller/admin/admin/dept.go index 789014e..8668f2f 100644 --- a/server/internal/controller/backend/admin/dept.go +++ b/server/internal/controller/admin/admin/dept.go @@ -1,6 +1,6 @@ // Package admin // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -9,7 +9,7 @@ package admin import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/dept" + "hotgo/api/admin/dept" "hotgo/internal/model/input/adminin" "hotgo/internal/service" ) diff --git a/server/internal/controller/backend/admin/member.go b/server/internal/controller/admin/admin/member.go similarity index 98% rename from server/internal/controller/backend/admin/member.go rename to server/internal/controller/admin/admin/member.go index 9d7d0fc..7ef9f48 100644 --- a/server/internal/controller/backend/admin/member.go +++ b/server/internal/controller/admin/admin/member.go @@ -1,6 +1,6 @@ // Package admin // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -10,7 +10,7 @@ import ( "context" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/member" + "hotgo/api/admin/member" "hotgo/internal/library/contexts" "hotgo/internal/model/input/adminin" "hotgo/internal/model/input/form" diff --git a/server/internal/controller/backend/admin/menu.go b/server/internal/controller/admin/admin/menu.go similarity index 97% rename from server/internal/controller/backend/admin/menu.go rename to server/internal/controller/admin/admin/menu.go index 6641119..1d1054e 100644 --- a/server/internal/controller/backend/admin/menu.go +++ b/server/internal/controller/admin/admin/menu.go @@ -1,6 +1,6 @@ // Package admin // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -9,7 +9,7 @@ package admin import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/menu" + "hotgo/api/admin/menu" "hotgo/internal/model/input/adminin" "hotgo/internal/service" ) diff --git a/server/internal/controller/backend/admin/monitor.go b/server/internal/controller/admin/admin/monitor.go similarity index 97% rename from server/internal/controller/backend/admin/monitor.go rename to server/internal/controller/admin/admin/monitor.go index ea71f1e..6193f0d 100644 --- a/server/internal/controller/backend/admin/monitor.go +++ b/server/internal/controller/admin/admin/monitor.go @@ -1,6 +1,6 @@ // Package admin // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -11,7 +11,7 @@ import ( "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/text/gstr" - "hotgo/api/backend/monitor" + "hotgo/api/admin/monitor" "hotgo/internal/consts" "hotgo/internal/model/input/form" "hotgo/internal/websocket" diff --git a/server/internal/controller/backend/admin/notice.go b/server/internal/controller/admin/admin/notice.go similarity index 98% rename from server/internal/controller/backend/admin/notice.go rename to server/internal/controller/admin/admin/notice.go index 33649c4..ab13ae9 100644 --- a/server/internal/controller/backend/admin/notice.go +++ b/server/internal/controller/admin/admin/notice.go @@ -1,6 +1,6 @@ // Package admin // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -9,7 +9,7 @@ package admin import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/notice" + "hotgo/api/admin/notice" "hotgo/internal/consts" "hotgo/internal/model/input/adminin" "hotgo/internal/model/input/form" diff --git a/server/internal/controller/backend/admin/post.go b/server/internal/controller/admin/admin/post.go similarity index 97% rename from server/internal/controller/backend/admin/post.go rename to server/internal/controller/admin/admin/post.go index e1a4bd4..2ba8966 100644 --- a/server/internal/controller/backend/admin/post.go +++ b/server/internal/controller/admin/admin/post.go @@ -1,6 +1,6 @@ // Package admin // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -9,7 +9,7 @@ package admin import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/post" + "hotgo/api/admin/post" "hotgo/internal/model/input/adminin" "hotgo/internal/model/input/form" "hotgo/internal/service" diff --git a/server/internal/controller/backend/admin/role.go b/server/internal/controller/admin/admin/role.go similarity index 97% rename from server/internal/controller/backend/admin/role.go rename to server/internal/controller/admin/admin/role.go index f0aaf4b..cdd35e1 100644 --- a/server/internal/controller/backend/admin/role.go +++ b/server/internal/controller/admin/admin/role.go @@ -1,6 +1,6 @@ // Package admin // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -9,7 +9,7 @@ package admin import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/role" + "hotgo/api/admin/role" "hotgo/internal/library/contexts" "hotgo/internal/model/input/adminin" "hotgo/internal/model/input/form" diff --git a/server/internal/controller/backend/common/console.go b/server/internal/controller/admin/common/console.go similarity index 92% rename from server/internal/controller/backend/common/console.go rename to server/internal/controller/admin/common/console.go index b0e43b1..8558aee 100644 --- a/server/internal/controller/backend/common/console.go +++ b/server/internal/controller/admin/common/console.go @@ -1,6 +1,6 @@ // Package common // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -8,7 +8,7 @@ package common import ( "context" - "hotgo/api/backend/common" + "hotgo/api/admin/common" ) var Console = cConsole{} diff --git a/server/internal/controller/backend/common/ems.go b/server/internal/controller/admin/common/ems.go similarity index 96% rename from server/internal/controller/backend/common/ems.go rename to server/internal/controller/admin/common/ems.go index b4afe26..95153e0 100644 --- a/server/internal/controller/backend/common/ems.go +++ b/server/internal/controller/admin/common/ems.go @@ -1,6 +1,6 @@ // Package common // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -10,7 +10,7 @@ import ( "context" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" - "hotgo/api/backend/common" + "hotgo/api/admin/common" "hotgo/internal/consts" "hotgo/internal/library/contexts" "hotgo/internal/model/entity" diff --git a/server/internal/controller/backend/common/site.go b/server/internal/controller/admin/common/site.go similarity index 63% rename from server/internal/controller/backend/common/site.go rename to server/internal/controller/admin/common/site.go index 6e4b20b..44fc1a3 100644 --- a/server/internal/controller/backend/common/site.go +++ b/server/internal/controller/admin/common/site.go @@ -1,19 +1,18 @@ // Package common // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE -// package common import ( "context" "github.com/gogf/gf/v2/crypto/gmd5" "github.com/gogf/gf/v2/errors/gerror" - "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" + "github.com/gogf/gf/v2/text/gstr" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/common" + "hotgo/api/admin/common" "hotgo/internal/consts" "hotgo/internal/library/cache" "hotgo/internal/library/captcha" @@ -21,6 +20,7 @@ import ( "hotgo/internal/model/input/adminin" "hotgo/internal/model/input/sysin" "hotgo/internal/service" + "hotgo/utility/validate" ) var Site = cSite{} @@ -34,29 +34,43 @@ func (c *cSite) Ping(ctx context.Context, req *common.SitePingReq) (res *common. // Config 获取配置 func (c *cSite) Config(ctx context.Context, req *common.SiteConfigReq) (res *common.SiteConfigRes, err error) { + request := ghttp.RequestFromCtx(ctx) res = &common.SiteConfigRes{ Version: consts.VersionApp, - WsAddr: c.getWsAddr(ctx), + WsAddr: c.getWsAddr(ctx, request), + Domain: c.getDomain(ctx, request), } return } -func (c *cSite) getWsAddr(ctx context.Context) string { - ws := g.Cfg().MustGet(ctx, "hotgo.wsAddr", "ws://127.0.0.1:8000/socket") - return ws.String() +func (c *cSite) getWsAddr(ctx context.Context, request *ghttp.Request) string { + // 如果是本地IP访问,则认为是调试模式,走实际请求地址,否则走配置中的地址 + ip := ghttp.RequestFromCtx(ctx).GetHeader("hostname") + if validate.IsLocalIPAddr(ip) { + return "ws://" + ip + ":" + gstr.StrEx(request.Host, ":") + "/socket" + } - //// nginx负载均衡部署 - //// 如果是IP访问,则认为是调试模式,走配置中的ws地址,否则走实际请求中的域名+协议 - //if !validate.IsDNSName(ghttp.RequestFromCtx(ctx).Host) { - // ws := g.Cfg().MustGet(ctx, "hotgo.wsAddr", "ws://127.0.0.1:8000/socket") - // return ws.String() - //} - // - //if !validate.IsHTTPS(ctx) { - // return fmt.Sprintf("ws://%s/socket", url.GetDomain(ctx)) - //} - // - //return fmt.Sprintf("wss://%s/socket", url.GetDomain(ctx)) + basic, err := service.SysConfig().GetBasic(ctx) + if err != nil || basic == nil { + return "" + } + + return basic.WsAddr +} + +func (c *cSite) getDomain(ctx context.Context, request *ghttp.Request) string { + // 如果是本地IP访问,则认为是调试模式,走实际请求地址,否则走配置中的地址 + ip := request.GetHeader("hostname") + if validate.IsLocalIPAddr(ip) { + return "http://" + ip + ":" + gstr.StrEx(request.Host, ":") + } + + basic, err := service.SysConfig().GetBasic(ctx) + if err != nil || basic == nil { + return "" + } + + return basic.Domain } // Captcha 登录验证码 @@ -98,14 +112,13 @@ func (c *cSite) Login(ctx context.Context, req *common.LoginReq) (res *common.Lo // Logout 注销登录 func (c *cSite) Logout(ctx context.Context, req *common.LoginLogoutReq) (res *common.LoginLogoutRes, err error) { - token := consts.RedisJwtToken + gmd5.MustEncryptString(jwt.GetAuthorization(ghttp.RequestFromCtx(ctx))) + token := consts.CacheJwtToken + gmd5.MustEncryptString(jwt.GetAuthorization(ghttp.RequestFromCtx(ctx))) if len(token) == 0 { err = gerror.New("当前用户未登录!") - return res, err + return } // 删除登录token - ca := cache.New() - _, err = ca.Remove(ctx, token) + _, err = cache.Instance().Remove(ctx, token) return } diff --git a/server/internal/controller/backend/common/sms.go b/server/internal/controller/admin/common/sms.go similarity index 95% rename from server/internal/controller/backend/common/sms.go rename to server/internal/controller/admin/common/sms.go index e8b5044..a5d557e 100644 --- a/server/internal/controller/backend/common/sms.go +++ b/server/internal/controller/admin/common/sms.go @@ -1,6 +1,6 @@ // Package common // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -11,7 +11,7 @@ import ( "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/common" + "hotgo/api/admin/common" "hotgo/internal/consts" "hotgo/internal/library/contexts" "hotgo/internal/model/entity" diff --git a/server/internal/controller/backend/common/upload.go b/server/internal/controller/admin/common/upload.go similarity index 93% rename from server/internal/controller/backend/common/upload.go rename to server/internal/controller/admin/common/upload.go index f3f906b..992295c 100644 --- a/server/internal/controller/backend/common/upload.go +++ b/server/internal/controller/admin/common/upload.go @@ -1,6 +1,6 @@ // Package common // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -10,7 +10,7 @@ import ( "context" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/frame/g" - "hotgo/api/backend/common" + "hotgo/api/admin/common" "hotgo/internal/service" ) diff --git a/server/internal/controller/admin/sys/addons.go b/server/internal/controller/admin/sys/addons.go new file mode 100644 index 0000000..bc04aad --- /dev/null +++ b/server/internal/controller/admin/sys/addons.go @@ -0,0 +1,108 @@ +// Package sys +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package sys + +import ( + "context" + "github.com/gogf/gf/v2/util/gconv" + "hotgo/api/admin/addons" + "hotgo/internal/model/input/form" + "hotgo/internal/model/input/sysin" + "hotgo/internal/service" + "hotgo/utility/validate" +) + +var ( + Addons = cAddons{} +) + +type cAddons struct{} + +// List 查看列表 +func (c *cAddons) List(ctx context.Context, req *addons.ListReq) (res *addons.ListRes, err error) { + var in sysin.AddonsListInp + if err = gconv.Scan(req, &in); err != nil { + return + } + + list, totalCount, err := service.SysAddons().List(ctx, in) + if err != nil { + return + } + + res = new(addons.ListRes) + res.List = list + res.PageCount = form.CalPageCount(totalCount, req.PerPage) + res.Page = req.Page + res.PerPage = req.PerPage + return +} + +// Selects 获取指定信息 +func (c *cAddons) Selects(ctx context.Context, req *addons.SelectsReq) (res *addons.SelectsRes, err error) { + data, err := service.SysAddons().Selects(ctx, sysin.AddonsSelectsInp{}) + if err != nil { + return + } + + res = new(addons.SelectsRes) + res.AddonsSelectsModel = data + return +} + +// Build 生成预览 +func (c *cAddons) Build(ctx context.Context, req *addons.BuildReq) (res *addons.BuildRes, err error) { + var in sysin.AddonsBuildInp + if err = gconv.Scan(req, &in); err != nil { + return + } + + if err = validate.PreFilter(ctx, &in); err != nil { + return + } + + err = service.SysAddons().Build(ctx, in) + return +} + +// Install 安装模块 +func (c *cAddons) Install(ctx context.Context, req *addons.InstallReq) (res *addons.InstallRes, err error) { + var in sysin.AddonsInstallInp + if err = gconv.Scan(req, &in); err != nil { + return + } + + if err = service.SysAddons().Install(ctx, in); err != nil { + return + } + return +} + +// Upgrade 更新模块 +func (c *cAddons) Upgrade(ctx context.Context, req *addons.UpgradeReq) (res *addons.UpgradeRes, err error) { + var in sysin.AddonsUpgradeInp + if err = gconv.Scan(req, &in); err != nil { + return + } + + if err = service.SysAddons().Upgrade(ctx, in); err != nil { + return + } + return +} + +// UnInstall 卸载模块 +func (c *cAddons) UnInstall(ctx context.Context, req *addons.UnInstallReq) (res *addons.UnInstallRes, err error) { + var in sysin.AddonsUnInstallInp + if err = gconv.Scan(req, &in); err != nil { + return + } + + if err = service.SysAddons().UnInstall(ctx, in); err != nil { + return + } + return +} diff --git a/server/internal/controller/backend/sys/attachment.go b/server/internal/controller/admin/sys/attachment.go similarity index 96% rename from server/internal/controller/backend/sys/attachment.go rename to server/internal/controller/admin/sys/attachment.go index da7f0c4..4ae3a87 100644 --- a/server/internal/controller/backend/sys/attachment.go +++ b/server/internal/controller/admin/sys/attachment.go @@ -1,6 +1,6 @@ // Package sys // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -9,7 +9,7 @@ package sys import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/attachment" + "hotgo/api/admin/attachment" "hotgo/internal/model/input/form" "hotgo/internal/model/input/sysin" "hotgo/internal/service" diff --git a/server/internal/controller/backend/sys/blacklist.go b/server/internal/controller/admin/sys/blacklist.go similarity index 96% rename from server/internal/controller/backend/sys/blacklist.go rename to server/internal/controller/admin/sys/blacklist.go index 4a6a6ca..49719fd 100644 --- a/server/internal/controller/backend/sys/blacklist.go +++ b/server/internal/controller/admin/sys/blacklist.go @@ -1,6 +1,6 @@ // Package sys // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -9,7 +9,7 @@ package sys import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/blacklist" + "hotgo/api/admin/blacklist" "hotgo/internal/model/input/form" "hotgo/internal/model/input/sysin" "hotgo/internal/service" diff --git a/server/internal/controller/backend/sys/config.go b/server/internal/controller/admin/sys/config.go similarity index 94% rename from server/internal/controller/backend/sys/config.go rename to server/internal/controller/admin/sys/config.go index 478c337..21c07d6 100644 --- a/server/internal/controller/backend/sys/config.go +++ b/server/internal/controller/admin/sys/config.go @@ -1,6 +1,6 @@ // Package sys // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -9,7 +9,7 @@ package sys import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/config" + "hotgo/api/admin/config" "hotgo/internal/consts" "hotgo/internal/model/input/form" "hotgo/internal/model/input/sysin" diff --git a/server/internal/controller/backend/sys/cron.go b/server/internal/controller/admin/sys/cron.go similarity index 97% rename from server/internal/controller/backend/sys/cron.go rename to server/internal/controller/admin/sys/cron.go index 33d8b84..7b126b1 100644 --- a/server/internal/controller/backend/sys/cron.go +++ b/server/internal/controller/admin/sys/cron.go @@ -1,6 +1,6 @@ // Package sys // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -10,7 +10,7 @@ import ( "context" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/cron" + "hotgo/api/admin/cron" "hotgo/internal/model/input/form" "hotgo/internal/model/input/sysin" "hotgo/internal/service" diff --git a/server/internal/controller/backend/sys/cron_group.go b/server/internal/controller/admin/sys/cron_group.go similarity index 97% rename from server/internal/controller/backend/sys/cron_group.go rename to server/internal/controller/admin/sys/cron_group.go index a93a0fa..479ff06 100644 --- a/server/internal/controller/backend/sys/cron_group.go +++ b/server/internal/controller/admin/sys/cron_group.go @@ -1,6 +1,6 @@ // Package sys // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -9,7 +9,7 @@ package sys import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/cron" + "hotgo/api/admin/cron" "hotgo/internal/model/input/form" "hotgo/internal/model/input/sysin" "hotgo/internal/service" diff --git a/server/internal/controller/backend/sys/curd_demo.go b/server/internal/controller/admin/sys/curd_demo.go similarity index 76% rename from server/internal/controller/backend/sys/curd_demo.go rename to server/internal/controller/admin/sys/curd_demo.go index 2708162..4622ddc 100644 --- a/server/internal/controller/backend/sys/curd_demo.go +++ b/server/internal/controller/admin/sys/curd_demo.go @@ -3,14 +3,14 @@ // @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE -// @AutoGenerate Version 2.1.2 -// @AutoGenerate Date 2023-02-08 17:47:32 +// @AutoGenerate Version 2.1.4 +// @AutoGenerate Date 2023-02-20 16:41:58 // package sys import ( "context" - "hotgo/api/backend/curddemo" + "hotgo/api/admin/curddemo" "hotgo/internal/model/input/form" "hotgo/internal/model/input/sysin" "hotgo/internal/service" @@ -29,16 +29,16 @@ type cCurdDemo struct{} func (c *cCurdDemo) List(ctx context.Context, req *curddemo.ListReq) (res *curddemo.ListRes, err error) { var in sysin.CurdDemoListInp if err = gconv.Scan(req, &in); err != nil { - return nil, err + return } if err = validate.PreFilter(ctx, &in); err != nil { - return nil, err + return } list, totalCount, err := service.SysCurdDemo().List(ctx, in) if err != nil { - return nil, err + return } res = new(curddemo.ListRes) @@ -46,123 +46,113 @@ func (c *cCurdDemo) List(ctx context.Context, req *curddemo.ListReq) (res *curdd res.PageCount = form.CalPageCount(totalCount, req.PerPage) res.Page = req.Page res.PerPage = req.PerPage - return res, nil + return } // Export 导出生成演示列表 func (c *cCurdDemo) Export(ctx context.Context, req *curddemo.ExportReq) (res *curddemo.ExportRes, err error) { var in sysin.CurdDemoListInp if err = gconv.Scan(req, &in); err != nil { - return nil, err + return } if err = validate.PreFilter(ctx, &in); err != nil { - return nil, err + return } - if err = service.SysCurdDemo().Export(ctx, in); err != nil { - return nil, err - } - return res, nil + err = service.SysCurdDemo().Export(ctx, in) + return } // Edit 更新生成演示 func (c *cCurdDemo) Edit(ctx context.Context, req *curddemo.EditReq) (res *curddemo.EditRes, err error) { var in sysin.CurdDemoEditInp if err = gconv.Scan(req, &in); err != nil { - return nil, err + return } if err = validate.PreFilter(ctx, &in); err != nil { - return nil, err + return } - if err = service.SysCurdDemo().Edit(ctx, in); err != nil { - return nil, err - } - return res, nil + err = service.SysCurdDemo().Edit(ctx, in) + return } // MaxSort 获取生成演示最大排序 func (c *cCurdDemo) MaxSort(ctx context.Context, req *curddemo.MaxSortReq) (res *curddemo.MaxSortRes, err error) { data, err := service.SysCurdDemo().MaxSort(ctx, sysin.CurdDemoMaxSortInp{}) if err != nil { - return nil, err + return } res = new(curddemo.MaxSortRes) res.CurdDemoMaxSortModel = data - return res, nil + return } // View 获取指定生成演示信息 func (c *cCurdDemo) View(ctx context.Context, req *curddemo.ViewReq) (res *curddemo.ViewRes, err error) { var in sysin.CurdDemoViewInp if err = gconv.Scan(req, &in); err != nil { - return nil, err + return } if err = validate.PreFilter(ctx, &in); err != nil { - return nil, err + return } data, err := service.SysCurdDemo().View(ctx, in) if err != nil { - return nil, err + return } res = new(curddemo.ViewRes) res.CurdDemoViewModel = data - return res, nil + return } // Delete 删除生成演示 func (c *cCurdDemo) Delete(ctx context.Context, req *curddemo.DeleteReq) (res *curddemo.DeleteRes, err error) { var in sysin.CurdDemoDeleteInp if err = gconv.Scan(req, &in); err != nil { - return nil, err + return } if err = validate.PreFilter(ctx, &in); err != nil { - return nil, err + return } - if err = service.SysCurdDemo().Delete(ctx, in); err != nil { - return nil, err - } - return res, nil + err = service.SysCurdDemo().Delete(ctx, in) + return } // Status 更新生成演示状态 func (c *cCurdDemo) Status(ctx context.Context, req *curddemo.StatusReq) (res *curddemo.StatusRes, err error) { var in sysin.CurdDemoStatusInp if err = gconv.Scan(req, &in); err != nil { - return nil, err + return } if err = validate.PreFilter(ctx, &in); err != nil { - return nil, err + return } - if err = service.SysCurdDemo().Status(ctx, in); err != nil { - return nil, err - } - return res, nil + err = service.SysCurdDemo().Status(ctx, in) + return } // Switch 更新生成演示开关状态 func (c *cCurdDemo) Switch(ctx context.Context, req *curddemo.SwitchReq) (res *curddemo.SwitchRes, err error) { var in sysin.CurdDemoSwitchInp if err = gconv.Scan(req, &in); err != nil { - return nil, err + return } if err = validate.PreFilter(ctx, &in); err != nil { - return nil, err + return } - if err = service.SysCurdDemo().Switch(ctx, in); err != nil { - return nil, err - } - return res, nil + err = service.SysCurdDemo().Switch(ctx, in) + return } diff --git a/server/internal/controller/backend/sys/dict_data.go b/server/internal/controller/admin/sys/dict_data.go similarity index 96% rename from server/internal/controller/backend/sys/dict_data.go rename to server/internal/controller/admin/sys/dict_data.go index b0506bc..e0f5e28 100644 --- a/server/internal/controller/backend/sys/dict_data.go +++ b/server/internal/controller/admin/sys/dict_data.go @@ -1,6 +1,6 @@ // Package sys // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -9,7 +9,7 @@ package sys import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/dict" + "hotgo/api/admin/dict" "hotgo/internal/model/input/form" "hotgo/internal/model/input/sysin" "hotgo/internal/service" diff --git a/server/internal/controller/backend/sys/dict_type.go b/server/internal/controller/admin/sys/dict_type.go similarity index 95% rename from server/internal/controller/backend/sys/dict_type.go rename to server/internal/controller/admin/sys/dict_type.go index 9def22c..b34f77d 100644 --- a/server/internal/controller/backend/sys/dict_type.go +++ b/server/internal/controller/admin/sys/dict_type.go @@ -1,6 +1,6 @@ // Package sys // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -9,7 +9,7 @@ package sys import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/dict" + "hotgo/api/admin/dict" "hotgo/internal/model/input/sysin" "hotgo/internal/service" ) diff --git a/server/internal/controller/backend/sys/ems_log.go b/server/internal/controller/admin/sys/ems_log.go similarity index 96% rename from server/internal/controller/backend/sys/ems_log.go rename to server/internal/controller/admin/sys/ems_log.go index 6724795..10459aa 100644 --- a/server/internal/controller/backend/sys/ems_log.go +++ b/server/internal/controller/admin/sys/ems_log.go @@ -1,6 +1,6 @@ // Package sys // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -9,7 +9,7 @@ package sys import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/emslog" + "hotgo/api/admin/emslog" "hotgo/internal/model/input/form" "hotgo/internal/model/input/sysin" "hotgo/internal/service" diff --git a/server/internal/controller/backend/sys/gen_codes.go b/server/internal/controller/admin/sys/gen_codes.go similarity index 93% rename from server/internal/controller/backend/sys/gen_codes.go rename to server/internal/controller/admin/sys/gen_codes.go index b837f30..ca1d23d 100644 --- a/server/internal/controller/backend/sys/gen_codes.go +++ b/server/internal/controller/admin/sys/gen_codes.go @@ -1,6 +1,6 @@ // Package sys // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -9,10 +9,11 @@ package sys import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/gencodes" + "hotgo/api/admin/gencodes" "hotgo/internal/model/input/form" "hotgo/internal/model/input/sysin" "hotgo/internal/service" + "hotgo/utility/validate" ) var ( @@ -39,6 +40,10 @@ func (c *cGenCodes) Edit(ctx context.Context, req *gencodes.EditReq) (res *genco return } + if err = validate.PreFilter(ctx, &in); err != nil { + return + } + data, err := service.SysGenCodes().Edit(ctx, in) if err != nil { return @@ -161,6 +166,10 @@ func (c *cGenCodes) Preview(ctx context.Context, req *gencodes.PreviewReq) (res return } + if err = validate.PreFilter(ctx, &in); err != nil { + return + } + data, err := service.SysGenCodes().Preview(ctx, in) if err != nil { return @@ -178,6 +187,10 @@ func (c *cGenCodes) Build(ctx context.Context, req *gencodes.BuildReq) (res *gen return } + if err = validate.PreFilter(ctx, &in); err != nil { + return + } + err = service.SysGenCodes().Build(ctx, in) return } diff --git a/server/internal/controller/backend/sys/log.go b/server/internal/controller/admin/sys/log.go similarity index 96% rename from server/internal/controller/backend/sys/log.go rename to server/internal/controller/admin/sys/log.go index fcd4f9b..499b11b 100644 --- a/server/internal/controller/backend/sys/log.go +++ b/server/internal/controller/admin/sys/log.go @@ -1,6 +1,6 @@ // Package sys // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -10,7 +10,7 @@ import ( "context" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/log" + "hotgo/api/admin/log" "hotgo/internal/model/input/form" "hotgo/internal/model/input/sysin" "hotgo/internal/service" diff --git a/server/internal/controller/backend/sys/login_log.go b/server/internal/controller/admin/sys/login_log.go similarity index 98% rename from server/internal/controller/backend/sys/login_log.go rename to server/internal/controller/admin/sys/login_log.go index 2d82f69..7a06569 100644 --- a/server/internal/controller/backend/sys/login_log.go +++ b/server/internal/controller/admin/sys/login_log.go @@ -11,7 +11,7 @@ package sys import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/loginlog" + "hotgo/api/admin/loginlog" "hotgo/internal/model/input/form" "hotgo/internal/model/input/sysin" "hotgo/internal/service" diff --git a/server/internal/controller/backend/sys/provinces.go b/server/internal/controller/admin/sys/provinces.go similarity index 98% rename from server/internal/controller/backend/sys/provinces.go rename to server/internal/controller/admin/sys/provinces.go index f475977..9ba15cb 100644 --- a/server/internal/controller/backend/sys/provinces.go +++ b/server/internal/controller/admin/sys/provinces.go @@ -1,6 +1,6 @@ // Package sys // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -9,7 +9,7 @@ package sys import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/provinces" + "hotgo/api/admin/provinces" "hotgo/internal/library/location" "hotgo/internal/model/input/form" "hotgo/internal/model/input/sysin" diff --git a/server/internal/controller/backend/sys/serve_log.go b/server/internal/controller/admin/sys/serve_log.go similarity index 98% rename from server/internal/controller/backend/sys/serve_log.go rename to server/internal/controller/admin/sys/serve_log.go index 3132670..7286b14 100644 --- a/server/internal/controller/backend/sys/serve_log.go +++ b/server/internal/controller/admin/sys/serve_log.go @@ -9,7 +9,7 @@ package sys import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/servelog" + "hotgo/api/admin/servelog" "hotgo/internal/model/input/form" "hotgo/internal/model/input/sysin" "hotgo/internal/service" diff --git a/server/internal/controller/backend/sys/sms_log.go b/server/internal/controller/admin/sys/sms_log.go similarity index 96% rename from server/internal/controller/backend/sys/sms_log.go rename to server/internal/controller/admin/sys/sms_log.go index a0dc8d1..1c647a5 100644 --- a/server/internal/controller/backend/sys/sms_log.go +++ b/server/internal/controller/admin/sys/sms_log.go @@ -1,6 +1,6 @@ // Package sys // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -9,7 +9,7 @@ package sys import ( "context" "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/smslog" + "hotgo/api/admin/smslog" "hotgo/internal/model/input/form" "hotgo/internal/model/input/sysin" "hotgo/internal/service" @@ -93,7 +93,7 @@ func (c *cSmsLog) Status(ctx context.Context, req *smslog.StatusReq) (res *smslo if err = gconv.Scan(req, &in); err != nil { return } - + err = service.SysSmsLog().Status(ctx, in) return } diff --git a/server/internal/controller/api/member/member.go b/server/internal/controller/api/member/member.go index b184ae8..29a1727 100644 --- a/server/internal/controller/api/member/member.go +++ b/server/internal/controller/api/member/member.go @@ -1,6 +1,6 @@ // Package member // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/controller/api/user/hello.go b/server/internal/controller/api/user/hello.go index 841426b..7e05631 100644 --- a/server/internal/controller/api/user/hello.go +++ b/server/internal/controller/api/user/hello.go @@ -1,6 +1,6 @@ // Package user // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -8,9 +8,8 @@ package user import ( "context" - "hotgo/api/api/user" - "github.com/gogf/gf/v2/frame/g" + "hotgo/api/api/user" ) var ( diff --git a/server/internal/controller/backend/admin/test.go b/server/internal/controller/backend/admin/test.go deleted file mode 100644 index 5384a53..0000000 --- a/server/internal/controller/backend/admin/test.go +++ /dev/null @@ -1,135 +0,0 @@ -// Package admin -// @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI -// @Author Ms <133814250@qq.com> -// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE -// -package admin - -import ( - "context" - "github.com/gogf/gf/v2/util/gconv" - "hotgo/api/backend/test" - "hotgo/internal/model/input/adminin" - "hotgo/internal/model/input/form" - "hotgo/internal/service" - "hotgo/utility/validate" -) - -var ( - Test = cTest{} -) - -type cTest struct{} - -// List 查看列表 -func (c *cTest) List(ctx context.Context, req *test.ListReq) (res *test.ListRes, err error) { - var in adminin.TestListInp - if err = gconv.Scan(req, &in); err != nil { - return - } - - if err = validate.PreFilter(ctx, &in); err != nil { - return - } - - list, totalCount, err := service.AdminTest().List(ctx, in) - if err != nil { - return - } - - res = new(test.ListRes) - res.List = list - res.PageCount = form.CalPageCount(totalCount, req.PerPage) - res.Page = req.Page - res.PerPage = req.PerPage - return -} - -// Export 导出列表 -func (c *cTest) Export(ctx context.Context, req *test.ExportReq) (res *test.ExportRes, err error) { - var in adminin.TestListInp - if err = gconv.Scan(req, &in); err != nil { - return - } - - err = service.AdminTest().Export(ctx, in) - return -} - -// Edit 更新 -func (c *cTest) Edit(ctx context.Context, req *test.EditReq) (res *test.EditRes, err error) { - var in adminin.TestEditInp - if err = gconv.Scan(req, &in); err != nil { - return - } - - if err = validate.PreFilter(ctx, &in); err != nil { - return - } - - err = service.AdminTest().Edit(ctx, in) - return -} - -// MaxSort 最大排序 -func (c *cTest) MaxSort(ctx context.Context, req *test.MaxSortReq) (res *test.MaxSortRes, err error) { - data, err := service.AdminTest().MaxSort(ctx, adminin.TestMaxSortInp{}) - if err != nil { - return - } - - res = new(test.MaxSortRes) - res.TestMaxSortModel = data - return -} - -// View 获取指定信息 -func (c *cTest) View(ctx context.Context, req *test.ViewReq) (res *test.ViewRes, err error) { - var in adminin.TestViewInp - if err = gconv.Scan(req, &in); err != nil { - return - } - - data, err := service.AdminTest().View(ctx, in) - if err != nil { - return - } - - res = new(test.ViewRes) - res.TestViewModel = data - return -} - -// Delete 删除 -func (c *cTest) Delete(ctx context.Context, req *test.DeleteReq) (res *test.DeleteRes, err error) { - var in adminin.TestDeleteInp - if err = gconv.Scan(req, &in); err != nil { - return - } - - err = service.AdminTest().Delete(ctx, in) - return -} - -// Status 更新状态 -func (c *cTest) Status(ctx context.Context, req *test.StatusReq) (res *test.StatusRes, err error) { - var in adminin.TestStatusInp - if err = gconv.Scan(req, &in); err != nil { - return - } - - err = service.AdminTest().Status(ctx, in) - return -} - -// Switch 更新开关状态 -func (c *cTest) Switch(ctx context.Context, req *test.SwitchReq) (res *test.SwitchRes, err error) { - var in adminin.TestSwitchInp - if err = gconv.Scan(req, &in); err != nil { - return - } - - err = service.AdminTest().Switch(ctx, in) - return -} diff --git a/server/internal/controller/home/base/site.go b/server/internal/controller/home/base/site.go index 4eebb2c..1d10620 100644 --- a/server/internal/controller/home/base/site.go +++ b/server/internal/controller/home/base/site.go @@ -1,6 +1,6 @@ // Package base // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/controller/websocket/handler/admin/monitor.go b/server/internal/controller/websocket/handler/admin/monitor.go index 3068721..20d2859 100644 --- a/server/internal/controller/websocket/handler/admin/monitor.go +++ b/server/internal/controller/websocket/handler/admin/monitor.go @@ -1,6 +1,6 @@ // Package admin // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -17,8 +17,8 @@ import ( "github.com/shirou/gopsutil/mem" "github.com/shirou/gopsutil/process" "hotgo/internal/consts" - "hotgo/internal/global" "hotgo/internal/model" + "hotgo/internal/service" "hotgo/internal/websocket" "hotgo/utility/file" "hotgo/utility/format" @@ -51,6 +51,7 @@ type MonitorHead struct { func (c *cMonitor) RunInfo(client *websocket.Client, req *websocket.WRequest) { var ( data = g.Map{} + meta = service.AdminMonitor().GetMeta(client.Context()) mHost, _ = host.Info() pwd, _ = os.Getwd() gm runtime.MemStats @@ -63,14 +64,14 @@ func (c *cMonitor) RunInfo(client *websocket.Client, req *websocket.WRequest) { "hostname": mHost.Hostname, "os": mHost.OS, "arch": mHost.KernelArch, - "intranet_ip": global.MonitorData.IntranetIP, - "public_ip": global.MonitorData.PublicIP, + "intranet_ip": meta.IntranetIP, + "public_ip": meta.PublicIP, // GO运行信息 "goName": "Golang", "version": runtime.Version(), - "startTime": global.MonitorData.STartTime, - "runTime": gtime.Now().Timestamp() - global.MonitorData.STartTime.Timestamp(), + "startTime": meta.STartTime, + "runTime": gtime.Now().Timestamp() - meta.STartTime.Timestamp(), "rootPath": runtime.GOROOT(), "pwd": pwd, "goroutine": runtime.NumGoroutine(), @@ -111,6 +112,7 @@ func (c *cMonitor) Trends(client *websocket.Client, req *websocket.WRequest) { data = g.Map{} monitorHeads []MonitorHead nets []NetC + meta = service.AdminMonitor().GetMeta(client.Context()) ) // cpu使用率 @@ -123,8 +125,8 @@ func (c *cMonitor) Trends(client *websocket.Client, req *websocket.WRequest) { mMemUsed, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", mMem.UsedPercent), 64) // 负载 - if len(global.MonitorData.LoadAvg) > 0 { - mLoadAvg = global.MonitorData.LoadAvg[len(global.MonitorData.LoadAvg)-1] + if len(meta.LoadAvg) > 0 { + mLoadAvg = meta.LoadAvg[len(meta.LoadAvg)-1] } monitorHeads = append(monitorHeads, MonitorHead{ @@ -164,7 +166,7 @@ func (c *cMonitor) Trends(client *websocket.Client, req *websocket.WRequest) { IconClass: "Analytics", }) - for _, v := range global.MonitorData.NetIO { + for _, v := range meta.NetIO { nets = append(nets, NetC{ Time: v.Time, BytesSent: format.FileSize(int64(v.BytesSent)), // 转换为最大整数单位 @@ -176,7 +178,7 @@ func (c *cMonitor) Trends(client *websocket.Client, req *websocket.WRequest) { data = g.Map{ "head": monitorHeads, - "load": global.MonitorData.LoadAvg, + "load": meta.LoadAvg, "net": nets, } diff --git a/server/internal/controller/websocket/handler/common/site.go b/server/internal/controller/websocket/handler/common/site.go index d5a417a..fd9e983 100644 --- a/server/internal/controller/websocket/handler/common/site.go +++ b/server/internal/controller/websocket/handler/common/site.go @@ -1,6 +1,6 @@ // Package common // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // diff --git a/server/internal/controller/websocket/send.go b/server/internal/controller/websocket/send.go index 711c25f..ac4e072 100644 --- a/server/internal/controller/websocket/send.go +++ b/server/internal/controller/websocket/send.go @@ -1,6 +1,6 @@ // Package websocket // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -8,7 +8,7 @@ package websocket import ( "context" - "hotgo/internal/model/input/websocketin" + "hotgo/api/websocket/base" "hotgo/internal/websocket" "hotgo/utility/simple" ) @@ -18,8 +18,8 @@ var Send = send{} type send struct{} -// ToTag 发送标签消息 -func (c *send) ToTag(ctx context.Context, req *websocketin.SendToTagReq) (res *websocketin.SendToTagRes, err error) { +// SendToTag 发送标签消息 +func (c *send) SendToTag(ctx context.Context, req base.SendToTagReq) (res *base.SendToTagRes, err error) { simple.SafeGo(ctx, func(ctx context.Context) { websocket.SendToTag(req.Tag, &websocket.WResponse{ Event: req.Response.Event, diff --git a/server/internal/crons/init.go b/server/internal/crons/init.go index a79698f..1cc2948 100644 --- a/server/internal/crons/init.go +++ b/server/internal/crons/init.go @@ -1,6 +1,6 @@ // Package crons // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -72,7 +72,7 @@ func StartALL(sysCron []*entity.SysCron) error { ) if len(sysCron) == 0 { - g.Log().Info(ct, "没有可用的定时任务") + g.Log().Debug(ct, "no scheduled task is available.") return nil } diff --git a/server/internal/crons/monitor.go b/server/internal/crons/monitor.go deleted file mode 100644 index cc297c2..0000000 --- a/server/internal/crons/monitor.go +++ /dev/null @@ -1,79 +0,0 @@ -// Package crons -// @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI -// @Author Ms <133814250@qq.com> -// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE -// -package crons - -import ( - "context" - "github.com/gogf/gf/v2/os/gtime" - "github.com/shirou/gopsutil/load" - "github.com/shirou/gopsutil/net" - "hotgo/internal/global" - "hotgo/internal/model" - "hotgo/utility/format" - "runtime" - "sync" -) - -func init() { - cronList = append(cronList, Monitor) -} - -// Monitor 监控 -var Monitor = &cMonitor{name: "monitor"} - -type cMonitor struct { - name string - sync.RWMutex -} - -func (c *cMonitor) GetName() string { - return c.name -} - -// Execute 执行任务 -func (c *cMonitor) Execute(ctx context.Context) { - c.Lock() - defer c.Unlock() - c.NetIO() - c.loadAvg() -} - -func (c *cMonitor) loadAvg() { - pl, _ := load.Avg() - counter := model.LoadAvgStats{ - Time: gtime.Now(), - Avg: pl.Load1, - Ratio: pl.Load1 / (float64(runtime.NumCPU()) * 2) * 100, - } - - global.MonitorData.LoadAvg = append(global.MonitorData.LoadAvg, &counter) - if len(global.MonitorData.LoadAvg) > 10 { - global.MonitorData.LoadAvg = append(global.MonitorData.LoadAvg[:0], global.MonitorData.LoadAvg[(1):]...) - } -} - -func (c *cMonitor) NetIO() { - var counter model.NetIOCounters - ni, _ := net.IOCounters(true) - counter.Time = gtime.Now() - for _, v := range ni { - counter.BytesSent += v.BytesSent - counter.BytesRecv += v.BytesRecv - } - - if len(global.MonitorData.NetIO) > 0 { - lastNetIO := global.MonitorData.NetIO[len(global.MonitorData.NetIO)-1] - sub := counter.Time.Sub(lastNetIO.Time).Seconds() - counter.Down = format.Round2Float64((float64(counter.BytesRecv - lastNetIO.BytesRecv)) / sub) - counter.UP = format.Round2Float64((float64(counter.BytesSent - lastNetIO.BytesSent)) / sub) - } - - global.MonitorData.NetIO = append(global.MonitorData.NetIO, &counter) - if len(global.MonitorData.NetIO) > 10 { - global.MonitorData.NetIO = append(global.MonitorData.NetIO[:0], global.MonitorData.NetIO[(1):]...) - } -} diff --git a/server/internal/crons/test.go b/server/internal/crons/test.go index 191e13a..47870f8 100644 --- a/server/internal/crons/test.go +++ b/server/internal/crons/test.go @@ -1,6 +1,6 @@ // Package crons // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -16,7 +16,7 @@ func init() { cronList = append(cronList, Test) } -// Test 测试任务 +// Test 测试任务(无参数) var Test = &cTest{name: "test"} type cTest struct { diff --git a/server/internal/crons/test2.go b/server/internal/crons/test2.go index c8897af..554cf65 100644 --- a/server/internal/crons/test2.go +++ b/server/internal/crons/test2.go @@ -1,6 +1,6 @@ // Package crons // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE // @@ -17,7 +17,7 @@ func init() { cronList = append(cronList, Test2) } -// Test2 测试2任务 +// Test2 测试2任务(带参数) var Test2 = &cTest2{name: "test2"} type cTest2 struct { diff --git a/server/internal/dao/addon_hgexample_table.go b/server/internal/dao/addon_hgexample_table.go new file mode 100644 index 0000000..e415623 --- /dev/null +++ b/server/internal/dao/addon_hgexample_table.go @@ -0,0 +1,27 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +package dao + +import ( + "hotgo/internal/dao/internal" +) + +// internalAddonHgexampleTableDao is internal type for wrapping internal DAO implements. +type internalAddonHgexampleTableDao = *internal.AddonHgexampleTableDao + +// addonHgexampleTableDao is the data access object for table hg_addon_hgexample_table. +// You can define custom methods on it to extend its functionality as you wish. +type addonHgexampleTableDao struct { + internalAddonHgexampleTableDao +} + +var ( + // AddonHgexampleTable is globally public accessible object for table hg_addon_hgexample_table operations. + AddonHgexampleTable = addonHgexampleTableDao{ + internal.NewAddonHgexampleTableDao(), + } +) + +// Fill with you ideas below. diff --git a/server/internal/dao/internal/test.go b/server/internal/dao/internal/addon_hgexample_table.go similarity index 70% rename from server/internal/dao/internal/test.go rename to server/internal/dao/internal/addon_hgexample_table.go index b1609c4..e34c75f 100644 --- a/server/internal/dao/internal/test.go +++ b/server/internal/dao/internal/addon_hgexample_table.go @@ -11,15 +11,15 @@ import ( "github.com/gogf/gf/v2/frame/g" ) -// TestDao is the data access object for table hg_test. -type TestDao struct { - table string // table is the underlying table name of the DAO. - group string // group is the database configuration group name of current DAO. - columns TestColumns // columns contains all the column names of Table for convenient usage. +// AddonHgexampleTableDao is the data access object for table hg_addon_hgexample_table. +type AddonHgexampleTableDao struct { + table string // table is the underlying table name of the DAO. + group string // group is the database configuration group name of current DAO. + columns AddonHgexampleTableColumns // columns contains all the column names of Table for convenient usage. } -// TestColumns defines and stores column names for table hg_test. -type TestColumns struct { +// AddonHgexampleTableColumns defines and stores column names for table hg_addon_hgexample_table. +type AddonHgexampleTableColumns struct { Id string // ID CategoryId string // 分类ID Flag string // 标签 @@ -59,8 +59,8 @@ type TestColumns struct { DeletedAt string // 删除时间 } -// testColumns holds the columns for table hg_test. -var testColumns = TestColumns{ +// addonHgexampleTableColumns holds the columns for table hg_addon_hgexample_table. +var addonHgexampleTableColumns = AddonHgexampleTableColumns{ Id: "id", CategoryId: "category_id", Flag: "flag", @@ -100,37 +100,37 @@ var testColumns = TestColumns{ DeletedAt: "deleted_at", } -// NewTestDao creates and returns a new DAO object for table data access. -func NewTestDao() *TestDao { - return &TestDao{ +// NewAddonHgexampleTableDao creates and returns a new DAO object for table data access. +func NewAddonHgexampleTableDao() *AddonHgexampleTableDao { + return &AddonHgexampleTableDao{ group: "default", - table: "hg_test", - columns: testColumns, + table: "hg_addon_hgexample_table", + columns: addonHgexampleTableColumns, } } // DB retrieves and returns the underlying raw database management object of current DAO. -func (dao *TestDao) DB() gdb.DB { +func (dao *AddonHgexampleTableDao) DB() gdb.DB { return g.DB(dao.group) } // Table returns the table name of current dao. -func (dao *TestDao) Table() string { +func (dao *AddonHgexampleTableDao) Table() string { return dao.table } // Columns returns all column names of current dao. -func (dao *TestDao) Columns() TestColumns { +func (dao *AddonHgexampleTableDao) Columns() AddonHgexampleTableColumns { return dao.columns } // Group returns the configuration group name of database of current dao. -func (dao *TestDao) Group() string { +func (dao *AddonHgexampleTableDao) Group() string { return dao.group } // Ctx creates and returns the Model for current DAO, It automatically sets the context for current operation. -func (dao *TestDao) Ctx(ctx context.Context) *gdb.Model { +func (dao *AddonHgexampleTableDao) Ctx(ctx context.Context) *gdb.Model { return dao.DB().Model(dao.table).Safe().Ctx(ctx) } @@ -140,6 +140,6 @@ func (dao *TestDao) Ctx(ctx context.Context) *gdb.Model { // // Note that, you should not Commit or Rollback the transaction in function f // as it is automatically handled by this function. -func (dao *TestDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) { +func (dao *AddonHgexampleTableDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) { return dao.Ctx(ctx).Transaction(ctx, f) } diff --git a/server/internal/dao/internal/sys_addons_config.go b/server/internal/dao/internal/sys_addons_config.go new file mode 100644 index 0000000..b7c5761 --- /dev/null +++ b/server/internal/dao/internal/sys_addons_config.go @@ -0,0 +1,99 @@ +// ========================================================================== +// Code generated by GoFrame CLI tool. DO NOT EDIT. +// ========================================================================== + +package internal + +import ( + "context" + + "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/frame/g" +) + +// SysAddonsConfigDao is the data access object for table hg_sys_addons_config. +type SysAddonsConfigDao struct { + table string // table is the underlying table name of the DAO. + group string // group is the database configuration group name of current DAO. + columns SysAddonsConfigColumns // columns contains all the column names of Table for convenient usage. +} + +// SysAddonsConfigColumns defines and stores column names for table hg_sys_addons_config. +type SysAddonsConfigColumns struct { + Id string // 配置ID + AddonName string // 插件名称 + Group string // 分组 + Name string // 参数名称 + Type string // 键值类型:string,int,uint,bool,datetime,date + Key string // 参数键名 + Value string // 参数键值 + DefaultValue string // 默认值 + Sort string // 排序 + Tip string // 变量描述 + IsDefault string // 是否为系统默认 + Status string // 状态 + CreatedAt string // 创建时间 + UpdatedAt string // 更新时间 +} + +// sysAddonsConfigColumns holds the columns for table hg_sys_addons_config. +var sysAddonsConfigColumns = SysAddonsConfigColumns{ + Id: "id", + AddonName: "addon_name", + Group: "group", + Name: "name", + Type: "type", + Key: "key", + Value: "value", + DefaultValue: "default_value", + Sort: "sort", + Tip: "tip", + IsDefault: "is_default", + Status: "status", + CreatedAt: "created_at", + UpdatedAt: "updated_at", +} + +// NewSysAddonsConfigDao creates and returns a new DAO object for table data access. +func NewSysAddonsConfigDao() *SysAddonsConfigDao { + return &SysAddonsConfigDao{ + group: "default", + table: "hg_sys_addons_config", + columns: sysAddonsConfigColumns, + } +} + +// DB retrieves and returns the underlying raw database management object of current DAO. +func (dao *SysAddonsConfigDao) DB() gdb.DB { + return g.DB(dao.group) +} + +// Table returns the table name of current dao. +func (dao *SysAddonsConfigDao) Table() string { + return dao.table +} + +// Columns returns all column names of current dao. +func (dao *SysAddonsConfigDao) Columns() SysAddonsConfigColumns { + return dao.columns +} + +// Group returns the configuration group name of database of current dao. +func (dao *SysAddonsConfigDao) Group() string { + return dao.group +} + +// Ctx creates and returns the Model for current DAO, It automatically sets the context for current operation. +func (dao *SysAddonsConfigDao) Ctx(ctx context.Context) *gdb.Model { + return dao.DB().Model(dao.table).Safe().Ctx(ctx) +} + +// Transaction wraps the transaction logic using function f. +// It rollbacks the transaction and returns the error from function f if it returns non-nil error. +// It commits the transaction and returns nil if function f returns nil. +// +// Note that, you should not Commit or Rollback the transaction in function f +// as it is automatically handled by this function. +func (dao *SysAddonsConfigDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) { + return dao.Ctx(ctx).Transaction(ctx, f) +} diff --git a/server/internal/dao/internal/sys_gen_codes.go b/server/internal/dao/internal/sys_gen_codes.go index 2d87c75..62a3426 100644 --- a/server/internal/dao/internal/sys_gen_codes.go +++ b/server/internal/dao/internal/sys_gen_codes.go @@ -30,6 +30,7 @@ type SysGenCodesColumns struct { TableComment string // 主表注释 DaoName string // 主表dao模型 MasterColumns string // 主表字段 + AddonName string // 插件名称 Status string // 生成状态 CreatedAt string // 创建时间 UpdatedAt string // 更新时间 @@ -47,6 +48,7 @@ var sysGenCodesColumns = SysGenCodesColumns{ TableComment: "table_comment", DaoName: "dao_name", MasterColumns: "master_columns", + AddonName: "addon_name", Status: "status", CreatedAt: "created_at", UpdatedAt: "updated_at", diff --git a/server/internal/dao/sys_addons_config.go b/server/internal/dao/sys_addons_config.go new file mode 100644 index 0000000..72fe68b --- /dev/null +++ b/server/internal/dao/sys_addons_config.go @@ -0,0 +1,27 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +package dao + +import ( + "hotgo/internal/dao/internal" +) + +// internalSysAddonsConfigDao is internal type for wrapping internal DAO implements. +type internalSysAddonsConfigDao = *internal.SysAddonsConfigDao + +// sysAddonsConfigDao is the data access object for table hg_sys_addons_config. +// You can define custom methods on it to extend its functionality as you wish. +type sysAddonsConfigDao struct { + internalSysAddonsConfigDao +} + +var ( + // SysAddonsConfig is globally public accessible object for table hg_sys_addons_config operations. + SysAddonsConfig = sysAddonsConfigDao{ + internal.NewSysAddonsConfigDao(), + } +) + +// Fill with you ideas below. diff --git a/server/internal/dao/test.go b/server/internal/dao/test.go deleted file mode 100644 index 93f607f..0000000 --- a/server/internal/dao/test.go +++ /dev/null @@ -1,27 +0,0 @@ -// ================================================================================= -// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. -// ================================================================================= - -package dao - -import ( - "hotgo/internal/dao/internal" -) - -// internalTestDao is internal type for wrapping internal DAO implements. -type internalTestDao = *internal.TestDao - -// testDao is the data access object for table hg_test. -// You can define custom methods on it to extend its functionality as you wish. -type testDao struct { - internalTestDao -} - -var ( - // Test is globally public accessible object for table hg_test operations. - Test = testDao{ - internal.NewTestDao(), - } -) - -// Fill with you ideas below. diff --git a/server/internal/global/static.go b/server/internal/global/global.go similarity index 74% rename from server/internal/global/static.go rename to server/internal/global/global.go index 5ed9e11..657a310 100644 --- a/server/internal/global/static.go +++ b/server/internal/global/global.go @@ -1,13 +1,11 @@ // Package global // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE -// package global import ( - "hotgo/internal/model" "runtime" ) @@ -16,8 +14,6 @@ var ( RootPtah string // SysType 操作系统类型 windows | linux SysType = runtime.GOOS - // MonitorData 监控数据 - MonitorData model.MonitorData // Blacklists 黑名单列表 Blacklists map[string]struct{} ) diff --git a/server/internal/global/init.go b/server/internal/global/init.go index 3fad304..0fb9f43 100644 --- a/server/internal/global/init.go +++ b/server/internal/global/init.go @@ -1,9 +1,8 @@ // Package global // @Link https://github.com/bufanyun/hotgo -// @Copyright Copyright (c) 2022 HotGo CLI +// @Copyright Copyright (c) 2023 HotGo CLI // @Author Ms <133814250@qq.com> // @License https://github.com/bufanyun/hotgo/blob/master/LICENSE -// package global import ( @@ -12,20 +11,18 @@ import ( "github.com/gogf/gf/v2" "github.com/gogf/gf/v2/encoding/gjson" "github.com/gogf/gf/v2/frame/g" - "github.com/gogf/gf/v2/os/gcache" "github.com/gogf/gf/v2/os/gctx" + "github.com/gogf/gf/v2/os/gfile" "github.com/gogf/gf/v2/os/glog" "github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/text/gstr" "hotgo/internal/consts" + "hotgo/internal/library/cache" "hotgo/internal/library/hggen" - "hotgo/internal/library/location" "hotgo/internal/library/queue" "hotgo/internal/model/entity" "hotgo/internal/service" "hotgo/utility/charset" - "hotgo/utility/simple" - "os" "strings" ) @@ -38,47 +35,30 @@ func Init(ctx context.Context) { //g.SetDebug(debug.Bool()) // 默认上海时区 - if err := gtime.SetTimeZone("Asia/Shanghai"); err != nil { - g.Log().Fatalf(ctx, "时区设置异常err:%+v", err) + if err = gtime.SetTimeZone("Asia/Shanghai"); err != nil { + g.Log().Fatalf(ctx, "时区设置异常 err:%+v", err) return } - RootPtah, _ = os.Getwd() + RootPtah = gfile.Pwd() fmt.Printf("欢迎使用HotGo!\r\n当前运行环境:%v, 运行根路径为:%v \r\nHotGo版本:v%v, gf版本:%v \n", SysType, RootPtah, consts.VersionApp, gf.VERSION) - setOrmCacheAdapter() - - service.SysBlacklist().Load(ctx) + // 设置缓存适配器 + cache.SetAdapter(ctx) + // 设置服务日志处理 g.Log().SetHandlers(LoggingServeLogHandler) - startMonitor(ctx) + // 启动服务监控 + service.AdminMonitor().StartMonitor(ctx) + // 加载ip访问黑名单 + service.SysBlacklist().Load(ctx) + + // 初始化生成代码配置 hggen.InIt(ctx) } -func startMonitor(ctx context.Context) { - simple.SafeGo(ctx, func(ctx context.Context) { - MonitorData.STartTime = gtime.Now() - intranetIP, err := location.GetLocalIP() - if err != nil { - g.Log().Infof(ctx, "parse intranetIP err:%+v", err) - } - MonitorData.IntranetIP = intranetIP - - publicIP, err := location.GetPublicIP(ctx) - if err != nil { - g.Log().Infof(ctx, "parse publicIP err:%+v", err) - } - MonitorData.PublicIP = publicIP - }) -} - -func setOrmCacheAdapter() { - redisCache := gcache.NewAdapterRedis(g.Redis()) - g.DB().GetCache().SetAdapter(redisCache) -} - func LoggingServeLogHandler(ctx context.Context, in *glog.HandlerInput) { in.Next(ctx) @@ -89,6 +69,7 @@ func LoggingServeLogHandler(ctx context.Context, in *glog.HandlerInput) { panic(err) } }() + conf, err := service.SysConfig().GetLoadServeLog(ctx) if err != nil { return diff --git a/server/internal/library/addons/addons.go b/server/internal/library/addons/addons.go new file mode 100644 index 0000000..7730bbc --- /dev/null +++ b/server/internal/library/addons/addons.go @@ -0,0 +1,38 @@ +// Package addons +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package addons + +import ( + "context" + "github.com/gogf/gf/v2/frame/g" + "hotgo/internal/consts" +) + +func GetTag(name string) string { + return consts.AddonsTag + name +} + +func Tpl(name, tpl string) string { + return consts.AddonsDir + "/" + name + "/" + tpl +} + +// RouterPrefix 路由前缀 +// 最终效果:/应用名称/插件模块名称/xxx/xxx。如果你不喜欢现在的路由风格,可以自行调整 +func RouterPrefix(ctx context.Context, app, name string) string { + var prefix = "/" + switch app { + case consts.AppAdmin: + prefix = g.Cfg().MustGet(ctx, "router.admin.prefix", "/admin").String() + case consts.AppApi: + prefix = g.Cfg().MustGet(ctx, "router.api.prefix", "/api").String() + case consts.AppHome: + prefix = g.Cfg().MustGet(ctx, "router.home.prefix", "/home").String() + case consts.AppWebSocket: + prefix = g.Cfg().MustGet(ctx, "router.ws.prefix", "/socket").String() + } + + return prefix + "/" + name +} diff --git a/server/internal/library/addons/build.go b/server/internal/library/addons/build.go new file mode 100644 index 0000000..8cc2667 --- /dev/null +++ b/server/internal/library/addons/build.go @@ -0,0 +1,126 @@ +package addons + +import ( + "context" + "fmt" + "github.com/gogf/gf/v2/os/gfile" + "github.com/gogf/gf/v2/text/gstr" + "hotgo/internal/consts" + "hotgo/internal/model" + "strconv" + "strings" +) + +// Build 构建新插件 +func Build(ctx context.Context, sk Skeleton, conf *model.BuildAddonConfig) (err error) { + buildPath := "./" + consts.AddonsDir + "/" + sk.Name + modulesPath := "./" + consts.AddonsDir + "/modules/" + sk.Name + ".go" + templatePath := gstr.Replace(conf.TemplatePath, "{$name}", sk.Name) + replaces := map[string]string{ + "@{.label}": sk.Label, + "@{.name}": sk.Name, + "@{.group}": strconv.Itoa(sk.Group), + "@{.brief}": sk.Brief, + "@{.description}": sk.Description, + "@{.author}": sk.Author, + "@{.version}": sk.Version, + } + + if err = checkBuildDir(buildPath, modulesPath, templatePath); err != nil { + return + } + + // scans directory recursively + list, err := gfile.ScanDirFunc(conf.SrcPath, "*", true, func(path string) string { + return path + }) + + for _, path := range list { + if !gfile.IsReadable(path) { + err = fmt.Errorf("file:%v is unreadable, please check permissions", path) + return + } + + if gfile.IsDir(path) { + continue + } + + flowFile := gstr.ReplaceByMap(path, map[string]string{ + gfile.RealPath(conf.SrcPath): "", + ".template": "", + }) + + flowFile = buildPath + "/" + flowFile + + content := gstr.ReplaceByMap(gfile.GetContents(path), replaces) + + if err = gfile.PutContents(flowFile, content); err != nil { + break + } + } + + if err = gfile.PutContents(templatePath+"/home/index.html", homeLayout); err != nil { + return + } + + err = gfile.PutContents(modulesPath, gstr.ReplaceByMap(importModules, replaces)) + return +} + +func checkBuildDir(paths ...string) error { + if len(paths) == 0 { + return nil + } + + for _, path := range paths { + if gfile.Exists(path) { + return fmt.Errorf("插件已存在,请换一个插件名称或者经确认无误后依次删除文件夹: [%v] 后重新生成", strings.Join(paths, "、\t")) + } + } + return nil +} + +const ( + importModules = `// Package modules +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2023 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package modules + +import _ "hotgo/addons/@{.name}" +` + + homeLayout = ` + +
+ + + + + +
+ + + +