mirror of
https://github.com/tnb-labs/panel.git
synced 2026-08-28 17:44:56 +08:00
refactor(di): restore compile-time Wire injection
Replace the samber/do runtime container with explicit constructor dependencies and generated Wire graphs for ace and cli. Keep CLI application loading isolated and verify generated files in CI.
This commit is contained in:
@@ -18,6 +18,10 @@ jobs:
|
||||
with:
|
||||
cache: true
|
||||
go-version: 'stable'
|
||||
- name: Check Wire generated code
|
||||
run: |
|
||||
go generate ./cmd/ace ./cmd/cli
|
||||
git diff --exit-code -- cmd/ace/wire_gen.go cmd/cli/wire_gen.go
|
||||
- name: Run golangci-lint
|
||||
uses: golangci/golangci-lint-action@v9
|
||||
with:
|
||||
|
||||
+2
-2
@@ -11,8 +11,8 @@ _cgo_gotypes.go
|
||||
_cgo_export.*
|
||||
|
||||
# 编译文件
|
||||
ace
|
||||
cli
|
||||
/ace
|
||||
/cli
|
||||
*.com
|
||||
*.class
|
||||
*.dll
|
||||
|
||||
+4
-9
@@ -6,11 +6,6 @@ import (
|
||||
"os"
|
||||
"runtime/debug"
|
||||
_ "time/tzdata"
|
||||
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/internal/injector"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -27,13 +22,13 @@ func run() error {
|
||||
|
||||
debug.SetGCPercent(10)
|
||||
|
||||
inj := injector.New()
|
||||
defer func() { _ = inj.Shutdown() }()
|
||||
|
||||
ace, err := do.Invoke[*app.Ace](inj)
|
||||
ace, cleanup, err := initAce()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if cleanup != nil {
|
||||
defer cleanup()
|
||||
}
|
||||
|
||||
return ace.Run()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
//go:build wireinject
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/google/wire"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/internal/apps"
|
||||
"github.com/acepanel/panel/v3/internal/biz"
|
||||
"github.com/acepanel/panel/v3/internal/bootstrap"
|
||||
"github.com/acepanel/panel/v3/internal/data"
|
||||
"github.com/acepanel/panel/v3/internal/job"
|
||||
"github.com/acepanel/panel/v3/internal/route"
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
func initAce() (*app.Ace, func(), error) {
|
||||
panic(wire.Build(
|
||||
bootstrap.ProviderSet,
|
||||
apps.ProviderSet,
|
||||
biz.ProviderSet,
|
||||
data.ProviderSet,
|
||||
service.ProviderSet,
|
||||
route.ProviderSet,
|
||||
job.ProviderSet,
|
||||
app.NewAce,
|
||||
))
|
||||
}
|
||||
@@ -0,0 +1,928 @@
|
||||
// Code generated by Wire. DO NOT EDIT.
|
||||
|
||||
//go:generate go run -mod=mod github.com/google/wire/cmd/wire
|
||||
//go:build !wireinject
|
||||
// +build !wireinject
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/internal/apps/apache"
|
||||
"github.com/acepanel/panel/v3/internal/apps/clickhouse"
|
||||
"github.com/acepanel/panel/v3/internal/apps/codeserver"
|
||||
"github.com/acepanel/panel/v3/internal/apps/docker"
|
||||
"github.com/acepanel/panel/v3/internal/apps/elasticsearch"
|
||||
"github.com/acepanel/panel/v3/internal/apps/fail2ban"
|
||||
"github.com/acepanel/panel/v3/internal/apps/frp"
|
||||
"github.com/acepanel/panel/v3/internal/apps/gitea"
|
||||
"github.com/acepanel/panel/v3/internal/apps/grafana"
|
||||
"github.com/acepanel/panel/v3/internal/apps/kafka"
|
||||
"github.com/acepanel/panel/v3/internal/apps/mariadb"
|
||||
"github.com/acepanel/panel/v3/internal/apps/memcached"
|
||||
"github.com/acepanel/panel/v3/internal/apps/minio"
|
||||
"github.com/acepanel/panel/v3/internal/apps/mongodb"
|
||||
"github.com/acepanel/panel/v3/internal/apps/mysql"
|
||||
"github.com/acepanel/panel/v3/internal/apps/nginx"
|
||||
"github.com/acepanel/panel/v3/internal/apps/openresty"
|
||||
"github.com/acepanel/panel/v3/internal/apps/opensearch"
|
||||
"github.com/acepanel/panel/v3/internal/apps/percona"
|
||||
"github.com/acepanel/panel/v3/internal/apps/pgadmin"
|
||||
"github.com/acepanel/panel/v3/internal/apps/phpmyadmin"
|
||||
"github.com/acepanel/panel/v3/internal/apps/podman"
|
||||
"github.com/acepanel/panel/v3/internal/apps/postgresql"
|
||||
"github.com/acepanel/panel/v3/internal/apps/prometheus"
|
||||
"github.com/acepanel/panel/v3/internal/apps/pureftpd"
|
||||
"github.com/acepanel/panel/v3/internal/apps/redis"
|
||||
"github.com/acepanel/panel/v3/internal/apps/rocketmq"
|
||||
"github.com/acepanel/panel/v3/internal/apps/rsync"
|
||||
"github.com/acepanel/panel/v3/internal/apps/s3fs"
|
||||
"github.com/acepanel/panel/v3/internal/apps/supervisor"
|
||||
"github.com/acepanel/panel/v3/internal/apps/valkey"
|
||||
"github.com/acepanel/panel/v3/internal/biz"
|
||||
"github.com/acepanel/panel/v3/internal/bootstrap"
|
||||
"github.com/acepanel/panel/v3/internal/data"
|
||||
"github.com/acepanel/panel/v3/internal/job"
|
||||
"github.com/acepanel/panel/v3/internal/middleware"
|
||||
"github.com/acepanel/panel/v3/internal/route"
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
"github.com/acepanel/panel/v3/pkg/websitestat"
|
||||
)
|
||||
|
||||
import (
|
||||
_ "time/tzdata"
|
||||
)
|
||||
|
||||
// Injectors from wire.go:
|
||||
|
||||
func initAce() (*app.Ace, func(), error) {
|
||||
config, err := bootstrap.NewConf()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
locale, err := bootstrap.NewT(config)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
apacheApp, err := apache.NewApp(locale)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
db, err := bootstrap.NewDB(config)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseServerRepo, err := data.NewDatabaseServerRepo(db)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
settingRepo, err := data.NewSettingRepo(config, db)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
clickhouseApp, err := clickhouse.NewApp(locale, databaseServerRepo, settingRepo)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
codeserverApp, err := codeserver.NewApp()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
dockerApp, err := docker.NewApp()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
elasticsearchApp, err := elasticsearch.NewApp(locale)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
websiteRepo, err := data.NewWebsiteRepo(db, locale, settingRepo)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
fail2banApp, err := fail2ban.NewApp(locale, websiteRepo)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
frpApp, err := frp.NewApp()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
giteaApp, err := gitea.NewApp()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
grafanaApp, err := grafana.NewApp(locale)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
kafkaApp, err := kafka.NewApp(locale)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
mysqlApp, err := mysql.NewApp(locale, databaseServerRepo, settingRepo)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
mariadbApp, err := mariadb.NewApp(mysqlApp)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
memcachedApp, err := memcached.NewApp(locale)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
minioApp, err := minio.NewApp()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
mongodbApp, err := mongodb.NewApp(locale, databaseServerRepo, settingRepo)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
nginxApp, err := nginx.NewApp(locale)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
openrestyApp, err := openresty.NewApp(nginxApp)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
opensearchApp, err := opensearch.NewApp(locale)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
perconaApp, err := percona.NewApp(mysqlApp)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
pgadminApp, err := pgadmin.NewApp(config, locale, databaseServerRepo)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
phpmyadminApp, err := phpmyadmin.NewApp(config, locale, databaseServerRepo)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
podmanApp, err := podman.NewApp()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
postgresqlApp, err := postgresql.NewApp(locale, databaseServerRepo, settingRepo)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
logger, cleanup, err := bootstrap.NewLogger(config)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
slogLogger := bootstrap.NewSlog(logger)
|
||||
notifyChannelRepo, err := data.NewNotifyChannelRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
notifyUsecase, err := biz.NewNotifyUsecase(locale, slogLogger, notifyChannelRepo, settingRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
taskRunner, err := bootstrap.NewRunner(notifyUsecase, db, locale, slogLogger)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
taskRepo, err := data.NewTaskRepo(db, locale, slogLogger, taskRunner)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
prometheusApp, err := prometheus.NewApp(config, locale, taskRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
pureftpdApp, err := pureftpd.NewApp(locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
redisApp, err := redis.NewApp(locale, databaseServerRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
rocketmqApp, err := rocketmq.NewApp(locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
rsyncApp, err := rsync.NewApp(locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
s3fsApp, err := s3fs.NewApp(locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
supervisorApp, err := supervisor.NewApp(locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
valkeyApp, err := valkey.NewApp(locale, databaseServerRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
loader, err := bootstrap.NewLoader(apacheApp, clickhouseApp, codeserverApp, dockerApp, elasticsearchApp, fail2banApp, frpApp, giteaApp, grafanaApp, kafkaApp, mariadbApp, memcachedApp, minioApp, mongodbApp, mysqlApp, nginxApp, openrestyApp, opensearchApp, perconaApp, pgadminApp, phpmyadminApp, podmanApp, postgresqlApp, prometheusApp, pureftpdApp, redisApp, rocketmqApp, rsyncApp, s3fsApp, supervisorApp, valkeyApp)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
manager, err := bootstrap.NewSession(config, db, slogLogger)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
appRepo, err := data.NewAppRepo(config, db, locale, slogLogger)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
userTokenRepo, err := data.NewUserTokenRepo(config, db, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
middlewares, err := middleware.NewMiddlewares(config, locale, manager, appRepo, userTokenRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
validator, err := bootstrap.NewValidator(config, db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
alertRepo, err := data.NewAlertRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
containerRepo, err := data.NewContainerRepo()
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
alertUsecase, err := biz.NewAlertUsecase(notifyUsecase, loader, locale, slogLogger, alertRepo, appRepo, containerRepo, databaseServerRepo, settingRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
alertService, err := service.NewAlertService(alertUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
cacheRepo, err := data.NewCacheRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
appUsecase, err := biz.NewAppUsecase(locale, appRepo, cacheRepo, taskRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
cacheUsecase := biz.NewCacheUsecase(cacheRepo)
|
||||
settingUsecase, err := biz.NewSettingUsecase(locale, slogLogger, settingRepo, taskRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
appService, err := service.NewAppService(loader, appUsecase, cacheUsecase, settingUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
backupRepo, err := data.NewBackupRepo(config, db, locale, slogLogger, settingRepo, websiteRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
backupUsecase, err := biz.NewBackupUsecase(notifyUsecase, locale, slogLogger, backupRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
taskUsecase := biz.NewTaskUsecase(taskRepo)
|
||||
backupService, err := service.NewBackupService(backupUsecase, taskUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
backupAccountRepo, err := data.NewBackupAccountRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
backupAccountUsecase, err := biz.NewBackupAccountUsecase(locale, slogLogger, backupAccountRepo, settingRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
backupStorageService, err := service.NewBackupStorageService(backupAccountUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
certRepo, err := data.NewCertRepo(db, locale, slogLogger)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
certUsecase, err := biz.NewCertUsecase(locale, slogLogger, certRepo, settingRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
certService, err := service.NewCertService(certUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
certAccountRepo, err := data.NewCertAccountRepo(db, locale, slogLogger)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
userRepo, err := data.NewUserRepo(db, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
certAccountUsecase, err := biz.NewCertAccountUsecase(locale, slogLogger, certAccountRepo, userRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
certAccountService, err := service.NewCertAccountService(certAccountUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
certDNSRepo, err := data.NewCertDNSRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
certDNSUsecase := biz.NewCertDNSUsecase(certDNSRepo, slogLogger)
|
||||
certDNSService, err := service.NewCertDNSService(certDNSUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
containerUsecase := biz.NewContainerUsecase(containerRepo, settingRepo)
|
||||
containerService, err := service.NewContainerService(containerUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
containerComposeRepo, err := data.NewContainerComposeRepo()
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
containerComposeUsecase := biz.NewContainerComposeUsecase(containerComposeRepo)
|
||||
containerComposeService, err := service.NewContainerComposeService(containerComposeUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
containerImageRepo, err := data.NewContainerImageRepo()
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
containerImageUsecase := biz.NewContainerImageUsecase(containerImageRepo, settingRepo)
|
||||
containerImageService, err := service.NewContainerImageService(containerImageUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
containerNetworkRepo, err := data.NewContainerNetworkRepo()
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
containerNetworkUsecase := biz.NewContainerNetworkUsecase(containerNetworkRepo, settingRepo)
|
||||
containerNetworkService, err := service.NewContainerNetworkService(containerNetworkUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
containerVolumeRepo, err := data.NewContainerVolumeRepo()
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
containerVolumeUsecase := biz.NewContainerVolumeUsecase(containerVolumeRepo, settingRepo)
|
||||
containerVolumeService, err := service.NewContainerVolumeService(containerVolumeUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
cronRepo, err := data.NewCronRepo(db, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
cronUsecase := biz.NewCronUsecase(cronRepo, slogLogger)
|
||||
cronService, err := service.NewCronService(cronUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseUserRepo, err := data.NewDatabaseUserRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseUserUsecase, err := biz.NewDatabaseUserUsecase(slogLogger, databaseServerRepo, databaseUserRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseRepo, err := data.NewDatabaseRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseUsecase, err := biz.NewDatabaseUsecase(databaseUserUsecase, locale, slogLogger, databaseRepo, databaseServerRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseService, err := service.NewDatabaseService(databaseUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseElasticsearchRepo, err := data.NewDatabaseElasticsearchRepo(db, locale, slogLogger)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseElasticsearchUsecase := biz.NewDatabaseElasticsearchUsecase(databaseElasticsearchRepo)
|
||||
databaseElasticsearchService, err := service.NewDatabaseElasticsearchService(databaseElasticsearchUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseRedisRepo, err := data.NewDatabaseRedisRepo(db, locale, slogLogger)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseRedisUsecase := biz.NewDatabaseRedisUsecase(databaseRedisRepo)
|
||||
databaseRedisService, err := service.NewDatabaseRedisService(databaseRedisUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseServerUsecase, err := biz.NewDatabaseServerUsecase(locale, slogLogger, databaseServerRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseServerService, err := service.NewDatabaseServerService(databaseServerUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseUserService, err := service.NewDatabaseUserService(databaseUserUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
environmentRepo, err := data.NewEnvironmentRepo(config, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
environmentUsecase, err := biz.NewEnvironmentUsecase(locale, cacheRepo, environmentRepo, taskRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
environmentService, err := service.NewEnvironmentService(environmentUsecase, taskUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
environmentDotnetService, err := service.NewEnvironmentDotnetService(environmentUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
environmentGoService, err := service.NewEnvironmentGoService(environmentUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
environmentJavaService, err := service.NewEnvironmentJavaService(environmentUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
environmentNodejsService, err := service.NewEnvironmentNodejsService(environmentUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
environmentPHPService, err := service.NewEnvironmentPHPService(environmentUsecase, taskUsecase, config, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
environmentPythonService, err := service.NewEnvironmentPythonService(environmentUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
tamperRepo, err := data.NewTamperRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
tamperUsecase, err := biz.NewTamperUsecase(notifyUsecase, settingUsecase, locale, slogLogger, tamperRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
fileService, err := service.NewFileService(containerUsecase, tamperUsecase, taskUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
fileShareRepo, err := data.NewFileShareRepo(db, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
fileShareUsecase, err := biz.NewFileShareUsecase(slogLogger, fileShareRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
fileShareService, err := service.NewFileShareService(fileShareUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
firewallService, err := service.NewFirewallService(locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
scanEventRepo, err := data.NewScanEventRepo()
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
scanEventUsecase := biz.NewScanEventUsecase(scanEventRepo, settingRepo)
|
||||
firewallScanService, err := service.NewFirewallScanService(scanEventUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
projectRepo, err := data.NewProjectRepo(db, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
projectUsecase, err := biz.NewProjectUsecase(locale, slogLogger, projectRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
websiteStatRepo, err := data.NewWebsiteStatRepo()
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
websiteStatUsecase := biz.NewWebsiteStatUsecase(websiteStatRepo)
|
||||
websiteUsecase, err := biz.NewWebsiteUsecase(certAccountUsecase, certUsecase, databaseUsecase, databaseUserUsecase, tamperUsecase, websiteStatUsecase, locale, slogLogger, databaseServerRepo, websiteRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
homeService, err := service.NewHomeService(appUsecase, backupUsecase, containerUsecase, cronUsecase, databaseServerUsecase, environmentUsecase, projectUsecase, settingUsecase, taskUsecase, websiteUsecase, config, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
logRepo, err := data.NewLogRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
logUsecase := biz.NewLogUsecase(logRepo)
|
||||
logService, err := service.NewLogService(logUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
monitorRepo, err := data.NewMonitorRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
monitorUsecase := biz.NewMonitorUsecase(monitorRepo, settingRepo)
|
||||
monitorService, err := service.NewMonitorService(monitorUsecase, settingUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
notifyService, err := service.NewNotifyService(notifyUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
processService, err := service.NewProcessService()
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
projectService, err := service.NewProjectService(projectUsecase, settingUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
safeRepo, err := data.NewSafeRepo()
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
safeUsecase := biz.NewSafeUsecase(safeRepo, slogLogger)
|
||||
safeService, err := service.NewSafeService(safeUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
settingService, err := service.NewSettingService(certAccountUsecase, certUsecase, settingUsecase, db, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
sshRepo, err := data.NewSSHRepo(db, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
sshUsecase := biz.NewSSHUsecase(sshRepo, slogLogger)
|
||||
sshService, err := service.NewSSHService(sshUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
systemctlService, err := service.NewSystemctlService(locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
tamperService, err := service.NewTamperService(tamperUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
taskService, err := service.NewTaskService(taskUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
templateRepo, err := data.NewTemplateRepo(slogLogger)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
templateUsecase, err := biz.NewTemplateUsecase(locale, cacheRepo, templateRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
templateService, err := service.NewTemplateService(settingUsecase, templateUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
toolboxBenchmarkService, err := service.NewToolboxBenchmarkService(locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
toolboxDiskService, err := service.NewToolboxDiskService(locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
toolboxLogService, err := service.NewToolboxLogService(containerImageUsecase, settingUsecase, db, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
toolboxMigrationService, err := service.NewToolboxMigrationService(appUsecase, databaseServerUsecase, databaseUsecase, databaseUserUsecase, environmentUsecase, projectUsecase, settingUsecase, websiteUsecase, config, locale, slogLogger)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
toolboxNetworkService, err := service.NewToolboxNetworkService()
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
toolboxSSHService, err := service.NewToolboxSSHService(locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
toolboxSystemService, err := service.NewToolboxSystemService(locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
userUsecase, err := biz.NewUserUsecase(locale, slogLogger, userRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
userService, err := service.NewUserService(notifyUsecase, userUsecase, config, locale, manager)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
userPasskeyRepo, err := data.NewUserPasskeyRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
userPasskeyUsecase := biz.NewUserPasskeyUsecase(userPasskeyRepo)
|
||||
userPasskeyService, err := service.NewUserPasskeyService(notifyUsecase, userPasskeyUsecase, userUsecase, config, locale, manager)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
userTokenUsecase := biz.NewUserTokenUsecase(userTokenRepo)
|
||||
userTokenService, err := service.NewUserTokenService(userTokenUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
webHookRepo, err := data.NewWebHookRepo(db, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
webHookUsecase, err := biz.NewWebHookUsecase(locale, slogLogger, webHookRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
webHookService, err := service.NewWebHookService(webHookUsecase)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
websiteService, err := service.NewWebsiteService(settingUsecase, websiteUsecase, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
aggregator := websitestat.NewAggregator()
|
||||
websiteStatService, err := service.NewWebsiteStatService(settingUsecase, websiteStatUsecase, websiteUsecase, aggregator)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
wsService, err := service.NewWsService(backupUsecase, certUsecase, sshUsecase, settingUsecase, taskUsecase, config, locale, slogLogger)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
services := &route.Services{
|
||||
Alert: alertService,
|
||||
App: appService,
|
||||
Backup: backupService,
|
||||
BackupStorage: backupStorageService,
|
||||
Cert: certService,
|
||||
CertAccount: certAccountService,
|
||||
CertDNS: certDNSService,
|
||||
Container: containerService,
|
||||
ContainerCompose: containerComposeService,
|
||||
ContainerImage: containerImageService,
|
||||
ContainerNetwork: containerNetworkService,
|
||||
ContainerVolume: containerVolumeService,
|
||||
Cron: cronService,
|
||||
Database: databaseService,
|
||||
DatabaseElasticsearch: databaseElasticsearchService,
|
||||
DatabaseRedis: databaseRedisService,
|
||||
DatabaseServer: databaseServerService,
|
||||
DatabaseUser: databaseUserService,
|
||||
Environment: environmentService,
|
||||
EnvironmentDotnet: environmentDotnetService,
|
||||
EnvironmentGo: environmentGoService,
|
||||
EnvironmentJava: environmentJavaService,
|
||||
EnvironmentNodejs: environmentNodejsService,
|
||||
EnvironmentPHP: environmentPHPService,
|
||||
EnvironmentPython: environmentPythonService,
|
||||
File: fileService,
|
||||
FileShare: fileShareService,
|
||||
Firewall: firewallService,
|
||||
FirewallScan: firewallScanService,
|
||||
Home: homeService,
|
||||
Log: logService,
|
||||
Monitor: monitorService,
|
||||
Notify: notifyService,
|
||||
Process: processService,
|
||||
Project: projectService,
|
||||
Safe: safeService,
|
||||
Setting: settingService,
|
||||
SSH: sshService,
|
||||
Systemctl: systemctlService,
|
||||
Tamper: tamperService,
|
||||
Task: taskService,
|
||||
Template: templateService,
|
||||
ToolboxBenchmark: toolboxBenchmarkService,
|
||||
ToolboxDisk: toolboxDiskService,
|
||||
ToolboxLog: toolboxLogService,
|
||||
ToolboxMigration: toolboxMigrationService,
|
||||
ToolboxNetwork: toolboxNetworkService,
|
||||
ToolboxSSH: toolboxSSHService,
|
||||
ToolboxSystem: toolboxSystemService,
|
||||
User: userService,
|
||||
UserPasskey: userPasskeyService,
|
||||
UserToken: userTokenService,
|
||||
WebHook: webHookService,
|
||||
Website: websiteService,
|
||||
WebsiteStat: websiteStatService,
|
||||
Ws: wsService,
|
||||
}
|
||||
v := route.NewEndpoints(services)
|
||||
mux, err := bootstrap.NewRouter(loader, config, locale, middlewares, validator, v)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
dependencies := &job.Dependencies{
|
||||
Alert: alertUsecase,
|
||||
Backup: backupUsecase,
|
||||
Cache: cacheUsecase,
|
||||
Cert: certUsecase,
|
||||
CertAccount: certAccountUsecase,
|
||||
FileShare: fileShareUsecase,
|
||||
Notify: notifyUsecase,
|
||||
ScanEvent: scanEventUsecase,
|
||||
Setting: settingUsecase,
|
||||
Tamper: tamperUsecase,
|
||||
Task: taskUsecase,
|
||||
Website: websiteUsecase,
|
||||
WebsiteStat: websiteStatUsecase,
|
||||
Conf: config,
|
||||
DB: db,
|
||||
T: locale,
|
||||
Log: slogLogger,
|
||||
Aggregator: aggregator,
|
||||
}
|
||||
v2 := job.NewJobs(dependencies)
|
||||
cron, err := bootstrap.NewCron(slogLogger, v2)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
gormigrate, err := bootstrap.NewMigrate(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
reloader, err := bootstrap.NewTLSReloader(config)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
server, err := bootstrap.NewHttp(mux, config, reloader)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
ace, err := app.NewAce(mux, config, cron, gormigrate, server, reloader, taskRunner)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
return ace, func() {
|
||||
cleanup()
|
||||
}, nil
|
||||
}
|
||||
+4
-8
@@ -6,10 +6,6 @@ import (
|
||||
_ "time/tzdata"
|
||||
|
||||
"github.com/gookit/color"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/internal/injector"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -24,13 +20,13 @@ func run() error {
|
||||
return errors.New("panel must run as root")
|
||||
}
|
||||
|
||||
inj := injector.New()
|
||||
defer func() { _ = inj.Shutdown() }()
|
||||
|
||||
cli, err := do.Invoke[*app.Cli](inj)
|
||||
cli, cleanup, err := initCli()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if cleanup != nil {
|
||||
defer cleanup()
|
||||
}
|
||||
|
||||
return cli.Run()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
//go:build wireinject
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/google/wire"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/internal/biz"
|
||||
"github.com/acepanel/panel/v3/internal/bootstrap"
|
||||
"github.com/acepanel/panel/v3/internal/command"
|
||||
"github.com/acepanel/panel/v3/internal/data"
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
func initCli() (*app.Cli, func(), error) {
|
||||
panic(wire.Build(
|
||||
bootstrap.ProviderSet,
|
||||
biz.ProviderSet,
|
||||
data.ProviderSet,
|
||||
service.ProviderSet,
|
||||
command.ProviderSet,
|
||||
app.NewCli,
|
||||
))
|
||||
}
|
||||
@@ -0,0 +1,220 @@
|
||||
// Code generated by Wire. DO NOT EDIT.
|
||||
|
||||
//go:generate go run -mod=mod github.com/google/wire/cmd/wire
|
||||
//go:build !wireinject
|
||||
// +build !wireinject
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/internal/biz"
|
||||
"github.com/acepanel/panel/v3/internal/bootstrap"
|
||||
"github.com/acepanel/panel/v3/internal/command"
|
||||
"github.com/acepanel/panel/v3/internal/data"
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
import (
|
||||
_ "time/tzdata"
|
||||
)
|
||||
|
||||
// Injectors from wire.go:
|
||||
|
||||
func initCli() (*app.Cli, func(), error) {
|
||||
config, err := bootstrap.NewConf()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
locale, err := bootstrap.NewT(config)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
db, err := bootstrap.NewDB(config)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
logger, cleanup, err := bootstrap.NewLogger(config)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
slogLogger := bootstrap.NewSlog(logger)
|
||||
appRepo, err := data.NewAppRepo(config, db, locale, slogLogger)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
cacheRepo, err := data.NewCacheRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
notifyChannelRepo, err := data.NewNotifyChannelRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
settingRepo, err := data.NewSettingRepo(config, db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
notifyUsecase, err := biz.NewNotifyUsecase(locale, slogLogger, notifyChannelRepo, settingRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
taskRunner, err := bootstrap.NewRunner(notifyUsecase, db, locale, slogLogger)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
taskRepo, err := data.NewTaskRepo(db, locale, slogLogger, taskRunner)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
appUsecase, err := biz.NewAppUsecase(locale, appRepo, cacheRepo, taskRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
websiteRepo, err := data.NewWebsiteRepo(db, locale, settingRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
backupRepo, err := data.NewBackupRepo(config, db, locale, slogLogger, settingRepo, websiteRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
backupUsecase, err := biz.NewBackupUsecase(notifyUsecase, locale, slogLogger, backupRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
cacheUsecase := biz.NewCacheUsecase(cacheRepo)
|
||||
certAccountRepo, err := data.NewCertAccountRepo(db, locale, slogLogger)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
userRepo, err := data.NewUserRepo(db, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
certAccountUsecase, err := biz.NewCertAccountUsecase(locale, slogLogger, certAccountRepo, userRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
certRepo, err := data.NewCertRepo(db, locale, slogLogger)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
certUsecase, err := biz.NewCertUsecase(locale, slogLogger, certRepo, settingRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
cronRepo, err := data.NewCronRepo(db, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
cronUsecase := biz.NewCronUsecase(cronRepo, slogLogger)
|
||||
databaseServerRepo, err := data.NewDatabaseServerRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseServerUsecase, err := biz.NewDatabaseServerUsecase(locale, slogLogger, databaseServerRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
settingUsecase, err := biz.NewSettingUsecase(locale, slogLogger, settingRepo, taskRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
userPasskeyRepo, err := data.NewUserPasskeyRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
userPasskeyUsecase := biz.NewUserPasskeyUsecase(userPasskeyRepo)
|
||||
userUsecase, err := biz.NewUserUsecase(locale, slogLogger, userRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseUserRepo, err := data.NewDatabaseUserRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseUserUsecase, err := biz.NewDatabaseUserUsecase(slogLogger, databaseServerRepo, databaseUserRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseRepo, err := data.NewDatabaseRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
databaseUsecase, err := biz.NewDatabaseUsecase(databaseUserUsecase, locale, slogLogger, databaseRepo, databaseServerRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
tamperRepo, err := data.NewTamperRepo(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
tamperUsecase, err := biz.NewTamperUsecase(notifyUsecase, settingUsecase, locale, slogLogger, tamperRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
websiteStatRepo, err := data.NewWebsiteStatRepo()
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
websiteStatUsecase := biz.NewWebsiteStatUsecase(websiteStatRepo)
|
||||
websiteUsecase, err := biz.NewWebsiteUsecase(certAccountUsecase, certUsecase, databaseUsecase, databaseUserUsecase, tamperUsecase, websiteStatUsecase, locale, slogLogger, databaseServerRepo, websiteRepo)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
cliService, err := service.NewCliService(appUsecase, backupUsecase, cacheUsecase, certAccountUsecase, certUsecase, cronUsecase, databaseServerUsecase, notifyUsecase, settingUsecase, userPasskeyUsecase, userUsecase, websiteUsecase, config, db, locale)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
v := command.Commands(locale, cliService)
|
||||
cliCommand, err := bootstrap.NewCli(locale, v)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
gormigrate, err := bootstrap.NewMigrate(db)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
cli, err := app.NewCli(cliCommand, gormigrate)
|
||||
if err != nil {
|
||||
cleanup()
|
||||
return nil, nil, err
|
||||
}
|
||||
return cli, func() {
|
||||
cleanup()
|
||||
}, nil
|
||||
}
|
||||
@@ -20,6 +20,7 @@ require (
|
||||
github.com/go-sql-driver/mysql v1.10.0
|
||||
github.com/go-webauthn/webauthn v0.17.4
|
||||
github.com/gomodule/redigo v1.9.3
|
||||
github.com/google/wire v0.7.0
|
||||
github.com/gookit/color v1.6.1
|
||||
github.com/hashicorp/go-version v1.9.0
|
||||
github.com/leonelquinteros/gotext v1.7.2
|
||||
@@ -50,7 +51,6 @@ require (
|
||||
github.com/orandin/slog-gorm v1.4.0
|
||||
github.com/pkg/sftp v1.13.11
|
||||
github.com/pquerna/otp v1.5.0
|
||||
github.com/samber/do/v2 v2.1.0
|
||||
github.com/samber/lo v1.53.0
|
||||
github.com/sethvargo/go-limiter v1.2.0
|
||||
github.com/shirou/gopsutil/v4 v4.26.6
|
||||
@@ -97,6 +97,7 @@ require (
|
||||
github.com/gofiber/utils/v2 v2.2.0 // indirect
|
||||
github.com/golang-jwt/jwt/v5 v5.3.1 // indirect
|
||||
github.com/google/go-tpm v0.9.8 // indirect
|
||||
github.com/google/subcommands v1.2.0 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/imega/luaformatter v0.0.0-20211025140405-86b0a68d6bef // indirect
|
||||
github.com/jaevor/go-nanoid v1.4.0 // indirect
|
||||
@@ -111,11 +112,11 @@ require (
|
||||
github.com/opencontainers/go-digest v1.0.0 // indirect
|
||||
github.com/opencontainers/image-spec v1.1.1 // indirect
|
||||
github.com/philhofer/fwd v1.2.0 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
|
||||
github.com/richardlehane/mscfb v1.0.7 // indirect
|
||||
github.com/richardlehane/msoleps v1.0.6 // indirect
|
||||
github.com/samber/go-type-to-string v1.8.0 // indirect
|
||||
github.com/stretchr/objx v0.5.3 // indirect
|
||||
github.com/tiendc/go-deepcopy v1.7.2 // indirect
|
||||
github.com/timtadh/data-structures v0.6.2 // indirect
|
||||
@@ -134,7 +135,9 @@ require (
|
||||
go.opentelemetry.io/otel/metric v1.35.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.35.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20260603202125-055de637280b // indirect
|
||||
golang.org/x/mod v0.37.0 // indirect
|
||||
golang.org/x/text v0.40.0 // indirect
|
||||
golang.org/x/tools v0.47.0 // indirect
|
||||
modernc.org/libc v1.74.1 // indirect
|
||||
modernc.org/mathutil v1.7.1 // indirect
|
||||
modernc.org/memory v1.11.0 // indirect
|
||||
@@ -144,3 +147,5 @@ replace (
|
||||
github.com/mholt/acmez/v3 => github.com/libtnb/acmez/v3 v3.0.0-20260406165834-a264acd02292
|
||||
github.com/stretchr/testify => github.com/libtnb/testify v0.0.0-20260406170114-25da2dad39e7
|
||||
)
|
||||
|
||||
tool github.com/google/wire/cmd/wire
|
||||
|
||||
@@ -159,8 +159,12 @@ github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OI
|
||||
github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs=
|
||||
github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
|
||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||
github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE=
|
||||
github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/wire v0.7.0 h1:JxUKI6+CVBgCO2WToKy/nQk0sS+amI9z9EjVmdaocj4=
|
||||
github.com/google/wire v0.7.0/go.mod h1:n6YbUQD9cPKTnHXEBN2DXlOp/mVADhVErcMFb0v3J18=
|
||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||
github.com/gookit/assert v0.1.1 h1:lh3GcawXe/p+cU7ESTZ5Ui3Sm/x8JWpIis4/1aF0mY0=
|
||||
@@ -337,6 +341,8 @@ github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZ
|
||||
github.com/pkg/sftp v1.13.11 h1:0N92SLTB8JqASJB14ZLHHzFnBV8mG9zw4K7jghEFWuE=
|
||||
github.com/pkg/sftp v1.13.11/go.mod h1:uNkH9roSXglNJqM+glJJi+TQXQUm0fXFWqCFmT8hsN0=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU=
|
||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
|
||||
@@ -363,10 +369,6 @@ github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0t
|
||||
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
|
||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||
github.com/samber/do/v2 v2.1.0 h1:lqCHn05XvY3VqwxvZDQPSkH+jIGWSVHUrSVLEbPOopo=
|
||||
github.com/samber/do/v2 v2.1.0/go.mod h1:wJBoiaZcUZyGuraOhfz15b517ZMogGs+U03DvnqvT6Q=
|
||||
github.com/samber/go-type-to-string v1.8.0 h1:5z6tDTjtXxkIAoAuHAZYMYR8mkBZjVgeSH7jcSLqc8w=
|
||||
github.com/samber/go-type-to-string v1.8.0/go.mod h1:jpU77vIDoIxkahknKDoEx9C8bQ1ADnh2sotZ8I4QqBU=
|
||||
github.com/samber/lo v1.53.0 h1:t975lj2py4kJPQ6haz1QMgtId2gtmfktACxIXArw3HM=
|
||||
github.com/samber/lo v1.53.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0=
|
||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
|
||||
|
||||
+8
-9
@@ -14,7 +14,6 @@ import (
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/go-gormigrate/gormigrate/v2"
|
||||
"github.com/libtnb/cron"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/pkg/config"
|
||||
"github.com/acepanel/panel/v3/pkg/tlscert"
|
||||
@@ -31,15 +30,15 @@ type Ace struct {
|
||||
runner types.TaskRunner
|
||||
}
|
||||
|
||||
func NewAce(i do.Injector) (*Ace, error) {
|
||||
func NewAce(router *chi.Mux, conf *config.Config, cron *cron.Cron, migrator *gormigrate.Gormigrate, server *hlfhr.Server, reloader *tlscert.Reloader, runner types.TaskRunner) (*Ace, error) {
|
||||
return &Ace{
|
||||
conf: do.MustInvoke[*config.Config](i),
|
||||
router: do.MustInvoke[*chi.Mux](i),
|
||||
server: do.MustInvoke[*hlfhr.Server](i),
|
||||
reloader: do.MustInvoke[*tlscert.Reloader](i),
|
||||
migrator: do.MustInvoke[*gormigrate.Gormigrate](i),
|
||||
cron: do.MustInvoke[*cron.Cron](i),
|
||||
runner: do.MustInvoke[types.TaskRunner](i),
|
||||
conf: conf,
|
||||
router: router,
|
||||
server: server,
|
||||
reloader: reloader,
|
||||
migrator: migrator,
|
||||
cron: cron,
|
||||
runner: runner,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
+3
-7
@@ -5,10 +5,7 @@ import (
|
||||
"os"
|
||||
|
||||
"github.com/go-gormigrate/gormigrate/v2"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/pkg/apploader"
|
||||
)
|
||||
|
||||
type Cli struct {
|
||||
@@ -16,12 +13,11 @@ type Cli struct {
|
||||
migrator *gormigrate.Gormigrate
|
||||
}
|
||||
|
||||
func NewCli(i do.Injector) (*Cli, error) {
|
||||
func NewCli(cmd *cli.Command, migrator *gormigrate.Gormigrate) (*Cli, error) {
|
||||
IsCli = true
|
||||
_ = do.MustInvoke[*apploader.Loader](i) // 强制构造 loader,触发全局应用注册
|
||||
return &Cli{
|
||||
cmd: do.MustInvoke[*cli.Command](i),
|
||||
migrator: do.MustInvoke[*gormigrate.Gormigrate](i),
|
||||
cmd: cmd,
|
||||
migrator: migrator,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
package app_test
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/internal/bootstrap"
|
||||
"github.com/acepanel/panel/v3/internal/command"
|
||||
"github.com/acepanel/panel/v3/internal/injector"
|
||||
"github.com/acepanel/panel/v3/internal/job"
|
||||
"github.com/acepanel/panel/v3/internal/registry"
|
||||
"github.com/acepanel/panel/v3/internal/route"
|
||||
"github.com/acepanel/panel/v3/pkg/config"
|
||||
)
|
||||
|
||||
// TestContainer 构建完整对象图,在测试期而非启动期暴露装配错误
|
||||
func TestContainer(t *testing.T) {
|
||||
tmp := t.TempDir()
|
||||
require.NoError(t, os.MkdirAll(filepath.Join(tmp, "panel/storage/logs"), 0o755))
|
||||
|
||||
// 直接构造内存配置并注入
|
||||
conf := &config.Config{
|
||||
App: config.AppConfig{
|
||||
Debug: true,
|
||||
Key: "12345678901234567890123456789012",
|
||||
Locale: "zh_CN",
|
||||
Timezone: "UTC",
|
||||
Root: tmp,
|
||||
},
|
||||
HTTP: config.HTTPConfig{Port: 8888, TLS: "off"},
|
||||
Session: config.SessionConfig{Lifetime: 120},
|
||||
}
|
||||
require.NoError(t, bootstrap.InitGlobal(conf))
|
||||
|
||||
inj := injector.New()
|
||||
defer func() { _ = inj.Shutdown() }()
|
||||
|
||||
// 覆盖配置提供者,跳过 config.Load 与全局副作用
|
||||
do.OverrideValue(inj, conf)
|
||||
|
||||
// 构造两个入口即触发全图:路由 + SpecJSON + cron 注册(5 段表达式)+ nil 证书重载器
|
||||
_, err := do.Invoke[*app.Ace](inj)
|
||||
require.NoError(t, err)
|
||||
_, err = do.Invoke[*app.Cli](inj)
|
||||
require.NoError(t, err)
|
||||
|
||||
// 每个带冒号的命名贡献必须命中已知前缀(拼错如 route:user 会被静默丢弃)
|
||||
require.NoError(t, registry.Verify(inj, route.RoutePrefix, command.Prefix, job.Prefix))
|
||||
|
||||
routes, err := registry.Collect[route.Endpoints](inj, route.RoutePrefix)
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, routes)
|
||||
|
||||
cmds, err := command.Commands(inj)
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, cmds)
|
||||
|
||||
jobs, err := registry.Collect[job.Job](inj, job.Prefix)
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, jobs)
|
||||
|
||||
spec, err := route.SpecJSON(inj, "AcePanel")
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, spec)
|
||||
}
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
@@ -23,9 +22,9 @@ type App struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp(t *gotext.Locale) (*App, error) {
|
||||
return &App{
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
t: t,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
+12
-12
@@ -1,7 +1,7 @@
|
||||
package apps
|
||||
|
||||
import (
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/google/wire"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/apps/apache"
|
||||
"github.com/acepanel/panel/v3/internal/apps/clickhouse"
|
||||
@@ -36,15 +36,15 @@ import (
|
||||
"github.com/acepanel/panel/v3/internal/apps/valkey"
|
||||
)
|
||||
|
||||
var Package = do.Package(
|
||||
do.Lazy(apache.NewApp), do.Lazy(clickhouse.NewApp), do.Lazy(codeserver.NewApp),
|
||||
do.Lazy(docker.NewApp), do.Lazy(elasticsearch.NewApp), do.Lazy(fail2ban.NewApp),
|
||||
do.Lazy(frp.NewApp), do.Lazy(gitea.NewApp), do.Lazy(grafana.NewApp),
|
||||
do.Lazy(kafka.NewApp), do.Lazy(mariadb.NewApp), do.Lazy(memcached.NewApp),
|
||||
do.Lazy(minio.NewApp), do.Lazy(mongodb.NewApp), do.Lazy(mysql.NewApp),
|
||||
do.Lazy(nginx.NewApp), do.Lazy(openresty.NewApp), do.Lazy(opensearch.NewApp),
|
||||
do.Lazy(percona.NewApp), do.Lazy(pgadmin.NewApp), do.Lazy(phpmyadmin.NewApp), do.Lazy(podman.NewApp),
|
||||
do.Lazy(postgresql.NewApp), do.Lazy(prometheus.NewApp), do.Lazy(pureftpd.NewApp),
|
||||
do.Lazy(redis.NewApp), do.Lazy(rocketmq.NewApp), do.Lazy(rsync.NewApp),
|
||||
do.Lazy(s3fs.NewApp), do.Lazy(supervisor.NewApp), do.Lazy(valkey.NewApp),
|
||||
var ProviderSet = wire.NewSet(
|
||||
apache.NewApp, clickhouse.NewApp, codeserver.NewApp,
|
||||
docker.NewApp, elasticsearch.NewApp, fail2ban.NewApp,
|
||||
frp.NewApp, gitea.NewApp, grafana.NewApp,
|
||||
kafka.NewApp, mariadb.NewApp, memcached.NewApp,
|
||||
minio.NewApp, mongodb.NewApp, mysql.NewApp,
|
||||
nginx.NewApp, openresty.NewApp, opensearch.NewApp,
|
||||
percona.NewApp, pgadmin.NewApp, phpmyadmin.NewApp, podman.NewApp,
|
||||
postgresql.NewApp, prometheus.NewApp, pureftpd.NewApp,
|
||||
redis.NewApp, rocketmq.NewApp, rsync.NewApp,
|
||||
s3fs.NewApp, supervisor.NewApp, valkey.NewApp,
|
||||
)
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/spf13/cast"
|
||||
"go.yaml.in/yaml/v4"
|
||||
"resty.dev/v3"
|
||||
@@ -28,11 +27,11 @@ type App struct {
|
||||
databaseServerRepo biz.DatabaseServerRepo
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp(t *gotext.Locale, databaseServerRepo biz.DatabaseServerRepo, settingRepo biz.SettingRepo) (*App, error) {
|
||||
return &App{
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
settingRepo: do.MustInvoke[biz.SettingRepo](i),
|
||||
databaseServerRepo: do.MustInvoke[biz.DatabaseServerRepo](i),
|
||||
t: t,
|
||||
settingRepo: settingRepo,
|
||||
databaseServerRepo: databaseServerRepo,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ import (
|
||||
"net/http"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
"github.com/acepanel/panel/v3/pkg/io"
|
||||
@@ -14,7 +13,7 @@ import (
|
||||
|
||||
type App struct{}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp() (*App, error) {
|
||||
return &App{}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
"github.com/acepanel/panel/v3/pkg/io"
|
||||
@@ -17,7 +16,7 @@ import (
|
||||
|
||||
type App struct{}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp() (*App, error) {
|
||||
return &App{}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ import (
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/spf13/cast"
|
||||
"go.yaml.in/yaml/v4"
|
||||
"resty.dev/v3"
|
||||
@@ -26,8 +25,8 @@ type App struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
return &App{t: do.MustInvoke[*gotext.Locale](i)}, nil
|
||||
func NewApp(t *gotext.Locale) (*App, error) {
|
||||
return &App{t: t}, nil
|
||||
}
|
||||
|
||||
func (s *App) Route(r chi.Router) {
|
||||
|
||||
@@ -10,7 +10,6 @@ import (
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/libtnb/chix/v2"
|
||||
"github.com/libtnb/utils/str"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/samber/lo"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
@@ -28,10 +27,10 @@ type App struct {
|
||||
websiteRepo biz.WebsiteRepo
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp(t *gotext.Locale, websiteRepo biz.WebsiteRepo) (*App, error) {
|
||||
return &App{
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
websiteRepo: do.MustInvoke[biz.WebsiteRepo](i),
|
||||
t: t,
|
||||
websiteRepo: websiteRepo,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import (
|
||||
"net/http"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
@@ -16,7 +15,7 @@ import (
|
||||
|
||||
type App struct{}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp() (*App, error) {
|
||||
return &App{}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import (
|
||||
"net/http"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
@@ -16,7 +15,7 @@ import (
|
||||
|
||||
type App struct{}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp() (*App, error) {
|
||||
return &App{}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/samber/lo"
|
||||
"go.yaml.in/yaml/v4"
|
||||
"resty.dev/v3"
|
||||
@@ -25,8 +24,8 @@ type App struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
return &App{t: do.MustInvoke[*gotext.Locale](i)}, nil
|
||||
func NewApp(t *gotext.Locale) (*App, error) {
|
||||
return &App{t: t}, nil
|
||||
}
|
||||
|
||||
func (s *App) Route(r chi.Router) {
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
@@ -21,8 +20,8 @@ type App struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
return &App{t: do.MustInvoke[*gotext.Locale](i)}, nil
|
||||
func NewApp(t *gotext.Locale) (*App, error) {
|
||||
return &App{t: t}, nil
|
||||
}
|
||||
|
||||
func (s *App) Route(r chi.Router) {
|
||||
|
||||
@@ -2,7 +2,6 @@ package mariadb
|
||||
|
||||
import (
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/apps/mysql"
|
||||
)
|
||||
@@ -11,13 +10,9 @@ type App struct {
|
||||
mysql *mysql.App
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
app, err := mysql.NewApp(i)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
func NewApp(mysqlApp *mysql.App) (*App, error) {
|
||||
return &App{
|
||||
mysql: app,
|
||||
mysql: mysqlApp,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
"github.com/acepanel/panel/v3/pkg/io"
|
||||
@@ -21,9 +20,9 @@ type App struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp(t *gotext.Locale) (*App, error) {
|
||||
return &App{
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
t: t,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ import (
|
||||
"net/http"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
"github.com/acepanel/panel/v3/pkg/io"
|
||||
@@ -14,7 +13,7 @@ import (
|
||||
|
||||
type App struct{}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp() (*App, error) {
|
||||
return &App{}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/spf13/cast"
|
||||
"go.yaml.in/yaml/v4"
|
||||
|
||||
@@ -27,11 +26,11 @@ type App struct {
|
||||
databaseServerRepo biz.DatabaseServerRepo
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp(t *gotext.Locale, databaseServerRepo biz.DatabaseServerRepo, settingRepo biz.SettingRepo) (*App, error) {
|
||||
return &App{
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
settingRepo: do.MustInvoke[biz.SettingRepo](i),
|
||||
databaseServerRepo: do.MustInvoke[biz.DatabaseServerRepo](i),
|
||||
t: t,
|
||||
settingRepo: settingRepo,
|
||||
databaseServerRepo: databaseServerRepo,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
@@ -29,11 +28,11 @@ type App struct {
|
||||
databaseServerRepo biz.DatabaseServerRepo
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp(t *gotext.Locale, databaseServerRepo biz.DatabaseServerRepo, settingRepo biz.SettingRepo) (*App, error) {
|
||||
return &App{
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
settingRepo: do.MustInvoke[biz.SettingRepo](i),
|
||||
databaseServerRepo: do.MustInvoke[biz.DatabaseServerRepo](i),
|
||||
t: t,
|
||||
settingRepo: settingRepo,
|
||||
databaseServerRepo: databaseServerRepo,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/spf13/cast"
|
||||
"resty.dev/v3"
|
||||
|
||||
@@ -26,8 +25,8 @@ type App struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func NewApp(t *gotext.Locale) (*App, error) {
|
||||
|
||||
return &App{
|
||||
t: t,
|
||||
}, nil
|
||||
|
||||
@@ -2,7 +2,6 @@ package openresty
|
||||
|
||||
import (
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/apps/nginx"
|
||||
"github.com/acepanel/panel/v3/pkg/systemctl"
|
||||
@@ -13,9 +12,9 @@ type App struct {
|
||||
nginx *nginx.App
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp(nginxApp *nginx.App) (*App, error) {
|
||||
return &App{
|
||||
nginx: do.MustInvoke[*nginx.App](i),
|
||||
nginx: nginxApp,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ import (
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/spf13/cast"
|
||||
"go.yaml.in/yaml/v4"
|
||||
"resty.dev/v3"
|
||||
@@ -26,8 +25,8 @@ type App struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func NewApp(t *gotext.Locale) (*App, error) {
|
||||
|
||||
return &App{t: t}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ package percona
|
||||
|
||||
import (
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/apps/mysql"
|
||||
)
|
||||
@@ -11,9 +10,9 @@ type App struct {
|
||||
mysql *mysql.App
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp(mysqlApp *mysql.App) (*App, error) {
|
||||
return &App{
|
||||
mysql: do.MustInvoke[*mysql.App](i),
|
||||
mysql: mysqlApp,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ import (
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/libtnb/chix/v2"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
@@ -39,11 +38,11 @@ type App struct {
|
||||
databaseServerRepo biz.DatabaseServerRepo
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp(conf *config.Config, t *gotext.Locale, databaseServerRepo biz.DatabaseServerRepo) (*App, error) {
|
||||
return &App{
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
conf: do.MustInvoke[*config.Config](i),
|
||||
databaseServerRepo: do.MustInvoke[biz.DatabaseServerRepo](i),
|
||||
t: t,
|
||||
conf: conf,
|
||||
databaseServerRepo: databaseServerRepo,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ import (
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/libtnb/chix/v2"
|
||||
"github.com/libtnb/utils/str"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
@@ -36,11 +35,11 @@ type App struct {
|
||||
databaseServerRepo biz.DatabaseServerRepo
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp(conf *config.Config, t *gotext.Locale, databaseServerRepo biz.DatabaseServerRepo) (*App, error) {
|
||||
return &App{
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
conf: do.MustInvoke[*config.Config](i),
|
||||
databaseServerRepo: do.MustInvoke[biz.DatabaseServerRepo](i),
|
||||
t: t,
|
||||
conf: conf,
|
||||
databaseServerRepo: databaseServerRepo,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ import (
|
||||
"net/http"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
"github.com/acepanel/panel/v3/pkg/io"
|
||||
@@ -14,7 +13,7 @@ import (
|
||||
|
||||
type App struct{}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
func NewApp() (*App, error) {
|
||||
return &App{}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
@@ -28,10 +27,10 @@ type App struct {
|
||||
databaseServerRepo biz.DatabaseServerRepo
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
setting := do.MustInvoke[biz.SettingRepo](i)
|
||||
databaseServer := do.MustInvoke[biz.DatabaseServerRepo](i)
|
||||
func NewApp(t *gotext.Locale, databaseServerRepo biz.DatabaseServerRepo, settingRepo biz.SettingRepo) (*App, error) {
|
||||
|
||||
setting := settingRepo
|
||||
databaseServer := databaseServerRepo
|
||||
return &App{
|
||||
t: t,
|
||||
settingRepo: setting,
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/samber/lo"
|
||||
"github.com/spf13/cast"
|
||||
"go.yaml.in/yaml/v4"
|
||||
@@ -30,10 +29,8 @@ type App struct {
|
||||
taskRepo biz.TaskRepo
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
conf := do.MustInvoke[*config.Config](i)
|
||||
taskRepo := do.MustInvoke[biz.TaskRepo](i)
|
||||
func NewApp(conf *config.Config, t *gotext.Locale, taskRepo biz.TaskRepo) (*App, error) {
|
||||
|
||||
return &App{t: t, conf: conf, taskRepo: taskRepo}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/libtnb/chix/v2"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/samber/lo"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
@@ -26,8 +25,8 @@ type App struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func NewApp(t *gotext.Locale) (*App, error) {
|
||||
|
||||
return &App{
|
||||
t: t,
|
||||
}, nil
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/samber/lo"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
@@ -25,9 +24,9 @@ type App struct {
|
||||
databaseServerRepo biz.DatabaseServerRepo
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
databaseServer := do.MustInvoke[biz.DatabaseServerRepo](i)
|
||||
func NewApp(t *gotext.Locale, databaseServerRepo biz.DatabaseServerRepo) (*App, error) {
|
||||
|
||||
databaseServer := databaseServerRepo
|
||||
return &App{
|
||||
t: t,
|
||||
databaseServerRepo: databaseServer,
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
@@ -21,8 +20,8 @@ type App struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func NewApp(t *gotext.Locale) (*App, error) {
|
||||
|
||||
return &App{t: t}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ import (
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/libtnb/chix/v2"
|
||||
"github.com/libtnb/utils/str"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
"github.com/acepanel/panel/v3/pkg/io"
|
||||
@@ -23,8 +22,8 @@ type App struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func NewApp(t *gotext.Locale) (*App, error) {
|
||||
|
||||
return &App{
|
||||
t: t,
|
||||
}, nil
|
||||
|
||||
@@ -10,7 +10,6 @@ import (
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/libtnb/chix/v2"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/samber/lo"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
@@ -24,8 +23,8 @@ type App struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func NewApp(t *gotext.Locale) (*App, error) {
|
||||
|
||||
return &App{
|
||||
t: t,
|
||||
}, nil
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/libtnb/chix/v2"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
@@ -23,8 +22,8 @@ type App struct {
|
||||
name string
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func NewApp(t *gotext.Locale) (*App, error) {
|
||||
|
||||
var name string
|
||||
if os.IsRHEL() {
|
||||
name = "supervisord"
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/samber/lo"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
@@ -25,9 +24,9 @@ type App struct {
|
||||
databaseServerRepo biz.DatabaseServerRepo
|
||||
}
|
||||
|
||||
func NewApp(i do.Injector) (*App, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
databaseServer := do.MustInvoke[biz.DatabaseServerRepo](i)
|
||||
func NewApp(t *gotext.Locale, databaseServerRepo biz.DatabaseServerRepo) (*App, error) {
|
||||
|
||||
databaseServer := databaseServerRepo
|
||||
return &App{
|
||||
t: t,
|
||||
databaseServerRepo: databaseServer,
|
||||
|
||||
+10
-11
@@ -12,7 +12,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/samber/lo"
|
||||
lop "github.com/samber/lo/parallel"
|
||||
"github.com/spf13/cast"
|
||||
@@ -170,17 +169,17 @@ type AlertUsecase struct {
|
||||
cleanedAt time.Time
|
||||
}
|
||||
|
||||
func NewAlertUsecase(i do.Injector) (*AlertUsecase, error) {
|
||||
func NewAlertUsecase(notifyUsecase *NotifyUsecase, loader *apploader.Loader, t *gotext.Locale, log *slog.Logger, alertRepo AlertRepo, appRepo AppRepo, containerRepo ContainerRepo, databaseServerRepo DatabaseServerRepo, settingRepo SettingRepo) (*AlertUsecase, error) {
|
||||
return &AlertUsecase{
|
||||
repo: do.MustInvoke[AlertRepo](i),
|
||||
notify: do.MustInvoke[*NotifyUsecase](i),
|
||||
setting: do.MustInvoke[SettingRepo](i),
|
||||
container: do.MustInvoke[ContainerRepo](i),
|
||||
app: do.MustInvoke[AppRepo](i),
|
||||
database: do.MustInvoke[DatabaseServerRepo](i),
|
||||
loader: do.MustInvoke[*apploader.Loader](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
repo: alertRepo,
|
||||
notify: notifyUsecase,
|
||||
setting: settingRepo,
|
||||
container: containerRepo,
|
||||
app: appRepo,
|
||||
database: databaseServerRepo,
|
||||
loader: loader,
|
||||
log: log,
|
||||
t: t,
|
||||
hits: make(map[string]uint),
|
||||
fired: make(map[string]time.Time),
|
||||
netSnaps: make(map[string]ioSnapshot),
|
||||
|
||||
+5
-6
@@ -7,7 +7,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/samber/lo"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
@@ -72,12 +71,12 @@ type AppUsecase struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewAppUsecase(i do.Injector) (*AppUsecase, error) {
|
||||
func NewAppUsecase(t *gotext.Locale, appRepo AppRepo, cacheRepo CacheRepo, taskRepo TaskRepo) (*AppUsecase, error) {
|
||||
return &AppUsecase{
|
||||
repo: do.MustInvoke[AppRepo](i),
|
||||
cache: do.MustInvoke[CacheRepo](i),
|
||||
task: do.MustInvoke[TaskRepo](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
repo: appRepo,
|
||||
cache: cacheRepo,
|
||||
task: taskRepo,
|
||||
t: t,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/pkg/types"
|
||||
)
|
||||
@@ -47,12 +46,12 @@ type BackupUsecase struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewBackupUsecase(i do.Injector) (*BackupUsecase, error) {
|
||||
func NewBackupUsecase(notifyUsecase *NotifyUsecase, t *gotext.Locale, log *slog.Logger, backupRepo BackupRepo) (*BackupUsecase, error) {
|
||||
return &BackupUsecase{
|
||||
repo: do.MustInvoke[BackupRepo](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
notify: do.MustInvoke[*NotifyUsecase](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
repo: backupRepo,
|
||||
log: log,
|
||||
notify: notifyUsecase,
|
||||
t: t,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/libtnb/utils/crypt"
|
||||
"github.com/samber/do/v2"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
@@ -146,12 +145,12 @@ type BackupAccountUsecase struct {
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
func NewBackupAccountUsecase(i do.Injector) (*BackupAccountUsecase, error) {
|
||||
func NewBackupAccountUsecase(t *gotext.Locale, log *slog.Logger, backupAccountRepo BackupAccountRepo, settingRepo SettingRepo) (*BackupAccountUsecase, error) {
|
||||
return &BackupAccountUsecase{
|
||||
repo: do.MustInvoke[BackupAccountRepo](i),
|
||||
setting: do.MustInvoke[SettingRepo](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
repo: backupAccountRepo,
|
||||
setting: settingRepo,
|
||||
t: t,
|
||||
log: log,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
+14
-18
@@ -1,22 +1,18 @@
|
||||
package biz
|
||||
|
||||
import (
|
||||
"github.com/samber/do/v2"
|
||||
import "github.com/google/wire"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/registry"
|
||||
)
|
||||
|
||||
var Package = do.Package(
|
||||
do.Lazy(NewAlertUsecase), do.Lazy(NewAppUsecase), do.Lazy(NewBackupUsecase), do.Lazy(NewBackupAccountUsecase),
|
||||
registry.Lazy(NewCacheUsecase), do.Lazy(NewCertUsecase), do.Lazy(NewCertAccountUsecase),
|
||||
registry.Lazy2(NewCertDNSUsecase), registry.Lazy2(NewContainerUsecase), registry.Lazy(NewContainerComposeUsecase),
|
||||
registry.Lazy2(NewContainerImageUsecase), registry.Lazy2(NewContainerNetworkUsecase), registry.Lazy2(NewContainerVolumeUsecase),
|
||||
registry.Lazy2(NewCronUsecase), do.Lazy(NewDatabaseUsecase), registry.Lazy(NewDatabaseRedisUsecase),
|
||||
registry.Lazy(NewDatabaseElasticsearchUsecase), do.Lazy(NewDatabaseServerUsecase), do.Lazy(NewDatabaseUserUsecase),
|
||||
do.Lazy(NewEnvironmentUsecase), do.Lazy(NewFileShareUsecase), registry.Lazy(NewLogUsecase), registry.Lazy2(NewMonitorUsecase),
|
||||
do.Lazy(NewNotifyUsecase), do.Lazy(NewProjectUsecase), registry.Lazy2(NewSafeUsecase), registry.Lazy2(NewScanEventUsecase),
|
||||
do.Lazy(NewSettingUsecase), registry.Lazy2(NewSSHUsecase), do.Lazy(NewTamperUsecase), registry.Lazy(NewTaskUsecase),
|
||||
do.Lazy(NewTemplateUsecase), do.Lazy(NewUserUsecase), registry.Lazy(NewUserPasskeyUsecase),
|
||||
registry.Lazy(NewUserTokenUsecase), do.Lazy(NewWebHookUsecase), do.Lazy(NewWebsiteUsecase),
|
||||
registry.Lazy(NewWebsiteStatUsecase),
|
||||
var ProviderSet = wire.NewSet(
|
||||
NewAlertUsecase, NewAppUsecase, NewBackupUsecase, NewBackupAccountUsecase,
|
||||
NewCacheUsecase, NewCertUsecase, NewCertAccountUsecase,
|
||||
NewCertDNSUsecase, NewContainerUsecase, NewContainerComposeUsecase,
|
||||
NewContainerImageUsecase, NewContainerNetworkUsecase, NewContainerVolumeUsecase,
|
||||
NewCronUsecase, NewDatabaseUsecase, NewDatabaseRedisUsecase,
|
||||
NewDatabaseElasticsearchUsecase, NewDatabaseServerUsecase, NewDatabaseUserUsecase,
|
||||
NewEnvironmentUsecase, NewFileShareUsecase, NewLogUsecase, NewMonitorUsecase,
|
||||
NewNotifyUsecase, NewProjectUsecase, NewSafeUsecase, NewScanEventUsecase,
|
||||
NewSettingUsecase, NewSSHUsecase, NewTamperUsecase, NewTaskUsecase,
|
||||
NewTemplateUsecase, NewUserUsecase, NewUserPasskeyUsecase,
|
||||
NewUserTokenUsecase, NewWebHookUsecase, NewWebsiteUsecase,
|
||||
NewWebsiteStatUsecase,
|
||||
)
|
||||
|
||||
@@ -72,7 +72,7 @@ func (uc *CacheUsecase) UpdateApps() error {
|
||||
|
||||
// 去除本地不存在的应用
|
||||
*remote = slices.Clip(slices.DeleteFunc(*remote, func(item *api.App) bool {
|
||||
return !slices.Contains(apploader.Slugs(), item.Slug)
|
||||
return !slices.Contains(apploader.SupportedSlugs(), item.Slug)
|
||||
}))
|
||||
|
||||
encoded, err := json.Marshal(remote)
|
||||
|
||||
@@ -12,7 +12,6 @@ import (
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
mholtacme "github.com/mholt/acmez/v3/acme"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/internal/request"
|
||||
@@ -69,12 +68,12 @@ type CertUsecase struct {
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
func NewCertUsecase(i do.Injector) (*CertUsecase, error) {
|
||||
func NewCertUsecase(t *gotext.Locale, log *slog.Logger, certRepo CertRepo, settingRepo SettingRepo) (*CertUsecase, error) {
|
||||
return &CertUsecase{
|
||||
repo: do.MustInvoke[CertRepo](i),
|
||||
setting: do.MustInvoke[SettingRepo](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
repo: certRepo,
|
||||
setting: settingRepo,
|
||||
t: t,
|
||||
log: log,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/request"
|
||||
"github.com/acepanel/panel/v3/pkg/acme"
|
||||
@@ -47,12 +46,12 @@ type CertAccountUsecase struct {
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
func NewCertAccountUsecase(i do.Injector) (*CertAccountUsecase, error) {
|
||||
func NewCertAccountUsecase(t *gotext.Locale, log *slog.Logger, certAccountRepo CertAccountRepo, userRepo UserRepo) (*CertAccountUsecase, error) {
|
||||
return &CertAccountUsecase{
|
||||
repo: do.MustInvoke[CertAccountRepo](i),
|
||||
userRepo: do.MustInvoke[UserRepo](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
repo: certAccountRepo,
|
||||
userRepo: userRepo,
|
||||
t: t,
|
||||
log: log,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"log/slog"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/request"
|
||||
"github.com/acepanel/panel/v3/pkg/db"
|
||||
@@ -49,13 +48,13 @@ type DatabaseUsecase struct {
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
func NewDatabaseUsecase(i do.Injector) (*DatabaseUsecase, error) {
|
||||
func NewDatabaseUsecase(databaseUserUsecase *DatabaseUserUsecase, t *gotext.Locale, log *slog.Logger, databaseRepo DatabaseRepo, databaseServerRepo DatabaseServerRepo) (*DatabaseUsecase, error) {
|
||||
return &DatabaseUsecase{
|
||||
repo: do.MustInvoke[DatabaseRepo](i),
|
||||
server: do.MustInvoke[DatabaseServerRepo](i),
|
||||
user: do.MustInvoke[*DatabaseUserUsecase](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
repo: databaseRepo,
|
||||
server: databaseServerRepo,
|
||||
user: databaseUserUsecase,
|
||||
t: t,
|
||||
log: log,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package biz
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/request"
|
||||
"github.com/acepanel/panel/v3/pkg/db"
|
||||
)
|
||||
|
||||
@@ -2,6 +2,7 @@ package biz
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/request"
|
||||
"github.com/acepanel/panel/v3/pkg/db"
|
||||
)
|
||||
|
||||
@@ -10,7 +10,6 @@ import (
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/libtnb/utils/crypt"
|
||||
"github.com/samber/do/v2"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
@@ -93,11 +92,11 @@ type DatabaseServerUsecase struct {
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
func NewDatabaseServerUsecase(i do.Injector) (*DatabaseServerUsecase, error) {
|
||||
func NewDatabaseServerUsecase(t *gotext.Locale, log *slog.Logger, databaseServerRepo DatabaseServerRepo) (*DatabaseServerUsecase, error) {
|
||||
return &DatabaseServerUsecase{
|
||||
repo: do.MustInvoke[DatabaseServerRepo](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
repo: databaseServerRepo,
|
||||
t: t,
|
||||
log: log,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/libtnb/utils/crypt"
|
||||
"github.com/samber/do/v2"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
@@ -86,11 +85,11 @@ type DatabaseUserUsecase struct {
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
func NewDatabaseUserUsecase(i do.Injector) (*DatabaseUserUsecase, error) {
|
||||
func NewDatabaseUserUsecase(log *slog.Logger, databaseServerRepo DatabaseServerRepo, databaseUserRepo DatabaseUserRepo) (*DatabaseUserUsecase, error) {
|
||||
return &DatabaseUserUsecase{
|
||||
repo: do.MustInvoke[DatabaseUserRepo](i),
|
||||
server: do.MustInvoke[DatabaseServerRepo](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
repo: databaseUserRepo,
|
||||
server: databaseServerRepo,
|
||||
log: log,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"slices"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/pkg/api"
|
||||
@@ -28,12 +27,12 @@ type EnvironmentUsecase struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewEnvironmentUsecase(i do.Injector) (*EnvironmentUsecase, error) {
|
||||
func NewEnvironmentUsecase(t *gotext.Locale, cacheRepo CacheRepo, environmentRepo EnvironmentRepo, taskRepo TaskRepo) (*EnvironmentUsecase, error) {
|
||||
return &EnvironmentUsecase{
|
||||
repo: do.MustInvoke[EnvironmentRepo](i),
|
||||
cache: do.MustInvoke[CacheRepo](i),
|
||||
task: do.MustInvoke[TaskRepo](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
repo: environmentRepo,
|
||||
cache: cacheRepo,
|
||||
task: taskRepo,
|
||||
t: t,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -5,8 +5,6 @@ import (
|
||||
"log/slog"
|
||||
"time"
|
||||
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/request"
|
||||
)
|
||||
|
||||
@@ -35,10 +33,10 @@ type FileShareUsecase struct {
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
func NewFileShareUsecase(i do.Injector) (*FileShareUsecase, error) {
|
||||
func NewFileShareUsecase(log *slog.Logger, fileShareRepo FileShareRepo) (*FileShareUsecase, error) {
|
||||
return &FileShareUsecase{
|
||||
repo: do.MustInvoke[FileShareRepo](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
repo: fileShareRepo,
|
||||
log: log,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@ import (
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/libtnb/utils/crypt"
|
||||
"github.com/samber/do/v2"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
@@ -98,12 +97,12 @@ type NotifyUsecase struct {
|
||||
pending chan struct{}
|
||||
}
|
||||
|
||||
func NewNotifyUsecase(i do.Injector) (*NotifyUsecase, error) {
|
||||
func NewNotifyUsecase(t *gotext.Locale, log *slog.Logger, notifyChannelRepo NotifyChannelRepo, settingRepo SettingRepo) (*NotifyUsecase, error) {
|
||||
return &NotifyUsecase{
|
||||
repo: do.MustInvoke[NotifyChannelRepo](i),
|
||||
setting: do.MustInvoke[SettingRepo](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
repo: notifyChannelRepo,
|
||||
setting: settingRepo,
|
||||
log: log,
|
||||
t: t,
|
||||
pending: make(chan struct{}, notifyMaxPending),
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/samber/lo"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/request"
|
||||
@@ -45,11 +44,11 @@ type ProjectUsecase struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewProjectUsecase(i do.Injector) (*ProjectUsecase, error) {
|
||||
func NewProjectUsecase(t *gotext.Locale, log *slog.Logger, projectRepo ProjectRepo) (*ProjectUsecase, error) {
|
||||
return &ProjectUsecase{
|
||||
repo: do.MustInvoke[ProjectRepo](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
repo: projectRepo,
|
||||
log: log,
|
||||
t: t,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
@@ -100,12 +99,12 @@ type SettingUsecase struct {
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
func NewSettingUsecase(i do.Injector) (*SettingUsecase, error) {
|
||||
func NewSettingUsecase(t *gotext.Locale, log *slog.Logger, settingRepo SettingRepo, taskRepo TaskRepo) (*SettingUsecase, error) {
|
||||
return &SettingUsecase{
|
||||
repo: do.MustInvoke[SettingRepo](i),
|
||||
task: do.MustInvoke[TaskRepo](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
repo: settingRepo,
|
||||
task: taskRepo,
|
||||
t: t,
|
||||
log: log,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"github.com/acepanel/panel/v3/pkg/tamper"
|
||||
@@ -78,13 +77,13 @@ type TamperUsecase struct {
|
||||
drainC chan struct{}
|
||||
}
|
||||
|
||||
func NewTamperUsecase(i do.Injector) (*TamperUsecase, error) {
|
||||
func NewTamperUsecase(notifyUsecase *NotifyUsecase, settingUsecase *SettingUsecase, t *gotext.Locale, log *slog.Logger, tamperRepo TamperRepo) (*TamperUsecase, error) {
|
||||
return &TamperUsecase{
|
||||
repo: do.MustInvoke[TamperRepo](i),
|
||||
setting: do.MustInvoke[*SettingUsecase](i),
|
||||
notify: do.MustInvoke[*NotifyUsecase](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
repo: tamperRepo,
|
||||
setting: settingUsecase,
|
||||
notify: notifyUsecase,
|
||||
log: log,
|
||||
t: t,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -138,7 +137,8 @@ func (uc *TamperUsecase) SaveSetting(s *TamperSetting) error {
|
||||
}
|
||||
|
||||
// Rules 规则管理
|
||||
func (uc *TamperUsecase) ListRules() ([]*TamperRule, error) { return uc.repo.ListRules() }
|
||||
func (uc *TamperUsecase) ListRules() ([]*TamperRule, error) { return uc.repo.ListRules() }
|
||||
|
||||
func (uc *TamperUsecase) GetRule(id uint) (*TamperRule, error) { return uc.repo.GetRule(id) }
|
||||
|
||||
func (uc *TamperUsecase) CreateRule(rule *TamperRule) error {
|
||||
@@ -168,6 +168,7 @@ func (uc *TamperUsecase) ListLogs(page, limit uint) ([]*TamperLog, int64, error)
|
||||
uc.FlushLogs()
|
||||
return uc.repo.ListLogs(page, limit)
|
||||
}
|
||||
|
||||
func (uc *TamperUsecase) ClearLogs() error { return uc.repo.ClearLogs() }
|
||||
|
||||
// buildConfig 从设置与规则构造运行配置
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"path/filepath"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/pkg/api"
|
||||
@@ -27,11 +26,11 @@ type TemplateUsecase struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewTemplateUsecase(i do.Injector) (*TemplateUsecase, error) {
|
||||
func NewTemplateUsecase(t *gotext.Locale, cacheRepo CacheRepo, templateRepo TemplateRepo) (*TemplateUsecase, error) {
|
||||
return &TemplateUsecase{
|
||||
repo: do.MustInvoke[TemplateRepo](i),
|
||||
cache: do.MustInvoke[CacheRepo](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
repo: templateRepo,
|
||||
cache: cacheRepo,
|
||||
t: t,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
@@ -46,11 +45,11 @@ type UserUsecase struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewUserUsecase(i do.Injector) (*UserUsecase, error) {
|
||||
func NewUserUsecase(t *gotext.Locale, log *slog.Logger, userRepo UserRepo) (*UserUsecase, error) {
|
||||
return &UserUsecase{
|
||||
repo: do.MustInvoke[UserRepo](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
repo: userRepo,
|
||||
log: log,
|
||||
t: t,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/libtnb/utils/str"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/request"
|
||||
)
|
||||
@@ -43,11 +42,11 @@ type WebHookUsecase struct {
|
||||
t *gotext.Locale
|
||||
}
|
||||
|
||||
func NewWebHookUsecase(i do.Injector) (*WebHookUsecase, error) {
|
||||
func NewWebHookUsecase(t *gotext.Locale, log *slog.Logger, webHookRepo WebHookRepo) (*WebHookUsecase, error) {
|
||||
return &WebHookUsecase{
|
||||
repo: do.MustInvoke[WebHookRepo](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
repo: webHookRepo,
|
||||
log: log,
|
||||
t: t,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
+11
-12
@@ -11,7 +11,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/request"
|
||||
@@ -79,18 +78,18 @@ type WebsiteUsecase struct {
|
||||
stat *WebsiteStatUsecase
|
||||
}
|
||||
|
||||
func NewWebsiteUsecase(i do.Injector) (*WebsiteUsecase, error) {
|
||||
func NewWebsiteUsecase(certAccountUsecase *CertAccountUsecase, certUsecase *CertUsecase, databaseUsecase *DatabaseUsecase, databaseUserUsecase *DatabaseUserUsecase, tamperUsecase *TamperUsecase, websiteStatUsecase *WebsiteStatUsecase, t *gotext.Locale, log *slog.Logger, databaseServerRepo DatabaseServerRepo, websiteRepo WebsiteRepo) (*WebsiteUsecase, error) {
|
||||
return &WebsiteUsecase{
|
||||
repo: do.MustInvoke[WebsiteRepo](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
cert: do.MustInvoke[*CertUsecase](i),
|
||||
certAccount: do.MustInvoke[*CertAccountUsecase](i),
|
||||
database: do.MustInvoke[*DatabaseUsecase](i),
|
||||
databaseUser: do.MustInvoke[*DatabaseUserUsecase](i),
|
||||
databaseServer: do.MustInvoke[DatabaseServerRepo](i),
|
||||
tamper: do.MustInvoke[*TamperUsecase](i),
|
||||
stat: do.MustInvoke[*WebsiteStatUsecase](i),
|
||||
repo: websiteRepo,
|
||||
log: log,
|
||||
t: t,
|
||||
cert: certUsecase,
|
||||
certAccount: certAccountUsecase,
|
||||
database: databaseUsecase,
|
||||
databaseUser: databaseUserUsecase,
|
||||
databaseServer: databaseServerRepo,
|
||||
tamper: tamperUsecase,
|
||||
stat: websiteStatUsecase,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package bootstrap
|
||||
|
||||
import (
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/apps/apache"
|
||||
"github.com/acepanel/panel/v3/internal/apps/clickhouse"
|
||||
"github.com/acepanel/panel/v3/internal/apps/codeserver"
|
||||
@@ -37,40 +35,8 @@ import (
|
||||
"github.com/acepanel/panel/v3/pkg/apploader"
|
||||
)
|
||||
|
||||
func NewLoader(i do.Injector) (*apploader.Loader, error) {
|
||||
func NewLoader(apacheApp *apache.App, clickhouseApp *clickhouse.App, codeserverApp *codeserver.App, dockerApp *docker.App, elasticsearchApp *elasticsearch.App, fail2banApp *fail2ban.App, frpApp *frp.App, giteaApp *gitea.App, grafanaApp *grafana.App, kafkaApp *kafka.App, mariadbApp *mariadb.App, memcachedApp *memcached.App, minioApp *minio.App, mongodbApp *mongodb.App, mysqlApp *mysql.App, nginxApp *nginx.App, openrestyApp *openresty.App, opensearchApp *opensearch.App, perconaApp *percona.App, pgadminApp *pgadmin.App, phpmyadminApp *phpmyadmin.App, podmanApp *podman.App, postgresqlApp *postgresql.App, prometheusApp *prometheus.App, pureftpdApp *pureftpd.App, redisApp *redis.App, rocketmqApp *rocketmq.App, rsyncApp *rsync.App, s3fsApp *s3fs.App, supervisorApp *supervisor.App, valkeyApp *valkey.App) (*apploader.Loader, error) {
|
||||
loader := new(apploader.Loader)
|
||||
loader.Add(
|
||||
do.MustInvoke[*apache.App](i),
|
||||
do.MustInvoke[*clickhouse.App](i),
|
||||
do.MustInvoke[*codeserver.App](i),
|
||||
do.MustInvoke[*docker.App](i),
|
||||
do.MustInvoke[*elasticsearch.App](i),
|
||||
do.MustInvoke[*fail2ban.App](i),
|
||||
do.MustInvoke[*frp.App](i),
|
||||
do.MustInvoke[*gitea.App](i),
|
||||
do.MustInvoke[*grafana.App](i),
|
||||
do.MustInvoke[*kafka.App](i),
|
||||
do.MustInvoke[*mariadb.App](i),
|
||||
do.MustInvoke[*memcached.App](i),
|
||||
do.MustInvoke[*minio.App](i),
|
||||
do.MustInvoke[*mongodb.App](i),
|
||||
do.MustInvoke[*mysql.App](i),
|
||||
do.MustInvoke[*nginx.App](i),
|
||||
do.MustInvoke[*openresty.App](i),
|
||||
do.MustInvoke[*opensearch.App](i),
|
||||
do.MustInvoke[*percona.App](i),
|
||||
do.MustInvoke[*pgadmin.App](i),
|
||||
do.MustInvoke[*phpmyadmin.App](i),
|
||||
do.MustInvoke[*podman.App](i),
|
||||
do.MustInvoke[*postgresql.App](i),
|
||||
do.MustInvoke[*prometheus.App](i),
|
||||
do.MustInvoke[*pureftpd.App](i),
|
||||
do.MustInvoke[*redis.App](i),
|
||||
do.MustInvoke[*rocketmq.App](i),
|
||||
do.MustInvoke[*rsync.App](i),
|
||||
do.MustInvoke[*s3fs.App](i),
|
||||
do.MustInvoke[*supervisor.App](i),
|
||||
do.MustInvoke[*valkey.App](i),
|
||||
)
|
||||
loader.Add(apacheApp, clickhouseApp, codeserverApp, dockerApp, elasticsearchApp, fail2banApp, frpApp, giteaApp, grafanaApp, kafkaApp, mariadbApp, memcachedApp, minioApp, mongodbApp, mysqlApp, nginxApp, openrestyApp, opensearchApp, perconaApp, pgadminApp, phpmyadminApp, podmanApp, postgresqlApp, prometheusApp, pureftpdApp, redisApp, rocketmqApp, rsyncApp, s3fsApp, supervisorApp, valkeyApp)
|
||||
return loader, nil
|
||||
}
|
||||
|
||||
@@ -1,31 +1,29 @@
|
||||
package bootstrap
|
||||
|
||||
import (
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/google/wire"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/middleware"
|
||||
"github.com/acepanel/panel/v3/pkg/websitestat"
|
||||
)
|
||||
|
||||
// Package 装配基础设施层。
|
||||
var Package = do.Package(
|
||||
do.Lazy(NewConf),
|
||||
do.Lazy(NewT),
|
||||
do.Lazy(NewLogger),
|
||||
do.Lazy(NewSlog),
|
||||
do.Lazy(NewDB),
|
||||
do.Lazy(NewMigrate),
|
||||
do.Lazy(NewSession),
|
||||
do.Lazy(NewRunner),
|
||||
do.Lazy(NewValidator),
|
||||
do.Lazy(middleware.NewMiddlewares),
|
||||
do.Lazy(NewLoader),
|
||||
do.Lazy(NewRouter),
|
||||
do.Lazy(NewTLSReloader),
|
||||
do.Lazy(NewHttp),
|
||||
do.Lazy(NewCron),
|
||||
do.Lazy(NewCli),
|
||||
do.Lazy(func(i do.Injector) (*websitestat.Aggregator, error) {
|
||||
return websitestat.NewAggregator(), nil
|
||||
}),
|
||||
// ProviderSet 装配基础设施层
|
||||
var ProviderSet = wire.NewSet(
|
||||
NewConf,
|
||||
NewT,
|
||||
NewLogger,
|
||||
NewSlog,
|
||||
NewDB,
|
||||
NewMigrate,
|
||||
NewSession,
|
||||
NewRunner,
|
||||
NewValidator,
|
||||
middleware.NewMiddlewares,
|
||||
NewLoader,
|
||||
NewRouter,
|
||||
NewTLSReloader,
|
||||
NewHttp,
|
||||
NewCron,
|
||||
NewCli,
|
||||
websitestat.NewAggregator,
|
||||
)
|
||||
|
||||
@@ -4,15 +4,12 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/internal/command"
|
||||
)
|
||||
|
||||
func NewCli(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func NewCli(t *gotext.Locale, commands []*cli.Command) (*cli.Command, error) {
|
||||
|
||||
cli.RootCommandHelpTemplate = strings.ReplaceAll(cli.RootCommandHelpTemplate, "NAME", t.Get("NAME"))
|
||||
cli.RootCommandHelpTemplate = strings.ReplaceAll(cli.RootCommandHelpTemplate, "USAGE", t.Get("USAGE"))
|
||||
@@ -37,15 +34,10 @@ func NewCli(i do.Injector) (*cli.Command, error) {
|
||||
cli.RootCommandHelpTemplate += "\n" + t.Get("Forum:https://tom.moe")
|
||||
cli.RootCommandHelpTemplate += "\n" + t.Get("QQ Group:12370907") + "\n"
|
||||
|
||||
cmds, err := command.Commands(i)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &cli.Command{
|
||||
Name: "acepanel",
|
||||
Usage: t.Get("AcePanel CLI Tool"),
|
||||
Version: app.Version,
|
||||
Commands: cmds,
|
||||
Commands: commands,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -5,13 +5,11 @@ import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/pkg/config"
|
||||
)
|
||||
|
||||
func NewConf(i do.Injector) (*config.Config, error) {
|
||||
func NewConf() (*config.Config, error) {
|
||||
conf, err := config.Load()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -7,24 +7,17 @@ import (
|
||||
|
||||
"github.com/libtnb/cron"
|
||||
"github.com/libtnb/cron/wrap"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/job"
|
||||
"github.com/acepanel/panel/v3/internal/registry"
|
||||
)
|
||||
|
||||
func NewCron(i do.Injector) (*cron.Cron, error) {
|
||||
func NewCron(log *slog.Logger, jobs []job.Job) (*cron.Cron, error) {
|
||||
// 面板任务均为 5 段表达式,不启用 WithSecondsField
|
||||
c := cron.New(
|
||||
cron.WithLogger(do.MustInvoke[*slog.Logger](i)),
|
||||
cron.WithLogger(log),
|
||||
cron.WithChain(wrap.Recover(), wrap.SkipIfRunning()),
|
||||
)
|
||||
|
||||
// 收集全部任务贡献并注册到调度器
|
||||
jobs, err := registry.Collect[job.Job](i, job.Prefix)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, j := range jobs {
|
||||
id, err := c.Add(j.Spec, j.Task)
|
||||
if err != nil {
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
"github.com/libtnb/logrotate"
|
||||
"github.com/libtnb/sqlite"
|
||||
sloggorm "github.com/orandin/slog-gorm"
|
||||
"github.com/samber/do/v2"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
@@ -17,8 +16,7 @@ import (
|
||||
"github.com/acepanel/panel/v3/pkg/config"
|
||||
)
|
||||
|
||||
func NewDB(i do.Injector) (*gorm.DB, error) {
|
||||
conf := do.MustInvoke[*config.Config](i)
|
||||
func NewDB(conf *config.Config) (*gorm.DB, error) {
|
||||
|
||||
// db 日志写入轮转文件
|
||||
w, err := logrotate.New(filepath.Join(app.Root, "panel/storage/logs/db.log"),
|
||||
@@ -58,8 +56,8 @@ func NewDB(i do.Injector) (*gorm.DB, error) {
|
||||
return db, nil
|
||||
}
|
||||
|
||||
func NewMigrate(i do.Injector) (*gormigrate.Gormigrate, error) {
|
||||
db := do.MustInvoke[*gorm.DB](i)
|
||||
func NewMigrate(db *gorm.DB) (*gormigrate.Gormigrate, error) {
|
||||
|
||||
return gormigrate.New(db, &gormigrate.Options{
|
||||
UseTransaction: true, // Note: MySQL not support DDL transaction
|
||||
}, migration.Migrations), nil
|
||||
|
||||
+12
-21
@@ -17,7 +17,6 @@ import (
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/libtnb/validator"
|
||||
"github.com/libtnb/validator/contrib/openapi"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/internal/middleware"
|
||||
@@ -28,27 +27,20 @@ import (
|
||||
"github.com/acepanel/panel/v3/pkg/tlscert"
|
||||
)
|
||||
|
||||
func NewRouter(i do.Injector) (*chi.Mux, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
mws := do.MustInvoke[*middleware.Middlewares](i)
|
||||
conf := do.MustInvoke[*config.Config](i)
|
||||
loader := do.MustInvoke[*apploader.Loader](i)
|
||||
func NewRouter(loader *apploader.Loader, conf *config.Config, t *gotext.Locale, middlewares *middleware.Middlewares, v *validator.Validator, endpoints []route.Endpoints) (*chi.Mux, error) {
|
||||
mws := middlewares
|
||||
|
||||
// 供 service.Bind / route.SpecJSON 使用
|
||||
validator.SetDefault(do.MustInvoke[*validator.Validator](i))
|
||||
validator.SetDefault(v)
|
||||
|
||||
// 数据驱动的登录白名单
|
||||
public, err := route.PublicPaths(i)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
public := route.PublicPaths(endpoints)
|
||||
|
||||
r := chi.NewRouter()
|
||||
r.Use(mws.Globals(t, r, public)...)
|
||||
|
||||
// 注册各域路由
|
||||
if err := route.HTTP(i, r); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
route.HTTP(conf, endpoints, r)
|
||||
|
||||
// 动态应用子路由
|
||||
r.Route("/api/apps", func(r chi.Router) {
|
||||
@@ -57,7 +49,7 @@ func NewRouter(i do.Injector) (*chi.Mux, error) {
|
||||
|
||||
// 仅调试模式挂载 OpenAPI 文档
|
||||
if conf.App.Debug {
|
||||
spec, err := route.SpecJSON(i, "AcePanel")
|
||||
spec, err := route.SpecJSON(endpoints, "AcePanel")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -86,8 +78,8 @@ func NewRouter(i do.Injector) (*chi.Mux, error) {
|
||||
return r, nil
|
||||
}
|
||||
|
||||
func NewTLSReloader(i do.Injector) (*tlscert.Reloader, error) {
|
||||
conf := do.MustInvoke[*config.Config](i)
|
||||
func NewTLSReloader(conf *config.Config) (*tlscert.Reloader, error) {
|
||||
|
||||
if !conf.HTTP.IsHTTPS() {
|
||||
return nil, nil
|
||||
}
|
||||
@@ -101,10 +93,9 @@ func NewTLSReloader(i do.Injector) (*tlscert.Reloader, error) {
|
||||
return reloader, nil
|
||||
}
|
||||
|
||||
func NewHttp(i do.Injector) (*hlfhr.Server, error) {
|
||||
conf := do.MustInvoke[*config.Config](i)
|
||||
mux := do.MustInvoke[*chi.Mux](i)
|
||||
reloader := do.MustInvoke[*tlscert.Reloader](i)
|
||||
func NewHttp(router *chi.Mux, conf *config.Config, reloader *tlscert.Reloader) (*hlfhr.Server, error) {
|
||||
|
||||
mux := router
|
||||
|
||||
srv := hlfhr.New(&http.Server{
|
||||
Addr: fmt.Sprintf(":%d", conf.HTTP.Port),
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/libtnb/logrotate"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/app"
|
||||
"github.com/acepanel/panel/v3/pkg/config"
|
||||
@@ -14,17 +13,10 @@ import (
|
||||
|
||||
type Logger struct {
|
||||
*slog.Logger
|
||||
close func() error
|
||||
}
|
||||
|
||||
func (l *Logger) Shutdown() error {
|
||||
return l.close()
|
||||
}
|
||||
|
||||
// NewLogger 构建写入轮转文件的应用日志。
|
||||
func NewLogger(i do.Injector) (*Logger, error) {
|
||||
conf := do.MustInvoke[*config.Config](i)
|
||||
|
||||
func NewLogger(conf *config.Config) (*Logger, func(), error) {
|
||||
w, err := logrotate.New(filepath.Join(app.Root, "panel/storage/logs/app.log"),
|
||||
logrotate.WithMaxSize(10*logrotate.MB),
|
||||
logrotate.WithMaxAge(30*logrotate.Day),
|
||||
@@ -33,7 +25,7 @@ func NewLogger(i do.Injector) (*Logger, error) {
|
||||
logrotate.WithLocation(time.Local),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
level := slog.LevelInfo
|
||||
@@ -46,10 +38,11 @@ func NewLogger(i do.Injector) (*Logger, error) {
|
||||
}))
|
||||
slog.SetDefault(log)
|
||||
|
||||
return &Logger{Logger: log, close: w.Close}, nil
|
||||
cleanup := func() { _ = w.Close() }
|
||||
return &Logger{Logger: log}, cleanup, nil
|
||||
}
|
||||
|
||||
// NewSlog 解包出纯 *slog.Logger 供应用其余部分使用。
|
||||
func NewSlog(i do.Injector) (*slog.Logger, error) {
|
||||
return do.MustInvoke[*Logger](i).Logger, nil
|
||||
func NewSlog(logger *Logger) *slog.Logger {
|
||||
return logger.Logger
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import (
|
||||
"log/slog"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/biz"
|
||||
@@ -13,11 +12,6 @@ import (
|
||||
)
|
||||
|
||||
// NewRunner 创建任务运行器
|
||||
func NewRunner(i do.Injector) (types.TaskRunner, error) {
|
||||
return taskqueue.NewRunner(
|
||||
do.MustInvoke[*gorm.DB](i),
|
||||
do.MustInvoke[*slog.Logger](i),
|
||||
do.MustInvoke[*biz.NotifyUsecase](i),
|
||||
do.MustInvoke[*gotext.Locale](i),
|
||||
), nil
|
||||
func NewRunner(notifyUsecase *biz.NotifyUsecase, db *gorm.DB, t *gotext.Locale, log *slog.Logger) (types.TaskRunner, error) {
|
||||
return taskqueue.NewRunner(db, log, notifyUsecase, t), nil
|
||||
}
|
||||
|
||||
@@ -5,29 +5,26 @@ import (
|
||||
|
||||
"github.com/libtnb/gormstore"
|
||||
"github.com/libtnb/sessions"
|
||||
"github.com/samber/do/v2"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/acepanel/panel/v3/pkg/config"
|
||||
)
|
||||
|
||||
func NewSession(i do.Injector) (*sessions.Manager, error) {
|
||||
conf := do.MustInvoke[*config.Config](i)
|
||||
|
||||
func NewSession(conf *config.Config, db *gorm.DB, log *slog.Logger) (*sessions.Manager, error) {
|
||||
// initialize session manager
|
||||
manager, err := sessions.NewManager(&sessions.ManagerOptions{
|
||||
Key: conf.App.Key,
|
||||
Lifetime: int(conf.Session.Lifetime),
|
||||
GcInterval: 5,
|
||||
DisableDefaultDriver: true,
|
||||
Logger: do.MustInvoke[*slog.Logger](i),
|
||||
Logger: log,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// extend gorm store driver
|
||||
store := gormstore.New(do.MustInvoke[*gorm.DB](i))
|
||||
store := gormstore.New(db)
|
||||
if err = manager.Extend("default", store); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -2,14 +2,12 @@ package bootstrap
|
||||
|
||||
import (
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
|
||||
"github.com/acepanel/panel/v3/pkg/config"
|
||||
"github.com/acepanel/panel/v3/pkg/embed"
|
||||
)
|
||||
|
||||
func NewT(i do.Injector) (*gotext.Locale, error) {
|
||||
conf := do.MustInvoke[*config.Config](i)
|
||||
func NewT(conf *config.Config) (*gotext.Locale, error) {
|
||||
|
||||
l := gotext.NewLocaleFSWithPath(conf.App.Locale, embed.LocalesFS, "locales")
|
||||
l.AddDomain("backend")
|
||||
|
||||
@@ -3,7 +3,6 @@ package bootstrap
|
||||
import (
|
||||
"github.com/libtnb/validator"
|
||||
"github.com/libtnb/validator/translations"
|
||||
"github.com/samber/do/v2"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/rule"
|
||||
@@ -11,8 +10,7 @@ import (
|
||||
)
|
||||
|
||||
// NewValidator 构建校验器
|
||||
func NewValidator(i do.Injector) (*validator.Validator, error) {
|
||||
conf := do.MustInvoke[*config.Config](i)
|
||||
func NewValidator(conf *config.Config, db *gorm.DB) (*validator.Validator, error) {
|
||||
|
||||
opts := []validator.Option{validator.WithStrictRequired()}
|
||||
switch conf.App.Locale {
|
||||
@@ -23,7 +21,7 @@ func NewValidator(i do.Injector) (*validator.Validator, error) {
|
||||
}
|
||||
|
||||
v := validator.NewValidator(opts...)
|
||||
rule.RegisterRules(v, do.MustInvoke[*gorm.DB](i))
|
||||
rule.RegisterRules(v, db)
|
||||
|
||||
return v, nil
|
||||
}
|
||||
|
||||
@@ -4,15 +4,14 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
// AppCommand 应用管理命令组
|
||||
func AppCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func AppCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "app",
|
||||
Usage: t.Get("Application management"),
|
||||
@@ -21,21 +20,21 @@ func AppCommand(i do.Injector) (*cli.Command, error) {
|
||||
Name: "install",
|
||||
Usage: t.Get("Install application"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).AppInstall(ctx, cmd)
|
||||
return cliService.AppInstall(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "uninstall",
|
||||
Usage: t.Get("Uninstall application"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).AppUnInstall(ctx, cmd)
|
||||
return cliService.AppUnInstall(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "update",
|
||||
Usage: t.Get("Update application"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).AppUpdate(ctx, cmd)
|
||||
return cliService.AppUpdate(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -43,7 +42,7 @@ func AppCommand(i do.Injector) (*cli.Command, error) {
|
||||
Usage: t.Get("Add panel application mark (use only under guidance)"),
|
||||
Hidden: true,
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).AppWrite(ctx, cmd)
|
||||
return cliService.AppWrite(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -51,9 +50,9 @@ func AppCommand(i do.Injector) (*cli.Command, error) {
|
||||
Usage: t.Get("Remove panel application mark (use only under guidance)"),
|
||||
Hidden: true,
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).AppRemove(ctx, cmd)
|
||||
return cliService.AppRemove(ctx, cmd)
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,15 +4,14 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
// BackupCommand 数据备份命令组
|
||||
func BackupCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func BackupCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "backup",
|
||||
Usage: t.Get("Data backup"),
|
||||
@@ -34,7 +33,7 @@ func BackupCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).BackupWebsite(ctx, cmd)
|
||||
return cliService.BackupWebsite(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -60,7 +59,7 @@ func BackupCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).BackupDatabase(ctx, cmd)
|
||||
return cliService.BackupDatabase(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -80,7 +79,7 @@ func BackupCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).BackupPath(ctx, cmd)
|
||||
return cliService.BackupPath(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -88,7 +87,7 @@ func BackupCommand(i do.Injector) (*cli.Command, error) {
|
||||
Usage: t.Get("Backup panel"),
|
||||
Flags: []cli.Flag{},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).BackupPanel(ctx, cmd)
|
||||
return cliService.BackupPanel(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -120,9 +119,9 @@ func BackupCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).BackupClear(ctx, cmd)
|
||||
return cliService.BackupClear(ctx, cmd)
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
+34
-22
@@ -1,31 +1,43 @@
|
||||
package command
|
||||
|
||||
import (
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/google/wire"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/registry"
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
const Prefix = "commands:"
|
||||
var ProviderSet = wire.NewSet(Commands)
|
||||
|
||||
var Package = do.Package(
|
||||
do.LazyNamed(Prefix+"status", StatusCommand), do.LazyNamed(Prefix+"restart", RestartCommand),
|
||||
do.LazyNamed(Prefix+"stop", StopCommand), do.LazyNamed(Prefix+"start", StartCommand),
|
||||
do.LazyNamed(Prefix+"update", UpdateCommand), do.LazyNamed(Prefix+"sync", SyncCommand),
|
||||
do.LazyNamed(Prefix+"fix", FixCommand), do.LazyNamed(Prefix+"info", InfoCommand),
|
||||
do.LazyNamed(Prefix+"port", PortCommand), do.LazyNamed(Prefix+"sync-time", SyncTimeCommand),
|
||||
do.LazyNamed(Prefix+"clear-task", ClearTaskCommand), do.LazyNamed(Prefix+"init", InitCommand),
|
||||
do.LazyNamed(Prefix+"user", UserCommand), do.LazyNamed(Prefix+"https", HttpsCommand),
|
||||
do.LazyNamed(Prefix+"entrance", EntranceCommand), do.LazyNamed(Prefix+"bind-domain", BindDomainCommand),
|
||||
do.LazyNamed(Prefix+"bind-ip", BindIPCommand), do.LazyNamed(Prefix+"bind-ua", BindUACommand),
|
||||
do.LazyNamed(Prefix+"website", WebsiteCommand), do.LazyNamed(Prefix+"database", DatabaseCommand),
|
||||
do.LazyNamed(Prefix+"backup", BackupCommand), do.LazyNamed(Prefix+"restore", RestoreCommand),
|
||||
do.LazyNamed(Prefix+"cutoff", CutoffCommand), do.LazyNamed(Prefix+"cron", CronCommand),
|
||||
do.LazyNamed(Prefix+"app", AppCommand), do.LazyNamed(Prefix+"setting", SettingCommand),
|
||||
)
|
||||
|
||||
// Commands 收集全部命令贡献。
|
||||
func Commands(i do.Injector) ([]*cli.Command, error) {
|
||||
return registry.Collect[*cli.Command](i, Prefix)
|
||||
// Commands 组装全部 CLI 命令。
|
||||
func Commands(t *gotext.Locale, cliService *service.CliService) []*cli.Command {
|
||||
return []*cli.Command{
|
||||
StatusCommand(t, cliService),
|
||||
RestartCommand(t, cliService),
|
||||
StopCommand(t, cliService),
|
||||
StartCommand(t, cliService),
|
||||
UpdateCommand(t, cliService),
|
||||
SyncCommand(t, cliService),
|
||||
FixCommand(t, cliService),
|
||||
InfoCommand(t, cliService),
|
||||
PortCommand(t, cliService),
|
||||
SyncTimeCommand(t, cliService),
|
||||
ClearTaskCommand(t, cliService),
|
||||
InitCommand(t, cliService),
|
||||
UserCommand(t, cliService),
|
||||
HttpsCommand(t, cliService),
|
||||
EntranceCommand(t, cliService),
|
||||
BindDomainCommand(t, cliService),
|
||||
BindIPCommand(t, cliService),
|
||||
BindUACommand(t, cliService),
|
||||
WebsiteCommand(t, cliService),
|
||||
DatabaseCommand(t, cliService),
|
||||
BackupCommand(t, cliService),
|
||||
RestoreCommand(t, cliService),
|
||||
CutoffCommand(t, cliService),
|
||||
CronCommand(t, cliService),
|
||||
AppCommand(t, cliService),
|
||||
SettingCommand(t, cliService),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,15 +4,14 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
// CronCommand 计划任务命令组
|
||||
func CronCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func CronCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "cron",
|
||||
Usage: t.Get("Cron task"),
|
||||
@@ -34,9 +33,9 @@ func CronCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).CronFailed(ctx, cmd)
|
||||
return cliService.CronFailed(ctx, cmd)
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,15 +4,14 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
// CutoffCommand 日志切割命令组
|
||||
func CutoffCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func CutoffCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "cutoff",
|
||||
Usage: t.Get("Log rotation"),
|
||||
@@ -34,7 +33,7 @@ func CutoffCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).CutoffWebsite(ctx, cmd)
|
||||
return cliService.CutoffWebsite(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -54,7 +53,7 @@ func CutoffCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).CutoffContainer(ctx, cmd)
|
||||
return cliService.CutoffContainer(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -86,9 +85,9 @@ func CutoffCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).CutoffClear(ctx, cmd)
|
||||
return cliService.CutoffClear(ctx, cmd)
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,15 +4,14 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
// DatabaseCommand 数据库管理命令组
|
||||
func DatabaseCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func DatabaseCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "database",
|
||||
Usage: t.Get("Database management"),
|
||||
@@ -55,7 +54,7 @@ func DatabaseCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).DatabaseAddServer(ctx, cmd)
|
||||
return cliService.DatabaseAddServer(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -70,9 +69,9 @@ func DatabaseCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).DatabaseDeleteServer(ctx, cmd)
|
||||
return cliService.DatabaseDeleteServer(ctx, cmd)
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,15 +4,14 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
// EntranceCommand 访问入口管理命令组
|
||||
func EntranceCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func EntranceCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "entrance",
|
||||
Usage: t.Get("Operate AcePanel access entrance"),
|
||||
@@ -21,23 +20,23 @@ func EntranceCommand(i do.Injector) (*cli.Command, error) {
|
||||
Name: "on",
|
||||
Usage: t.Get("Enable access entrance"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).EntranceOn(ctx, cmd)
|
||||
return cliService.EntranceOn(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "off",
|
||||
Usage: t.Get("Disable access entrance"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).EntranceOff(ctx, cmd)
|
||||
return cliService.EntranceOff(ctx, cmd)
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// BindDomainCommand 域名绑定管理命令组
|
||||
func BindDomainCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func BindDomainCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "bind-domain",
|
||||
Usage: t.Get("Operate AcePanel domain binding"),
|
||||
@@ -46,16 +45,16 @@ func BindDomainCommand(i do.Injector) (*cli.Command, error) {
|
||||
Name: "off",
|
||||
Usage: t.Get("Disable domain binding"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).BindDomainOff(ctx, cmd)
|
||||
return cliService.BindDomainOff(ctx, cmd)
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// BindIPCommand IP 绑定管理命令组
|
||||
func BindIPCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func BindIPCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "bind-ip",
|
||||
Usage: t.Get("Operate AcePanel IP binding"),
|
||||
@@ -64,16 +63,16 @@ func BindIPCommand(i do.Injector) (*cli.Command, error) {
|
||||
Name: "off",
|
||||
Usage: t.Get("Disable IP binding"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).BindIPOff(ctx, cmd)
|
||||
return cliService.BindIPOff(ctx, cmd)
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// BindUACommand UA 绑定管理命令组
|
||||
func BindUACommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func BindUACommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "bind-ua",
|
||||
Usage: t.Get("Operate AcePanel UA binding"),
|
||||
@@ -82,9 +81,9 @@ func BindUACommand(i do.Injector) (*cli.Command, error) {
|
||||
Name: "off",
|
||||
Usage: t.Get("Disable UA binding"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).BindUAOff(ctx, cmd)
|
||||
return cliService.BindUAOff(ctx, cmd)
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,15 +4,14 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
// HttpsCommand 面板 HTTPS 管理命令组
|
||||
func HttpsCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func HttpsCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "https",
|
||||
Usage: t.Get("Operate AcePanel HTTPS"),
|
||||
@@ -21,23 +20,23 @@ func HttpsCommand(i do.Injector) (*cli.Command, error) {
|
||||
Name: "on",
|
||||
Usage: t.Get("Enable HTTPS"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).HTTPSOn(ctx, cmd)
|
||||
return cliService.HTTPSOn(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "off",
|
||||
Usage: t.Get("Disable HTTPS"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).HTTPSOff(ctx, cmd)
|
||||
return cliService.HTTPSOff(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "generate",
|
||||
Usage: t.Get("Obtain a free certificate or generate a self-signed certificate"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).HTTPSGenerate(ctx, cmd)
|
||||
return cliService.HTTPSGenerate(ctx, cmd)
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
+32
-33
@@ -4,51 +4,50 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
// UpdateCommand 更新面板
|
||||
func UpdateCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func UpdateCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "update",
|
||||
Usage: t.Get("Update AcePanel to the latest version"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).Update(ctx, cmd)
|
||||
return cliService.Update(ctx, cmd)
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// SyncCommand 同步云端缓存数据
|
||||
func SyncCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func SyncCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "sync",
|
||||
Usage: t.Get("Sync AcePanel cached data with cloud"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).Sync(ctx, cmd)
|
||||
return cliService.Sync(ctx, cmd)
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// FixCommand 修复升级问题
|
||||
func FixCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func FixCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "fix",
|
||||
Usage: t.Get("Fix AcePanel upgrade issues"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).Fix(ctx, cmd)
|
||||
return cliService.Fix(ctx, cmd)
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// InfoCommand 输出面板基础信息
|
||||
func InfoCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func InfoCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "info",
|
||||
Usage: t.Get("Output AcePanel basic information"),
|
||||
@@ -60,57 +59,57 @@ func InfoCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).Info(ctx, cmd)
|
||||
return cliService.Info(ctx, cmd)
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// PortCommand 修改监听端口
|
||||
func PortCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func PortCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "port",
|
||||
Usage: t.Get("Change the AcePanel listening port"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).Port(ctx, cmd)
|
||||
return cliService.Port(ctx, cmd)
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// SyncTimeCommand 通过 NTP 同步系统时间
|
||||
func SyncTimeCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func SyncTimeCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "sync-time",
|
||||
Usage: t.Get("Sync server time with NTP"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).SyncTime(ctx, cmd)
|
||||
return cliService.SyncTime(ctx, cmd)
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// ClearTaskCommand 清理卡住的任务队列
|
||||
func ClearTaskCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func ClearTaskCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "clear-task",
|
||||
Usage: t.Get("Clear all tasks in the task queue if they are stuck (use only under guidance)"),
|
||||
Hidden: true,
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).ClearTask(ctx, cmd)
|
||||
return cliService.ClearTask(ctx, cmd)
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// InitCommand 初始化面板
|
||||
func InitCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func InitCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "init",
|
||||
Usage: t.Get("Initialize AcePanel (use only under guidance)"),
|
||||
Hidden: true,
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).Init(ctx, cmd)
|
||||
return cliService.Init(ctx, cmd)
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,15 +4,14 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
// RestoreCommand 数据恢复命令组
|
||||
func RestoreCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func RestoreCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "restore",
|
||||
Usage: t.Get("Data restore"),
|
||||
@@ -35,7 +34,7 @@ func RestoreCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).RestoreWebsite(ctx, cmd)
|
||||
return cliService.RestoreWebsite(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -62,9 +61,9 @@ func RestoreCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).RestoreDatabase(ctx, cmd)
|
||||
return cliService.RestoreDatabase(ctx, cmd)
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
+16
-17
@@ -4,56 +4,55 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
// StatusCommand 查询服务状态
|
||||
func StatusCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func StatusCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "status",
|
||||
Usage: t.Get("Get AcePanel service status"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).Status(ctx, cmd)
|
||||
return cliService.Status(ctx, cmd)
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// RestartCommand 重启服务
|
||||
func RestartCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func RestartCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "restart",
|
||||
Usage: t.Get("Restart AcePanel service"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).Restart(ctx, cmd)
|
||||
return cliService.Restart(ctx, cmd)
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// StopCommand 停止服务
|
||||
func StopCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func StopCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "stop",
|
||||
Usage: t.Get("Stop AcePanel service"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).Stop(ctx, cmd)
|
||||
return cliService.Stop(ctx, cmd)
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// StartCommand 启动服务
|
||||
func StartCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func StartCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "start",
|
||||
Usage: t.Get("Start AcePanel service"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).Start(ctx, cmd)
|
||||
return cliService.Start(ctx, cmd)
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,15 +4,14 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
// SettingCommand 面板设置管理命令组
|
||||
func SettingCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func SettingCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "setting",
|
||||
Usage: t.Get("Setting management"),
|
||||
@@ -23,7 +22,7 @@ func SettingCommand(i do.Injector) (*cli.Command, error) {
|
||||
Usage: t.Get("Get panel setting (use only under guidance)"),
|
||||
Hidden: true,
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).GetSetting(ctx, cmd)
|
||||
return cliService.GetSetting(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -31,7 +30,7 @@ func SettingCommand(i do.Injector) (*cli.Command, error) {
|
||||
Usage: t.Get("Write panel setting (use only under guidance)"),
|
||||
Hidden: true,
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).WriteSetting(ctx, cmd)
|
||||
return cliService.WriteSetting(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -39,9 +38,9 @@ func SettingCommand(i do.Injector) (*cli.Command, error) {
|
||||
Usage: t.Get("Remove panel setting (use only under guidance)"),
|
||||
Hidden: true,
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).RemoveSetting(ctx, cmd)
|
||||
return cliService.RemoveSetting(ctx, cmd)
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,15 +4,14 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
// UserCommand 用户管理命令组
|
||||
func UserCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func UserCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "user",
|
||||
Usage: t.Get("Operate AcePanel users"),
|
||||
@@ -21,37 +20,37 @@ func UserCommand(i do.Injector) (*cli.Command, error) {
|
||||
Name: "list",
|
||||
Usage: t.Get("List all users"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).UserList(ctx, cmd)
|
||||
return cliService.UserList(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "username",
|
||||
Usage: t.Get("Change a user's username"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).UserName(ctx, cmd)
|
||||
return cliService.UserName(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "password",
|
||||
Usage: t.Get("Change a user's password"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).UserPassword(ctx, cmd)
|
||||
return cliService.UserPassword(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "2fa",
|
||||
Usage: t.Get("Toggle two-factor authentication for a user"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).UserTwoFA(ctx, cmd)
|
||||
return cliService.UserTwoFA(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "passkey",
|
||||
Usage: t.Get("Clear all passkeys for a user"),
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).UserPasskey(ctx, cmd)
|
||||
return cliService.UserPasskey(ctx, cmd)
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,15 +4,14 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/urfave/cli/v3"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/service"
|
||||
)
|
||||
|
||||
// WebsiteCommand 网站管理命令组
|
||||
func WebsiteCommand(i do.Injector) (*cli.Command, error) {
|
||||
t := do.MustInvoke[*gotext.Locale](i)
|
||||
func WebsiteCommand(t *gotext.Locale, cliService *service.CliService) *cli.Command {
|
||||
|
||||
return &cli.Command{
|
||||
Name: "website",
|
||||
Usage: t.Get("Website management"),
|
||||
@@ -49,7 +48,7 @@ func WebsiteCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).WebsiteCreate(ctx, cmd)
|
||||
return cliService.WebsiteCreate(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -64,7 +63,7 @@ func WebsiteCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).WebsiteRemove(ctx, cmd)
|
||||
return cliService.WebsiteRemove(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -79,7 +78,7 @@ func WebsiteCommand(i do.Injector) (*cli.Command, error) {
|
||||
},
|
||||
},
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).WebsiteDelete(ctx, cmd)
|
||||
return cliService.WebsiteDelete(ctx, cmd)
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -87,9 +86,9 @@ func WebsiteCommand(i do.Injector) (*cli.Command, error) {
|
||||
Usage: t.Get("Write website data (use only under guidance)"),
|
||||
Hidden: true,
|
||||
Action: func(ctx context.Context, cmd *cli.Command) error {
|
||||
return do.MustInvoke[*service.CliService](i).WebsiteWrite(ctx, cmd)
|
||||
return cliService.WebsiteWrite(ctx, cmd)
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/samber/lo"
|
||||
"gorm.io/gorm"
|
||||
|
||||
@@ -17,14 +16,14 @@ type alertRepo struct {
|
||||
statDB *gorm.DB // 网站统计独立库
|
||||
}
|
||||
|
||||
func NewAlertRepo(i do.Injector) (biz.AlertRepo, error) {
|
||||
func NewAlertRepo(db *gorm.DB) (biz.AlertRepo, error) {
|
||||
statDB, err := openDB("stat")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &alertRepo{
|
||||
db: do.MustInvoke[*gorm.DB](i),
|
||||
db: db,
|
||||
statDB: statDB,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@ import (
|
||||
"github.com/expr-lang/expr"
|
||||
"github.com/hashicorp/go-version"
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/spf13/cast"
|
||||
"gorm.io/gorm"
|
||||
|
||||
@@ -32,12 +31,12 @@ type appRepo struct {
|
||||
api *api.API
|
||||
}
|
||||
|
||||
func NewAppRepo(i do.Injector) (biz.AppRepo, error) {
|
||||
func NewAppRepo(conf *config.Config, db *gorm.DB, t *gotext.Locale, log *slog.Logger) (biz.AppRepo, error) {
|
||||
return &appRepo{
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
conf: do.MustInvoke[*config.Config](i),
|
||||
db: do.MustInvoke[*gorm.DB](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
t: t,
|
||||
conf: conf,
|
||||
db: db,
|
||||
log: log,
|
||||
api: api.NewAPI(app.Version, app.Locale),
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/samber/lo"
|
||||
"gorm.io/gorm"
|
||||
|
||||
@@ -40,15 +39,15 @@ type backupRepo struct {
|
||||
updating atomic.Bool // 面板升级进行中标志,防止并发触发
|
||||
}
|
||||
|
||||
func NewBackupRepo(i do.Injector) (biz.BackupRepo, error) {
|
||||
func NewBackupRepo(conf *config.Config, db *gorm.DB, t *gotext.Locale, log *slog.Logger, settingRepo biz.SettingRepo, websiteRepo biz.WebsiteRepo) (biz.BackupRepo, error) {
|
||||
return &backupRepo{
|
||||
hr: "+----------------------------------------------------",
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
conf: do.MustInvoke[*config.Config](i),
|
||||
db: do.MustInvoke[*gorm.DB](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
setting: do.MustInvoke[biz.SettingRepo](i),
|
||||
website: do.MustInvoke[biz.WebsiteRepo](i),
|
||||
t: t,
|
||||
conf: conf,
|
||||
db: db,
|
||||
log: log,
|
||||
setting: settingRepo,
|
||||
website: websiteRepo,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package data
|
||||
|
||||
import (
|
||||
"github.com/samber/do/v2"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/acepanel/panel/v3/internal/biz"
|
||||
@@ -11,9 +10,9 @@ type backupAccountRepo struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewBackupAccountRepo(i do.Injector) (biz.BackupAccountRepo, error) {
|
||||
func NewBackupAccountRepo(db *gorm.DB) (biz.BackupAccountRepo, error) {
|
||||
return &backupAccountRepo{
|
||||
db: do.MustInvoke[*gorm.DB](i),
|
||||
db: db,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ package data
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/samber/do/v2"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
|
||||
@@ -17,10 +16,10 @@ type cacheRepo struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewCacheRepo(i do.Injector) (biz.CacheRepo, error) {
|
||||
func NewCacheRepo(db *gorm.DB) (biz.CacheRepo, error) {
|
||||
return &cacheRepo{
|
||||
api: api.NewAPI(app.Version, app.Locale),
|
||||
db: do.MustInvoke[*gorm.DB](i),
|
||||
db: db,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
"github.com/samber/do/v2"
|
||||
"github.com/samber/lo"
|
||||
"gorm.io/gorm"
|
||||
|
||||
@@ -36,11 +35,11 @@ type certRepo struct {
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
func NewCertRepo(i do.Injector) (biz.CertRepo, error) {
|
||||
func NewCertRepo(db *gorm.DB, t *gotext.Locale, log *slog.Logger) (biz.CertRepo, error) {
|
||||
return &certRepo{
|
||||
t: do.MustInvoke[*gotext.Locale](i),
|
||||
db: do.MustInvoke[*gorm.DB](i),
|
||||
log: do.MustInvoke[*slog.Logger](i),
|
||||
t: t,
|
||||
db: db,
|
||||
log: log,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user