@robsun/create-keystone-app 0.2.15 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +46 -44
  2. package/dist/create-keystone-app.js +347 -10
  3. package/dist/create-module.js +1217 -1187
  4. package/package.json +1 -1
  5. package/template/.claude/skills/keystone-implement/SKILL.md +113 -0
  6. package/template/.claude/skills/keystone-implement/references/CHECKLIST.md +91 -0
  7. package/template/.claude/skills/keystone-implement/references/PATTERNS.md +1088 -0
  8. package/template/.claude/skills/keystone-implement/references/SCHEMA.md +135 -0
  9. package/template/.claude/skills/keystone-implement/references/TESTING.md +231 -0
  10. package/template/.claude/skills/keystone-requirements/SKILL.md +296 -0
  11. package/template/.claude/skills/keystone-requirements/references/CONFIRM_TEMPLATE.md +170 -0
  12. package/template/.claude/skills/keystone-requirements/references/SCHEMA.md +135 -0
  13. package/template/.eslintrc.js +3 -0
  14. package/template/.github/workflows/ci.yml +30 -0
  15. package/template/.github/workflows/release.yml +32 -0
  16. package/template/.golangci.yml +11 -0
  17. package/template/README.md +82 -81
  18. package/template/apps/server/README.md +8 -0
  19. package/template/apps/server/cmd/server/main.go +27 -185
  20. package/template/apps/server/config.example.yaml +31 -1
  21. package/template/apps/server/config.yaml +31 -1
  22. package/template/apps/server/go.mod +60 -18
  23. package/template/apps/server/go.sum +183 -31
  24. package/template/apps/server/internal/frontend/embed.go +3 -8
  25. package/template/apps/server/internal/modules/example/README.md +18 -0
  26. package/template/apps/server/internal/modules/example/api/handler/handler_test.go +9 -0
  27. package/template/apps/server/internal/modules/example/api/handler/item_handler.go +468 -165
  28. package/template/apps/server/internal/modules/example/bootstrap/seeds/item.go +217 -8
  29. package/template/apps/server/internal/modules/example/domain/models/item.go +40 -7
  30. package/template/apps/server/internal/modules/example/domain/service/approval_callback.go +68 -0
  31. package/template/apps/server/internal/modules/example/domain/service/approval_schema.go +41 -0
  32. package/template/apps/server/internal/modules/example/domain/service/errors.go +20 -22
  33. package/template/apps/server/internal/modules/example/domain/service/item_service.go +267 -7
  34. package/template/apps/server/internal/modules/example/domain/service/item_service_test.go +281 -0
  35. package/template/apps/server/internal/modules/example/i18n/keys.go +32 -20
  36. package/template/apps/server/internal/modules/example/i18n/locales/en-US.json +30 -18
  37. package/template/apps/server/internal/modules/example/i18n/locales/zh-CN.json +30 -18
  38. package/template/apps/server/internal/modules/example/infra/exporter/item_exporter.go +119 -0
  39. package/template/apps/server/internal/modules/example/infra/importer/item_importer.go +77 -0
  40. package/template/apps/server/internal/modules/example/infra/repository/item_repository.go +99 -49
  41. package/template/apps/server/internal/modules/example/module.go +171 -97
  42. package/template/apps/server/internal/modules/example/tests/integration_test.go +7 -0
  43. package/template/apps/server/internal/modules/manifest.go +7 -7
  44. package/template/apps/web/README.md +4 -2
  45. package/template/apps/web/package.json +1 -1
  46. package/template/apps/web/src/app.config.ts +8 -6
  47. package/template/apps/web/src/index.css +7 -3
  48. package/template/apps/web/src/main.tsx +2 -5
  49. package/template/apps/web/src/modules/example/help/en-US/faq.md +27 -0
  50. package/template/apps/web/src/modules/example/help/en-US/items.md +30 -0
  51. package/template/apps/web/src/modules/example/help/en-US/overview.md +31 -0
  52. package/template/apps/web/src/modules/example/help/zh-CN/faq.md +27 -0
  53. package/template/apps/web/src/modules/example/help/zh-CN/items.md +31 -0
  54. package/template/apps/web/src/modules/example/help/zh-CN/overview.md +32 -0
  55. package/template/apps/web/src/modules/example/locales/en-US/example.json +99 -32
  56. package/template/apps/web/src/modules/example/locales/zh-CN/example.json +85 -18
  57. package/template/apps/web/src/modules/example/pages/ExampleItemsPage.tsx +840 -237
  58. package/template/apps/web/src/modules/example/services/exampleItems.ts +79 -8
  59. package/template/apps/web/src/modules/example/types.ts +14 -1
  60. package/template/apps/web/src/modules/index.ts +1 -0
  61. package/template/apps/web/vite.config.ts +9 -3
  62. package/template/docs/CONVENTIONS.md +17 -17
  63. package/template/package.json +4 -5
  64. package/template/pnpm-lock.yaml +76 -5
  65. package/template/scripts/build.bat +15 -3
  66. package/template/scripts/build.sh +9 -3
  67. package/template/scripts/check-help.js +249 -0
  68. package/template/scripts/compress-assets.js +89 -0
  69. package/template/scripts/test.bat +23 -0
  70. package/template/scripts/test.sh +16 -0
  71. package/template/.claude/skills/keystone-dev/SKILL.md +0 -90
  72. package/template/.claude/skills/keystone-dev/references/ADVANCED_PATTERNS.md +0 -716
  73. package/template/.claude/skills/keystone-dev/references/APPROVAL.md +0 -121
  74. package/template/.claude/skills/keystone-dev/references/CAPABILITIES.md +0 -261
  75. package/template/.claude/skills/keystone-dev/references/CHECKLIST.md +0 -285
  76. package/template/.claude/skills/keystone-dev/references/GOTCHAS.md +0 -390
  77. package/template/.claude/skills/keystone-dev/references/PATTERNS.md +0 -605
  78. package/template/.claude/skills/keystone-dev/references/TEMPLATES.md +0 -2710
  79. package/template/.claude/skills/keystone-dev/references/TESTING.md +0 -44
  80. package/template/.codex/skills/keystone-dev/SKILL.md +0 -90
  81. package/template/.codex/skills/keystone-dev/references/ADVANCED_PATTERNS.md +0 -716
  82. package/template/.codex/skills/keystone-dev/references/APPROVAL.md +0 -121
  83. package/template/.codex/skills/keystone-dev/references/CAPABILITIES.md +0 -261
  84. package/template/.codex/skills/keystone-dev/references/CHECKLIST.md +0 -285
  85. package/template/.codex/skills/keystone-dev/references/GOTCHAS.md +0 -390
  86. package/template/.codex/skills/keystone-dev/references/PATTERNS.md +0 -605
  87. package/template/.codex/skills/keystone-dev/references/TEMPLATES.md +0 -2710
  88. package/template/.codex/skills/keystone-dev/references/TESTING.md +0 -44
  89. package/template/apps/server/internal/app/routes/module_routes.go +0 -16
  90. package/template/apps/server/internal/app/routes/routes.go +0 -226
  91. package/template/apps/server/internal/app/startup/startup.go +0 -74
  92. package/template/apps/server/internal/frontend/handler.go +0 -122
  93. package/template/apps/server/internal/modules/registry.go +0 -145
  94. package/template/apps/web/src/modules/example/help/faq.md +0 -23
  95. package/template/apps/web/src/modules/example/help/items.md +0 -26
  96. package/template/apps/web/src/modules/example/help/overview.md +0 -25
@@ -1,34 +1,20 @@
1
1
  package main
2
2
 
3
3
  import (
4
- "context"
5
- "errors"
6
- "fmt"
7
4
  "log"
8
- "net/http"
9
- "os"
10
- "os/signal"
11
- "strings"
12
- "syscall"
13
- "time"
14
5
 
15
6
  "github.com/gin-gonic/gin"
16
- "gorm.io/gorm"
7
+ swaggerFiles "github.com/swaggo/files"
8
+ ginSwagger "github.com/swaggo/gin-swagger"
17
9
 
18
10
  "github.com/robsuncn/keystone/bootstrap/config"
19
- approvalSvc "github.com/robsuncn/keystone/domain/approval/service"
20
- "github.com/robsuncn/keystone/domain/service"
21
- coreexporter "github.com/robsuncn/keystone/infra/exporter"
22
- "github.com/robsuncn/keystone/infra/importer"
23
- "github.com/robsuncn/keystone/infra/jobs"
24
- "github.com/robsuncn/keystone/infra/jobs/processors"
25
- "github.com/robsuncn/keystone/infra/queue"
26
- "github.com/robsuncn/keystone/infra/repository"
27
- "github.com/robsuncn/keystone/infra/storage"
11
+ "github.com/robsuncn/keystone/infra/frontend"
12
+ "github.com/robsuncn/keystone/server"
13
+ "github.com/robsuncn/keystone/server/modules"
28
14
 
29
- "__APP_NAME__/apps/server/internal/app/routes"
30
- "__APP_NAME__/apps/server/internal/app/startup"
31
- "__APP_NAME__/apps/server/internal/modules"
15
+ "__APP_NAME__/apps/server/docs"
16
+ appfrontend "__APP_NAME__/apps/server/internal/frontend"
17
+ appmodules "__APP_NAME__/apps/server/internal/modules"
32
18
  )
33
19
 
34
20
  func main() {
@@ -36,178 +22,34 @@ func main() {
36
22
  if err != nil {
37
23
  log.Fatalf("failed to load config: %v", err)
38
24
  }
39
- applyLocalDefaults(cfg)
40
25
 
41
- if err := approvalSvc.RegisterDefaultSchemas(); err != nil {
42
- log.Fatalf("failed to register approval schemas: %v", err)
43
- }
44
-
45
- cfg.Modules.Enabled = ensureModuleEnabled(cfg.Modules.Enabled, "keystone")
46
-
47
- modules.RegisterAll()
48
-
49
- db, err := startup.InitializeDatabase(cfg)
50
- if err != nil {
51
- log.Fatalf("database initialization failed: %v", err)
52
- }
26
+ registry := modules.NewRegistry()
27
+ appmodules.Register(registry)
53
28
 
54
- setGinMode(cfg)
29
+ builder := server.NewBuilder(cfg).
30
+ WithModuleRegistry(registry).
31
+ WithRouterHook(registerSwagger)
55
32
 
56
- jobQueue := initQueue(cfg)
57
- router := routes.SetupRouter(cfg, db, jobQueue)
58
-
59
- blacklistRepo := repository.NewTokenBlacklistRepository(db)
60
- loginLogRepo := repository.NewLoginLogRepository(db)
61
- auditLogRepo := repository.NewAuditLogRepository(db)
62
- stopCleanup := jobs.StartCleanupJobs(blacklistRepo, loginLogRepo, auditLogRepo)
63
-
64
- stopWorker := startJobWorker(cfg, db, jobQueue)
65
-
66
- port := ""
67
- if cfg != nil {
68
- port = strings.TrimSpace(cfg.Server.Port)
69
- }
70
- if envPort := strings.TrimSpace(os.Getenv("PORT")); envPort != "" {
71
- port = envPort
72
- }
73
- if port == "" {
74
- port = "8080"
33
+ if fsys, err := appfrontend.GetFileSystem(); err == nil {
34
+ builder.WithEmbeddedFrontend(fsys, frontend.Options{
35
+ APIPrefixes: []string{"/api"},
36
+ EnablePrecompressed: true,
37
+ })
75
38
  }
76
39
 
77
- server := &http.Server{
78
- Addr: fmt.Sprintf(":%s", port),
79
- Handler: router,
80
- }
81
-
82
- go func() {
83
- log.Printf("Starting server on port %s in %s mode", port, cfg.Server.Mode)
84
- if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
85
- log.Fatalf("failed to start server: %v", err)
86
- }
87
- }()
88
-
89
- quit := make(chan os.Signal, 1)
90
- signal.Notify(quit, os.Interrupt, syscall.SIGTERM)
91
- <-quit
92
-
93
- if stopCleanup != nil {
94
- stopCleanup()
95
- }
96
- if stopWorker != nil {
97
- stopWorker()
40
+ app, err := builder.Build()
41
+ if err != nil {
42
+ log.Fatalf("failed to initialize server: %v", err)
98
43
  }
99
-
100
- ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
101
- defer cancel()
102
- if err := server.Shutdown(ctx); err != nil {
103
- log.Printf("shutdown error: %v", err)
44
+ if err := app.Run(); err != nil {
45
+ log.Fatalf("server stopped: %v", err)
104
46
  }
105
47
  }
106
48
 
107
- func applyLocalDefaults(cfg *config.Config) {
108
- if cfg == nil {
49
+ func registerSwagger(router *gin.Engine, cfg *config.Config) {
50
+ if cfg == nil || !cfg.Server.SwaggerEnabled {
109
51
  return
110
52
  }
111
- cfg.Database.Driver = strings.TrimSpace(cfg.Database.Driver)
112
- if cfg.Database.Driver == "" {
113
- cfg.Database.Driver = "sqlite"
114
- }
115
- if cfg.Database.Path == "" || cfg.Database.Path == "./data/keystone.db" {
116
- cfg.Database.Path = "./data/keystone-local.db"
117
- }
118
- if strings.TrimSpace(cfg.Server.Mode) == "" {
119
- cfg.Server.Mode = "debug"
120
- }
121
- }
122
-
123
- func ensureModuleEnabled(enabled []string, name string) []string {
124
- if name == "" {
125
- return enabled
126
- }
127
- for _, existing := range enabled {
128
- if existing == name {
129
- return enabled
130
- }
131
- }
132
- return append(enabled, name)
133
- }
134
-
135
- func setGinMode(cfg *config.Config) {
136
- mode := "debug"
137
- if cfg != nil {
138
- mode = strings.ToLower(strings.TrimSpace(cfg.Server.Mode))
139
- }
140
- switch mode {
141
- case "release":
142
- gin.SetMode(gin.ReleaseMode)
143
- case "test":
144
- gin.SetMode(gin.TestMode)
145
- default:
146
- gin.SetMode(gin.DebugMode)
147
- }
148
- }
149
-
150
- func initQueue(cfg *config.Config) queue.Queue {
151
- if cfg == nil {
152
- return nil
153
- }
154
- queueBackend, err := queue.New(cfg.Queue)
155
- if err != nil {
156
- log.Printf("queue init failed: %v", err)
157
- return nil
158
- }
159
- return queueBackend
160
- }
161
-
162
- func startJobWorker(cfg *config.Config, db *gorm.DB, jobQueue queue.Queue) func() {
163
- if cfg == nil || db == nil || jobQueue == nil {
164
- return nil
165
- }
166
-
167
- jobRepo := repository.NewJobRepository(db)
168
- jobSvc := service.NewJobService(db, jobRepo)
169
- notificationRepo := repository.NewNotificationRepository(db)
170
- notificationSvc := service.NewNotificationService(db, notificationRepo)
171
-
172
- jobRegistry := jobs.NewRegistry()
173
-
174
- storageSvc, storageErr := storage.New(cfg.Storage)
175
- if storageErr != nil {
176
- log.Printf("storage init failed for jobs: %v", storageErr)
177
- }
178
- if storageSvc != nil {
179
- importSvc := importer.NewService(storageSvc).
180
- WithProgressTracker(func(job queue.Job) importer.ProgressTracker {
181
- return importer.JobProgressTracker{JobID: job.ID, TenantID: job.TenantID, Jobs: jobSvc}
182
- })
183
- exportSvc := coreexporter.NewService(storageSvc).
184
- WithProgressTracker(func(job queue.Job) coreexporter.ProgressTracker {
185
- return coreexporter.JobProgressTracker{JobID: job.ID, TenantID: job.TenantID, Jobs: jobSvc}
186
- })
187
- importProcessor := processors.NewImportJobProcessor(importSvc, notificationSvc)
188
- if err := jobs.RegisterImportJob(jobRegistry, importProcessor); err != nil {
189
- log.Printf("import job registration failed: %v", err)
190
- }
191
- exportProcessor := processors.NewExportJobProcessor(exportSvc, notificationSvc)
192
- if err := jobs.RegisterExportJob(jobRegistry, exportProcessor); err != nil {
193
- log.Printf("export job registration failed: %v", err)
194
- }
195
- }
196
-
197
- if err := jobs.RegisterNotificationJob(jobRegistry, notificationSvc); err != nil {
198
- log.Printf("notification job registration failed: %v", err)
199
- }
200
- if err := modules.RegisterJobs(cfg.Modules.Enabled, jobRegistry); err != nil {
201
- log.Printf("module job registration failed: %v", err)
202
- }
203
-
204
- executor := jobs.NewExecutor(jobRegistry, jobSvc)
205
- worker := queue.Worker{Queue: jobQueue, Handler: executor}
206
- workerCtx, cancelWorker := context.WithCancel(context.Background())
207
- go func() {
208
- if err := worker.Run(workerCtx); err != nil && !errors.Is(err, context.Canceled) {
209
- log.Printf("worker stopped: %v", err)
210
- }
211
- }()
212
- return cancelWorker
53
+ docs.SwaggerInfo.BasePath = "/api/v1"
54
+ router.GET("/api/docs/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
213
55
  }
@@ -6,7 +6,6 @@ server:
6
6
  modules:
7
7
  enabled:
8
8
  - "keystone"
9
- - "example"
10
9
 
11
10
  database:
12
11
  driver: "sqlite"
@@ -26,6 +25,12 @@ jwt:
26
25
  approval:
27
26
  callback_secret: ""
28
27
 
28
+ export:
29
+ max_rows: 50000
30
+ max_duration_seconds: 300
31
+ retry_max: 2
32
+ retry_backoff_seconds: 2
33
+
29
34
  pdf:
30
35
  font_path: ""
31
36
 
@@ -49,3 +54,28 @@ storage:
49
54
  access_key: ""
50
55
  secret_key: ""
51
56
  use_ssl: true
57
+
58
+ telemetry:
59
+ enabled: false
60
+ service_name: "keystone"
61
+ environment: "local"
62
+ trace_enabled: true
63
+ metrics_enabled: true
64
+ metrics_path: "/metrics"
65
+ otlp_endpoint: ""
66
+ otlp_insecure: true
67
+ log_format: "text"
68
+ log_level: ""
69
+ trace_sample_ratio: 0.1
70
+
71
+ cache:
72
+ driver: "memory"
73
+ prefix: "keystone"
74
+ redis:
75
+ addr: "localhost:6379"
76
+ password: ""
77
+ db: 0
78
+ ttl:
79
+ permissions_seconds: 300
80
+ settings_seconds: 1800
81
+ approval_seconds: 900
@@ -6,7 +6,6 @@ server:
6
6
  modules:
7
7
  enabled:
8
8
  - "keystone"
9
- - "example"
10
9
 
11
10
  database:
12
11
  driver: "sqlite"
@@ -26,6 +25,12 @@ jwt:
26
25
  approval:
27
26
  callback_secret: ""
28
27
 
28
+ export:
29
+ max_rows: 50000
30
+ max_duration_seconds: 300
31
+ retry_max: 2
32
+ retry_backoff_seconds: 2
33
+
29
34
  pdf:
30
35
  font_path: ""
31
36
 
@@ -49,3 +54,28 @@ storage:
49
54
  access_key: ""
50
55
  secret_key: ""
51
56
  use_ssl: true
57
+
58
+ telemetry:
59
+ enabled: false
60
+ service_name: "keystone"
61
+ environment: "local"
62
+ trace_enabled: true
63
+ metrics_enabled: true
64
+ metrics_path: "/metrics"
65
+ otlp_endpoint: ""
66
+ otlp_insecure: true
67
+ log_format: "text"
68
+ log_level: ""
69
+ trace_sample_ratio: 0.1
70
+
71
+ cache:
72
+ driver: "memory"
73
+ prefix: "keystone"
74
+ redis:
75
+ addr: "localhost:6379"
76
+ password: ""
77
+ db: 0
78
+ ttl:
79
+ permissions_seconds: 300
80
+ settings_seconds: 1800
81
+ approval_seconds: 900
@@ -4,42 +4,56 @@ go 1.24.3
4
4
 
5
5
  require (
6
6
  github.com/gin-gonic/gin v1.11.0
7
+ github.com/google/uuid v1.6.0
7
8
  github.com/robsuncn/keystone v0.2.1
8
9
  github.com/swaggo/files v1.0.1
9
10
  github.com/swaggo/gin-swagger v1.6.0
10
11
  github.com/swaggo/swag v1.16.2
12
+ github.com/xuri/excelize/v2 v2.10.0
13
+ gorm.io/datatypes v1.2.7
11
14
  gorm.io/gorm v1.31.1
12
15
  )
13
16
 
14
17
  require (
15
18
  filippo.io/edwards25519 v1.1.0 // indirect
19
+ github.com/ClickHouse/ch-go v0.61.5 // indirect
20
+ github.com/ClickHouse/clickhouse-go/v2 v2.30.0 // indirect
16
21
  github.com/KyleBanks/depth v1.2.1 // indirect
17
22
  github.com/PuerkitoBio/purell v1.1.1 // indirect
18
23
  github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
19
- github.com/bytedance/sonic v1.14.0 // indirect
20
- github.com/bytedance/sonic/loader v0.3.0 // indirect
24
+ github.com/andybalholm/brotli v1.1.1 // indirect
25
+ github.com/beorn7/perks v1.0.1 // indirect
26
+ github.com/bytedance/gopkg v0.1.3 // indirect
27
+ github.com/bytedance/sonic v1.14.2 // indirect
28
+ github.com/bytedance/sonic/loader v0.4.0 // indirect
29
+ github.com/cenkalti/backoff/v5 v5.0.3 // indirect
21
30
  github.com/cespare/xxhash/v2 v2.3.0 // indirect
22
31
  github.com/cloudwego/base64x v0.1.6 // indirect
23
32
  github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
24
33
  github.com/dustin/go-humanize v1.0.1 // indirect
25
34
  github.com/fsnotify/fsnotify v1.9.0 // indirect
26
- github.com/gabriel-vasile/mimetype v1.4.8 // indirect
35
+ github.com/gabriel-vasile/mimetype v1.4.11 // indirect
27
36
  github.com/gin-contrib/sse v1.1.0 // indirect
28
37
  github.com/glebarez/go-sqlite v1.21.2 // indirect
29
38
  github.com/glebarez/sqlite v1.11.0 // indirect
39
+ github.com/go-faster/city v1.0.1 // indirect
40
+ github.com/go-faster/errors v0.7.1 // indirect
41
+ github.com/go-logr/logr v1.4.3 // indirect
42
+ github.com/go-logr/stdr v1.2.2 // indirect
30
43
  github.com/go-openapi/jsonpointer v0.19.5 // indirect
31
44
  github.com/go-openapi/jsonreference v0.19.6 // indirect
32
45
  github.com/go-openapi/spec v0.20.4 // indirect
33
46
  github.com/go-openapi/swag v0.19.15 // indirect
34
47
  github.com/go-playground/locales v0.14.1 // indirect
35
48
  github.com/go-playground/universal-translator v0.18.1 // indirect
36
- github.com/go-playground/validator/v10 v10.27.0 // indirect
49
+ github.com/go-playground/validator/v10 v10.28.0 // indirect
37
50
  github.com/go-sql-driver/mysql v1.8.1 // indirect
38
51
  github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
39
- github.com/goccy/go-json v0.10.2 // indirect
40
- github.com/goccy/go-yaml v1.18.0 // indirect
52
+ github.com/goccy/go-json v0.10.5 // indirect
53
+ github.com/goccy/go-yaml v1.19.0 // indirect
41
54
  github.com/golang-jwt/jwt/v5 v5.3.0 // indirect
42
- github.com/google/uuid v1.6.0 // indirect
55
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect
56
+ github.com/hashicorp/go-version v1.6.0 // indirect
43
57
  github.com/jackc/pgpassfile v1.0.0 // indirect
44
58
  github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
45
59
  github.com/jackc/pgx/v5 v5.6.0 // indirect
@@ -48,21 +62,35 @@ require (
48
62
  github.com/jinzhu/now v1.1.5 // indirect
49
63
  github.com/josharian/intern v1.0.0 // indirect
50
64
  github.com/json-iterator/go v1.1.12 // indirect
65
+ github.com/klauspost/compress v1.18.0 // indirect
51
66
  github.com/klauspost/cpuid/v2 v2.3.0 // indirect
52
67
  github.com/leodido/go-urn v1.4.0 // indirect
53
68
  github.com/mailru/easyjson v0.7.6 // indirect
54
69
  github.com/mattn/go-isatty v0.0.20 // indirect
55
- github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
70
+ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
56
71
  github.com/modern-go/reflect2 v1.0.2 // indirect
72
+ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
57
73
  github.com/nicksnyder/go-i18n/v2 v2.6.1 // indirect
74
+ github.com/paulmach/orb v0.11.1 // indirect
58
75
  github.com/pelletier/go-toml/v2 v2.2.4 // indirect
59
- github.com/quic-go/qpack v0.5.1 // indirect
60
- github.com/quic-go/quic-go v0.54.0 // indirect
76
+ github.com/phpdave11/gofpdf v1.4.3 // indirect
77
+ github.com/pierrec/lz4/v4 v4.1.21 // indirect
78
+ github.com/pkg/errors v0.9.1 // indirect
79
+ github.com/prometheus/client_golang v1.23.2 // indirect
80
+ github.com/prometheus/client_model v0.6.2 // indirect
81
+ github.com/prometheus/common v0.67.4 // indirect
82
+ github.com/prometheus/otlptranslator v1.0.0 // indirect
83
+ github.com/prometheus/procfs v0.19.2 // indirect
84
+ github.com/quic-go/qpack v0.6.0 // indirect
85
+ github.com/quic-go/quic-go v0.57.1 // indirect
61
86
  github.com/redis/go-redis/v9 v9.17.2 // indirect
62
87
  github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
63
88
  github.com/richardlehane/mscfb v1.0.4 // indirect
64
89
  github.com/richardlehane/msoleps v1.0.4 // indirect
90
+ github.com/robfig/cron/v3 v3.0.1 // indirect
65
91
  github.com/sagikazarmark/locafero v0.11.0 // indirect
92
+ github.com/segmentio/asm v1.2.0 // indirect
93
+ github.com/shopspring/decimal v1.4.0 // indirect
66
94
  github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
67
95
  github.com/spf13/afero v1.15.0 // indirect
68
96
  github.com/spf13/cast v1.10.0 // indirect
@@ -71,25 +99,39 @@ require (
71
99
  github.com/subosito/gotenv v1.6.0 // indirect
72
100
  github.com/tiendc/go-deepcopy v1.7.1 // indirect
73
101
  github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
74
- github.com/ugorji/go/codec v1.3.0 // indirect
102
+ github.com/ugorji/go/codec v1.3.1 // indirect
75
103
  github.com/xuri/efp v0.0.1 // indirect
76
- github.com/xuri/excelize/v2 v2.10.0 // indirect
77
104
  github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 // indirect
78
- go.uber.org/mock v0.5.0 // indirect
105
+ go.opentelemetry.io/auto/sdk v1.2.1 // indirect
106
+ go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.64.0 // indirect
107
+ go.opentelemetry.io/otel v1.39.0 // indirect
108
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 // indirect
109
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.39.0 // indirect
110
+ go.opentelemetry.io/otel/exporters/prometheus v0.61.0 // indirect
111
+ go.opentelemetry.io/otel/metric v1.39.0 // indirect
112
+ go.opentelemetry.io/otel/sdk v1.39.0 // indirect
113
+ go.opentelemetry.io/otel/sdk/metric v1.39.0 // indirect
114
+ go.opentelemetry.io/otel/trace v1.39.0 // indirect
115
+ go.opentelemetry.io/proto/otlp v1.9.0 // indirect
116
+ go.yaml.in/yaml/v2 v2.4.3 // indirect
79
117
  go.yaml.in/yaml/v3 v3.0.4 // indirect
80
- golang.org/x/arch v0.20.0 // indirect
118
+ golang.org/x/arch v0.23.0 // indirect
81
119
  golang.org/x/crypto v0.46.0 // indirect
82
- golang.org/x/mod v0.30.0 // indirect
83
120
  golang.org/x/net v0.47.0 // indirect
84
121
  golang.org/x/sync v0.19.0 // indirect
85
122
  golang.org/x/sys v0.39.0 // indirect
86
123
  golang.org/x/text v0.32.0 // indirect
87
124
  golang.org/x/tools v0.39.0 // indirect
88
- google.golang.org/protobuf v1.36.9 // indirect
125
+ google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect
126
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
127
+ google.golang.org/grpc v1.77.0 // indirect
128
+ google.golang.org/protobuf v1.36.10 // indirect
89
129
  gopkg.in/yaml.v2 v2.4.0 // indirect
90
- gorm.io/datatypes v1.2.7 // indirect
91
- gorm.io/driver/mysql v1.5.6 // indirect
130
+ gopkg.in/yaml.v3 v3.0.1 // indirect
131
+ gorm.io/driver/clickhouse v0.7.0 // indirect
132
+ gorm.io/driver/mysql v1.5.7 // indirect
92
133
  gorm.io/driver/postgres v1.6.0 // indirect
134
+ gorm.io/plugin/opentelemetry v0.1.16 // indirect
93
135
  modernc.org/libc v1.22.5 // indirect
94
136
  modernc.org/mathutil v1.5.0 // indirect
95
137
  modernc.org/memory v1.5.0 // indirect