Files
gpt-load/internal/container/container.go
T
tbphp 7c30bbfd7b feat: Aggregate groups (#280)
* feat: Create Aggregate Group

* feat: Subgroup List

* refactor: Optimize code

* refactor: Frontend Optimization

* feat: ValidationEndpoint

* feat: Subgroup modification verification

* fix: Aggregate Grouping Editing Issue

* feat: Show Aggregate References

* feat: Filter duplicate prompts

* feat: Subgroup manager

* feat: Log aggregate

* feat: Group statistics

* fix: up url

* fix: Aggregate group config

* feat: Log add aggregate group

* fix: Cron filter group
2025-09-30 22:12:10 +08:00

121 lines
3.3 KiB
Go

// Package container provides a dependency injection container for the application.
package container
import (
"gpt-load/internal/app"
"gpt-load/internal/channel"
"gpt-load/internal/config"
"gpt-load/internal/db"
"gpt-load/internal/encryption"
"gpt-load/internal/handler"
"gpt-load/internal/httpclient"
"gpt-load/internal/keypool"
"gpt-load/internal/proxy"
"gpt-load/internal/router"
"gpt-load/internal/services"
"gpt-load/internal/store"
"gpt-load/internal/types"
"go.uber.org/dig"
)
// BuildContainer creates a new dependency injection container and provides all the application's services.
func BuildContainer() (*dig.Container, error) {
container := dig.New()
// Infrastructure Services
if err := container.Provide(config.NewManager); err != nil {
return nil, err
}
if err := container.Provide(func(configManager types.ConfigManager) (encryption.Service, error) {
return encryption.NewService(configManager.GetEncryptionKey())
}); err != nil {
return nil, err
}
if err := container.Provide(db.NewDB); err != nil {
return nil, err
}
if err := container.Provide(config.NewSystemSettingsManager); err != nil {
return nil, err
}
if err := container.Provide(store.NewStore); err != nil {
return nil, err
}
if err := container.Provide(httpclient.NewHTTPClientManager); err != nil {
return nil, err
}
if err := container.Provide(channel.NewFactory); err != nil {
return nil, err
}
// Business Services
if err := container.Provide(services.NewTaskService); err != nil {
return nil, err
}
if err := container.Provide(services.NewKeyManualValidationService); err != nil {
return nil, err
}
if err := container.Provide(services.NewKeyService); err != nil {
return nil, err
}
if err := container.Provide(services.NewKeyImportService); err != nil {
return nil, err
}
if err := container.Provide(services.NewKeyDeleteService); err != nil {
return nil, err
}
if err := container.Provide(services.NewLogService); err != nil {
return nil, err
}
if err := container.Provide(services.NewLogCleanupService); err != nil {
return nil, err
}
if err := container.Provide(services.NewRequestLogService); err != nil {
return nil, err
}
if err := container.Provide(services.NewSubGroupManager); err != nil {
return nil, err
}
if err := container.Provide(services.NewGroupManager); err != nil {
return nil, err
}
if err := container.Provide(services.NewGroupService); err != nil {
return nil, err
}
if err := container.Provide(services.NewAggregateGroupService); err != nil {
return nil, err
}
if err := container.Provide(keypool.NewProvider); err != nil {
return nil, err
}
if err := container.Provide(keypool.NewKeyValidator); err != nil {
return nil, err
}
if err := container.Provide(keypool.NewCronChecker); err != nil {
return nil, err
}
// Handlers
if err := container.Provide(handler.NewServer); err != nil {
return nil, err
}
if err := container.Provide(handler.NewCommonHandler); err != nil {
return nil, err
}
// Proxy & Router
if err := container.Provide(proxy.NewProxyServer); err != nil {
return nil, err
}
if err := container.Provide(router.NewRouter); err != nil {
return nil, err
}
// Application Layer
if err := container.Provide(app.NewApp); err != nil {
return nil, err
}
return container, nil
}