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)