refactor(dep): make inventory clients true lazy singletons

The dep struct's client fields were checked for nil but never assigned,
so every call silently constructed a fresh client — dead code masquerading
as caching. Assign on first use, matching the established singleton
pattern (SettingClient, HashIDEncoder).

Also fixes the StoragePolicyClient doc comment (a copy-pasted ShareClient
text), normalizes 'Creates a new' wording to 'Get a singleton' for the
methods that now cache, and removes dead commented-out bootstrap code
from main.go.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
pull/3582/head
Tomas Dvorak 2 weeks ago
parent 98aeb063f5
commit 54a518c6a5

@ -72,9 +72,9 @@ type Dep interface {
SettingClient() inventory.SettingClient
// SettingProvider Get a singleton setting.Provider instance for access setting store in strong type.
SettingProvider() setting.Provider
// UserClient Creates a new inventory.UserClient instance for access DB user store.
// UserClient Get a singleton inventory.UserClient instance for access DB user store.
UserClient() inventory.UserClient
// GroupClient Creates a new inventory.GroupClient instance for access DB group store.
// GroupClient Get a singleton inventory.GroupClient instance for access DB group store.
GroupClient() inventory.GroupClient
// EmailClient Get a singleton email.Driver instance for sending emails.
EmailClient(ctx context.Context) email.Driver
@ -82,15 +82,15 @@ type Dep interface {
GeneralAuth() auth.Auth
// Shutdown the dependencies gracefully.
Shutdown(ctx context.Context) error
// FileClient Creates a new inventory.FileClient instance for access DB file store.
// FileClient Get a singleton inventory.FileClient instance for access DB file store.
FileClient() inventory.FileClient
// NodeClient Creates a new inventory.NodeClient instance for access DB node store.
// NodeClient Get a singleton inventory.NodeClient instance for access DB node store.
NodeClient() inventory.NodeClient
// DavAccountClient Creates a new inventory.DavAccountClient instance for access DB dav account store.
// DavAccountClient Get a singleton inventory.DavAccountClient instance for access DB dav account store.
DavAccountClient() inventory.DavAccountClient
// DirectLinkClient Creates a new inventory.DirectLinkClient instance for access DB direct link store.
// DirectLinkClient Get a singleton inventory.DirectLinkClient instance for access DB direct link store.
DirectLinkClient() inventory.DirectLinkClient
// OAuthClientClient Creates a new inventory.OAuthClientClient instance for access DB OAuth client store.
// OAuthClientClient Get a singleton inventory.OAuthClientClient instance for access DB OAuth client store.
OAuthClientClient() inventory.OAuthClientClient
// HashIDEncoder Get a singleton hashid.Encoder instance for encoding/decoding hashids.
HashIDEncoder() hashid.Encoder
@ -98,13 +98,13 @@ type Dep interface {
TokenAuth() auth.TokenAuth
// LockSystem Get a singleton lock.LockSystem instance for file lock management.
LockSystem() lock.LockSystem
// ShareClient Creates a new inventory.ShareClient instance for access DB share store.
// StoragePolicyClient Get a singleton inventory.StoragePolicyClient instance for access DB storage policy store.
StoragePolicyClient() inventory.StoragePolicyClient
// RequestClient Creates a new request.Client instance for HTTP requests.
RequestClient(opts ...request.Option) request.Client
// ShareClient Creates a new inventory.ShareClient instance for access DB share store.
// ShareClient Get a singleton inventory.ShareClient instance for access DB share store.
ShareClient() inventory.ShareClient
// TaskClient Creates a new inventory.TaskClient instance for access DB task store.
// TaskClient Get a singleton inventory.TaskClient instance for access DB task store.
TaskClient() inventory.TaskClient
// ForkWithLogger create a shallow copy of dependency with a new correlated logger, used as per-request dep.
ForkWithLogger(ctx context.Context, l logging.Logger) context.Context
@ -450,7 +450,8 @@ func (d *dependency) FsEventClient() inventory.FsEventClient {
if d.fsEventClient != nil {
return d.fsEventClient
}
return inventory.NewFsEventClient(d.DBClient(), d.ConfigProvider().Database().Type)
d.fsEventClient = inventory.NewFsEventClient(d.DBClient(), d.ConfigProvider().Database().Type)
return d.fsEventClient
}
func (d *dependency) SettingClient() inventory.SettingClient {
@ -499,7 +500,8 @@ func (d *dependency) UserClient() inventory.UserClient {
return d.userClient
}
return inventory.NewUserClient(d.DBClient())
d.userClient = inventory.NewUserClient(d.DBClient())
return d.userClient
}
func (d *dependency) GroupClient() inventory.GroupClient {
@ -507,7 +509,8 @@ func (d *dependency) GroupClient() inventory.GroupClient {
return d.groupClient
}
return inventory.NewGroupClient(d.DBClient(), d.ConfigProvider().Database().Type, d.KV())
d.groupClient = inventory.NewGroupClient(d.DBClient(), d.ConfigProvider().Database().Type, d.KV())
return d.groupClient
}
func (d *dependency) NodeClient() inventory.NodeClient {
@ -515,7 +518,8 @@ func (d *dependency) NodeClient() inventory.NodeClient {
return d.nodeClient
}
return inventory.NewNodeClient(d.DBClient())
d.nodeClient = inventory.NewNodeClient(d.DBClient())
return d.nodeClient
}
func (d *dependency) NodePool(ctx context.Context) (cluster.NodePool, error) {
@ -557,7 +561,8 @@ func (d *dependency) OAuthClientClient() inventory.OAuthClientClient {
return d.oAuthClient
}
return inventory.NewOAuthClientClient(d.DBClient(), d.ConfigProvider().Database().Type)
d.oAuthClient = inventory.NewOAuthClientClient(d.DBClient(), d.ConfigProvider().Database().Type)
return d.oAuthClient
}
func (d *dependency) MimeDetector(ctx context.Context) mime.MimeDetector {
@ -801,7 +806,8 @@ func (d *dependency) FileClient() inventory.FileClient {
return d.fileClient
}
return inventory.NewFileClient(d.DBClient(), d.ConfigProvider().Database().Type, d.HashIDEncoder())
d.fileClient = inventory.NewFileClient(d.DBClient(), d.ConfigProvider().Database().Type, d.HashIDEncoder())
return d.fileClient
}
func (d *dependency) ShareClient() inventory.ShareClient {
@ -809,7 +815,8 @@ func (d *dependency) ShareClient() inventory.ShareClient {
return d.shareClient
}
return inventory.NewShareClient(d.DBClient(), d.ConfigProvider().Database().Type, d.HashIDEncoder())
d.shareClient = inventory.NewShareClient(d.DBClient(), d.ConfigProvider().Database().Type, d.HashIDEncoder())
return d.shareClient
}
func (d *dependency) TaskClient() inventory.TaskClient {
@ -817,7 +824,8 @@ func (d *dependency) TaskClient() inventory.TaskClient {
return d.taskClient
}
return inventory.NewTaskClient(d.DBClient(), d.ConfigProvider().Database().Type, d.HashIDEncoder())
d.taskClient = inventory.NewTaskClient(d.DBClient(), d.ConfigProvider().Database().Type, d.HashIDEncoder())
return d.taskClient
}
func (d *dependency) DavAccountClient() inventory.DavAccountClient {
@ -825,7 +833,8 @@ func (d *dependency) DavAccountClient() inventory.DavAccountClient {
return d.davAccountClient
}
return inventory.NewDavAccountClient(d.DBClient(), d.ConfigProvider().Database().Type, d.HashIDEncoder())
d.davAccountClient = inventory.NewDavAccountClient(d.DBClient(), d.ConfigProvider().Database().Type, d.HashIDEncoder())
return d.davAccountClient
}
func (d *dependency) DirectLinkClient() inventory.DirectLinkClient {
@ -833,7 +842,8 @@ func (d *dependency) DirectLinkClient() inventory.DirectLinkClient {
return d.directLinkClient
}
return inventory.NewDirectLinkClient(d.DBClient(), d.ConfigProvider().Database().Type, d.HashIDEncoder())
d.directLinkClient = inventory.NewDirectLinkClient(d.DBClient(), d.ConfigProvider().Database().Type, d.HashIDEncoder())
return d.directLinkClient
}
func (d *dependency) HashIDEncoder() hashid.Encoder {
@ -887,7 +897,8 @@ func (d *dependency) StoragePolicyClient() inventory.StoragePolicyClient {
return d.storagePolicyClient
}
return inventory.NewStoragePolicyClient(d.DBClient(), d.KV())
d.storagePolicyClient = inventory.NewStoragePolicyClient(d.DBClient(), d.KV())
return d.storagePolicyClient
}
func (d *dependency) ThumbPipeline() thumb.Generator {

@ -19,20 +19,8 @@ func init() {
flag.BoolVar(&util.UseWorkingDir, "use-working-dir", false, "Use working directory, instead of executable directory")
flag.StringVar(&confPath, "c", util.RelativePath("conf.ini"), "Path to the config file.")
flag.StringVar(&scriptName, "database-script", "", "Name of database util script.")
//flag.Parse()
//staticFS = bootstrap.NewFS(staticZip)
//bootstrap.Init(confPath, staticFS)
}
func main() {
cmd.Execute()
return
// 关闭数据库连接
//if scriptName != "" {
// // 开始运行助手数据库脚本
// bootstrap.RunScript(scriptName)
// return
//}
}

Loading…
Cancel
Save