feat(nsd-adapter): REST-клиент ИШ НРД + маршрутизация типов пакетов
- internal/nsdadapter/igw/client.go: REST-клиент ИШ (SendPackage, GetStatus, ListIncoming) с base64-JSON, ретраями на 5xx, 4xx без ретраев - internal/nsdadapter/router.go: маршрутизация MessageKind -> PackageType ЭДО (#M2MTR, #M2MTD, #M2MER, SUBBR/SUBER/SUB16, Assets_investment) - internal/nsdadapter/sender.go: реализация m2mcore.NSDSender (Send/SendDecision) через REST ИШ, сериализация Request/Decision в windows-1251 - internal/nsdadapter/config.go: профили guest/test3/prod × gost/rsa (URL ИШ, канал, контейнер ключа, retry) - internal/nsdadapter/onyx/onyx.go: скелет резервного канала WS ONYX (ждёт PR-6 crypto-service для подписи) - cmd/nsd-adapter/main.go: HTTP /healthz + фоновый поллер входящих по типам ЭДО; idle-режим без BJ_NSD_PROFILE make ci зелёный. Без внешних Go-зависимостей. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package nsdadapter
|
||||
|
||||
import "fmt"
|
||||
|
||||
// PackageType — тип пакета ЭДО НРД. Используется при отправке через ИШ.
|
||||
type PackageType string
|
||||
|
||||
// Известные типы пакетов M2M и связанных сервисных сообщений.
|
||||
const (
|
||||
PackageM2MTransferRequest PackageType = "#M2MTR"
|
||||
PackageM2MTransferDecision PackageType = "#M2MTD"
|
||||
PackageM2MTransferError PackageType = "#M2MER"
|
||||
PackageSUBBR PackageType = "SUBBR"
|
||||
PackageSUBER PackageType = "SUBER"
|
||||
PackageSUB16 PackageType = "SUB16"
|
||||
PackageAssetsInvestment PackageType = "Assets_investment"
|
||||
)
|
||||
|
||||
// MessageKind — внутренний классификатор доменного M2M-сообщения,
|
||||
// который мы хотим отправить в НРД.
|
||||
type MessageKind string
|
||||
|
||||
const (
|
||||
KindTransferRequest MessageKind = "transfer_request"
|
||||
KindTransferDecision MessageKind = "transfer_decision"
|
||||
KindTransferResponse MessageKind = "transfer_response"
|
||||
KindHandbookRequest MessageKind = "handbook_request"
|
||||
KindParticipantForm MessageKind = "participant_form"
|
||||
)
|
||||
|
||||
// RouteToPackageType подбирает PackageType ЭДО для нашего MessageKind.
|
||||
func RouteToPackageType(kind MessageKind) (PackageType, error) {
|
||||
switch kind {
|
||||
case KindTransferRequest:
|
||||
return PackageM2MTransferRequest, nil
|
||||
case KindTransferDecision:
|
||||
return PackageM2MTransferDecision, nil
|
||||
case KindTransferResponse:
|
||||
return PackageM2MTransferError, nil
|
||||
case KindHandbookRequest:
|
||||
return PackageAssetsInvestment, nil
|
||||
case KindParticipantForm:
|
||||
return PackageAssetsInvestment, nil
|
||||
}
|
||||
return "", fmt.Errorf("nsdadapter: не задан PackageType для kind=%q", kind)
|
||||
}
|
||||
|
||||
// IncomingPackageKinds — типы входящих пакетов, которые нужно опрашивать
|
||||
// и обрабатывать на нашей стороне.
|
||||
func IncomingPackageKinds() []PackageType {
|
||||
return []PackageType{
|
||||
PackageM2MTransferDecision,
|
||||
PackageM2MTransferError,
|
||||
PackageSUBBR,
|
||||
PackageSUBER,
|
||||
PackageSUB16,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user