Files
ayatori/internal/bootstrap/database_wiring.go
T
panxiao81 e2016d3727
Verify / test (pull_request) Successful in 9m19s
Verify / lint (pull_request) Successful in 10m19s
Verify / database-integration (pull_request) Successful in 12m12s
feat: 接通 PostgreSQL 角色与数据库创建闭环
2026-09-29 16:04:52 +00:00

39 lines
2.3 KiB
Go

package bootstrap
import (
"git.ddupan.top/panxiao81/ayatori/internal/database/adapter/kubernetes"
"git.ddupan.top/panxiao81/ayatori/internal/database/application"
databasecontroller "git.ddupan.top/panxiao81/ayatori/internal/database/controller"
"sigs.k8s.io/controller-runtime/pkg/client"
)
// 本文件是 Database 的显式依赖图:adapter → 用例 → controller。
// 构造只在启动时执行;用例和 controller 都不持有容器或动态查找依赖。
func wireBindingController(writer client.Client, reader client.Reader) *databasecontroller.BindingReconciler {
resources := &kubernetes.BindingResources{Client: writer, Reader: reader}
service := &application.BindingService{Resources: resources}
return databasecontroller.NewBindingReconciler(writer, service, resources)
}
func wireCredentialController(writer client.Client, reader client.Reader, store application.CredentialStore) *databasecontroller.CredentialReconciler {
resources := &kubernetes.CredentialResources{Client: writer, Reader: reader}
service := &application.CredentialPreparation{Resources: resources, Store: store}
return databasecontroller.NewCredentialReconciler(writer, service)
}
func wireInstanceController(writer client.Client, reader client.Reader, observer application.InstanceObserver, namespace string) *databasecontroller.InstanceReconciler {
resources := &kubernetes.InstanceResources{Client: writer, Reader: reader}
service := &application.InstanceReconciliation{Resources: resources, Observer: observer}
return databasecontroller.NewInstanceReconciler(writer, service, resources, namespace)
}
func wireProvisioningController(writer client.Client, reader client.Reader, store application.CredentialStore, backend application.ProvisioningBackend) *databasecontroller.ProvisioningReconciler {
resources := &kubernetes.ProvisioningResources{Client: writer, Reader: reader}
credentialResources := &kubernetes.CredentialResources{Client: writer, Reader: reader}
service := &application.DatabaseReconciliation{
Credentials: &application.CredentialPreparation{Resources: credentialResources, Store: store},
Provisioning: &application.DatabaseProvisioning{Resources: resources, Credentials: store, Backend: backend},
}
return databasecontroller.NewProvisioningReconciler(writer, service)
}