fadd
This commit is contained in:
52
internal/infrastructure/external/signplatform/registry.go
vendored
Normal file
52
internal/infrastructure/external/signplatform/registry.go
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
package signplatform
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"hyapi-server/internal/domains/certification/enums"
|
||||
"hyapi-server/internal/domains/certification/ports"
|
||||
)
|
||||
|
||||
type Registry struct {
|
||||
providers map[enums.SignPlatform]ports.SignPlatformProvider
|
||||
order []enums.SignPlatform
|
||||
}
|
||||
|
||||
func NewRegistry(providers ...ports.SignPlatformProvider) *Registry {
|
||||
r := &Registry{
|
||||
providers: make(map[enums.SignPlatform]ports.SignPlatformProvider, len(providers)),
|
||||
order: make([]enums.SignPlatform, 0, len(providers)),
|
||||
}
|
||||
for _, p := range providers {
|
||||
if p == nil {
|
||||
continue
|
||||
}
|
||||
platform := p.Platform()
|
||||
r.providers[platform] = p
|
||||
r.order = append(r.order, platform)
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *Registry) Get(platform enums.SignPlatform) (ports.SignPlatformProvider, error) {
|
||||
if platform == "" {
|
||||
platform = enums.DefaultSignPlatform()
|
||||
}
|
||||
p, ok := r.providers[platform]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("不支持的签署平台: %s", platform)
|
||||
}
|
||||
return p, nil
|
||||
}
|
||||
|
||||
func (r *Registry) List() []ports.SignPlatformProvider {
|
||||
out := make([]ports.SignPlatformProvider, 0, len(r.order))
|
||||
for _, platform := range r.order {
|
||||
if p, ok := r.providers[platform]; ok {
|
||||
out = append(out, p)
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
var _ ports.SignPlatformRegistry = (*Registry)(nil)
|
||||
Reference in New Issue
Block a user