diff --git a/Makefile b/Makefile index 483df09..53da4f7 100644 --- a/Makefile +++ b/Makefile @@ -101,7 +101,7 @@ build-all: version: @go version -generate: generate-messages generate-mocks lint +generate: generate-messages generate-mocks generate-swagger-doc lint generate-mocks: which mockgen || go install go.uber.org/mock/mockgen@v0.4.0 @@ -153,6 +153,10 @@ generate-messages: --xmlns-override="urn:iso:std:iso:20022:tech:xsd:pacs.029.001.02=pacs_029_001_02" @find ./iso20022-messages/gen -name '*.go' -exec gofmt -w {} \; -exec goimports -w {} \; +generate-swagger-doc: + @go install github.com/swaggo/swag/cmd/swag@v1.16.3 + @cd iso20022 && swag init -g ./cmd/main.go -o ./docs/swagger -p pascalcase --parseVendor --parseInternal + lint: @if test ! -e ./bin/golangci-lint; then \ curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b ./bin v1.59.1; \ diff --git a/go.work.sum b/go.work.sum index 3aad918..e70e410 100644 --- a/go.work.sum +++ b/go.work.sum @@ -784,6 +784,8 @@ github.com/dave/astrid v0.0.0-20170323122508-8c2895878b14/go.mod h1:Sth2QfxfATb/ github.com/dave/brenda v1.1.0/go.mod h1:4wCUr6gSlu5/1Tk7akE5X7UorwiQ8Rij0SKH3/BGMOM= github.com/dave/courtney v0.3.0/go.mod h1:BAv3hA06AYfNUjfjQr+5gc6vxeBVOupLqrColj+QSD8= github.com/dave/gopackages v0.0.0-20170318123100-46e7023ec56e/go.mod h1:i00+b/gKdIDIxuLDFob7ustLAVqhsZRk2qVZrArELGQ= +github.com/dave/jennifer v1.6.0 h1:MQ/6emI2xM7wt0tJzJzyUik2Q3Tcn2eE0vtYgh4GPVI= +github.com/dave/jennifer v1.6.0/go.mod h1:AxTG893FiZKqxy3FP1kL80VMshSMuz2G+EgvszgGRnk= github.com/dave/kerr v0.0.0-20170318121727-bc25dd6abe8e/go.mod h1:qZqlPyPvfsDJt+3wHJ1EvSXDuVjFTK0j2p/ca+gtsb8= github.com/dave/patsy v0.0.0-20210517141501-957256f50cba/go.mod h1:qfR88CgEGLoiqDaE+xxDCi5QA5v4vUoW0UCX2Nd5Tlc= github.com/dave/rebecca v0.9.1/go.mod h1:N6XYdMD/OKw3lkF3ywh8Z6wPGuwNFDNtWYEMFWEmXBA= @@ -1159,11 +1161,11 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/now v1.1.1 h1:g39TucaRWyV3dwDO++eEc6qf8TVIQ/Da48WmqjZ3i7E= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jmattheis/goverter v1.5.0 h1:3ANt/y+OzmB63Kw55ejYPv0J44RqNY781zNETVgi8WQ= +github.com/jmattheis/goverter v1.5.0/go.mod h1:iVIl/4qItWjWj2g3vjouGoYensJbRqDHpzlEVMHHFeY= github.com/jmoiron/sqlx v1.3.1 h1:aLN7YINNZ7cYOPK3QC83dbM6KT0NMqVMw961TqrejlE= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= @@ -1258,8 +1260,6 @@ github.com/madflojo/testcerts v1.2.0/go.mod h1:MW8sh39gLnkKh4K0Nc55AyHEDl9l/FBLD github.com/magefile/mage v1.14.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= github.com/mailgun/raymond/v2 v2.0.48 h1:5dmlB680ZkFG2RN/0lvTAghrSxIESeu9/2aeDqACtjw= github.com/mailgun/raymond/v2 v2.0.48/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= github.com/maratori/testpackage v1.1.0 h1:GJY4wlzQhuBusMF1oahQCBtUV/AQ/k69IZ68vxaac2Q= @@ -1511,6 +1511,7 @@ github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXY github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sivchari/containedctx v1.0.2 h1:0hLQKpgC53OVF1VT7CeoFHk9YKstur1XOgfYIc1yrHI= github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= @@ -1600,6 +1601,8 @@ github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lP github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqzi/CzI= github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= +github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= diff --git a/iso20022/cmd/main.go b/iso20022/cmd/main.go index ddd8d46..61733fe 100644 --- a/iso20022/cmd/main.go +++ b/iso20022/cmd/main.go @@ -14,6 +14,10 @@ import ( "github.com/CoreumFoundation/iso20022-client/iso20022/cmd/cli" ) +// @title ISO20022 Client +// @version 0.0.1 + +// @BasePath /v1 func main() { run.Tool("iso20022", func(ctx context.Context) error { rootCmd, err := RootCmd(ctx) diff --git a/iso20022/docs/docs.go b/iso20022/docs/docs.go new file mode 100644 index 0000000..a6c2ca2 --- /dev/null +++ b/iso20022/docs/docs.go @@ -0,0 +1,9 @@ +package docs + +import _ "embed" + +//go:embed templates/swagger/swagger.html +var SwaggerTemplate []byte + +//go:embed swagger/swagger.json +var SwaggerJson []byte diff --git a/iso20022/docs/swagger/docs.go b/iso20022/docs/swagger/docs.go new file mode 100644 index 0000000..469e2e3 --- /dev/null +++ b/iso20022/docs/swagger/docs.go @@ -0,0 +1,164 @@ +// Package swagger Code generated by swaggo/swag. DO NOT EDIT +package swagger + +import "github.com/swaggo/swag" + +const docTemplate = `{ + "schemes": {{ marshal .Schemes }}, + "swagger": "2.0", + "info": { + "description": "{{escape .Description}}", + "title": "{{.Title}}", + "contact": {}, + "version": "{{.Version}}" + }, + "host": "{{.Host}}", + "basePath": "{{.BasePath}}", + "paths": { + "/receive": { + "get": { + "description": "Tries to receive an ISO20022 message if there is any", + "produces": [ + "application/xml" + ], + "tags": [ + "Messaging" + ], + "summary": "Receive a message", + "responses": { + "200": { + "description": "OK" + }, + "204": { + "description": "No Content" + } + }, + "x-code-samples": [ + { + "lang": "xml", + "source": "\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\r\n\u003cFIToFICstmrCdtTrf\u003e\r\n\t\u003cGrpHdr\u003e\r\n\t\t\u003cMsgId\u003eBBBB/150928-CT/EUR/912\u003c/MsgId\u003e\r\n\t\t\u003cCreDtTm\u003e2015-09-28T16:01:00\u003c/CreDtTm\u003e\r\n\t\t\u003cNbOfTxs\u003e2\u003c/NbOfTxs\u003e\r\n\t\t\u003cTtlIntrBkSttlmAmt Ccy=\"EUR\"\u003e504500\u003c/TtlIntrBkSttlmAmt\u003e\r\n\t\t\u003cIntrBkSttlmDt\u003e2015-09-29\u003c/IntrBkSttlmDt\u003e\r\n\t\t\u003cSttlmInf\u003e\r\n\t\t\t\u003cSttlmMtd\u003eINDA\u003c/SttlmMtd\u003e\r\n\t\t\t\u003cSttlmAcct\u003e\r\n\t\t\t\t\u003cId\u003e\r\n\t\t\t\t\t\u003cOthr\u003e\r\n\t\t\t\t\t\t\u003cId\u003e29314569847\u003c/Id\u003e\r\n\t\t\t\t\t\u003c/Othr\u003e\r\n\t\t\t\t\u003c/Id\u003e\r\n\t\t\t\u003c/SttlmAcct\u003e\r\n\t\t\u003c/SttlmInf\u003e\r\n\t\t\u003cInstgAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/InstgAgt\u003e\r\n\t\t\u003cInstdAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eEEEEDEFF\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/InstdAgt\u003e\r\n\t\u003c/GrpHdr\u003e\r\n\t\u003cCdtTrfTxInf\u003e\r\n\t\t\u003cPmtId\u003e\r\n\t\t\t\u003cInstrId\u003eBBBB/150928-CCT/EUR/912/1\u003c/InstrId\u003e\r\n\t\t\t\u003cEndToEndId\u003eABC/ABC-13679/2015-09-15\u003c/EndToEndId\u003e\r\n\t\t\t\u003cTxId\u003eBBBB/150928-CCT/EUR/912/1\u003c/TxId\u003e\r\n\t\t\u003c/PmtId\u003e\r\n\t\t\u003cPmtTpInf\u003e\r\n\t\t\t\u003cInstrPrty\u003eNORM\u003c/InstrPrty\u003e\r\n\t\t\u003c/PmtTpInf\u003e\r\n\t\t\u003cIntrBkSttlmAmt Ccy=\"EUR\"\u003e499500\u003c/IntrBkSttlmAmt\u003e\r\n\t\t\u003cInstdAmt Ccy=\"EUR\"\u003e500000\u003c/InstdAmt\u003e\r\n\t\t\u003cChrgBr\u003eCRED\u003c/ChrgBr\u003e\r\n\t\t\u003cChrgsInf\u003e\r\n\t\t\t\u003cAmt Ccy=\"EUR\"\u003e500\u003c/Amt\u003e\r\n\t\t\t\u003cAgt\u003e\r\n\t\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\t\u003c/Agt\u003e\r\n\t\t\u003c/ChrgsInf\u003e\r\n\t\t\u003cDbtr\u003e\r\n\t\t\t\u003cNm\u003eABC Corporation\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003eTimes Square\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e7\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003eNY 10036\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eNew York\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eUS\u003c/Ctry\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Dbtr\u003e\r\n\t\t\u003cDbtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cOthr\u003e\r\n\t\t\t\t\t\u003cId\u003e00125574999\u003c/Id\u003e\r\n\t\t\t\t\u003c/Othr\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/DbtrAcct\u003e\r\n\t\t\u003cDbtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/DbtrAgt\u003e\r\n\t\t\u003cCdtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eDDDDBEBB\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/CdtrAgt\u003e\r\n\t\t\u003cCdtr\u003e\r\n\t\t\t\u003cNm\u003eGHI Semiconductors\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003eAvenue Brugmann\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e415\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003e1180\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eBrussels\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eBE\u003c/Ctry\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Cdtr\u003e\r\n\t\t\u003cCdtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cIBAN\u003eBE30001216371411\u003c/IBAN\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/CdtrAcct\u003e\r\n\t\t\u003cPurp\u003e\r\n\t\t\t\u003cCd\u003eGDDS\u003c/Cd\u003e\r\n\t\t\u003c/Purp\u003e\r\n\t\t\u003cRmtInf\u003e\r\n\t\t\t\u003cStrd\u003e\r\n\t\t\t\t\u003cRfrdDocInf\u003e\r\n\t\t\t\t\t\u003cTp\u003e\r\n\t\t\t\t\t\t\u003cCdOrPrtry\u003e\r\n\t\t\t\t\t\t\t\u003cCd\u003eCINV\u003c/Cd\u003e\r\n\t\t\t\t\t\t\u003c/CdOrPrtry\u003e\r\n\t\t\t\t\t\u003c/Tp\u003e\r\n\t\t\t\t\t\u003cNb\u003eABC-13679\u003c/Nb\u003e\r\n\t\t\t\t\t\u003cRltdDt\u003e\r\n\t\t\t\t\t\t\u003cTp\u003e\r\n\t\t\t\t\t\t\t\u003cCd\u003eINDA\u003c/Cd\u003e\r\n\t\t\t\t\t\t\u003c/Tp\u003e\r\n\t\t\t\t\t\t\u003cDt\u003e2015-09-08\u003c/Dt\u003e\r\n\t\t\t\t\t\u003c/RltdDt\u003e\r\n\t\t\t\t\u003c/RfrdDocInf\u003e\r\n\t\t\t\u003c/Strd\u003e\r\n\t\t\u003c/RmtInf\u003e\r\n\t\u003c/CdtTrfTxInf\u003e\r\n\t\u003cCdtTrfTxInf\u003e\r\n\t\t\u003cPmtId\u003e\r\n\t\t\t\u003cInstrId\u003eBBBB/150928-CCT/EUR/912/2\u003c/InstrId\u003e\r\n\t\t\t\u003cEndToEndId\u003eBBBB/150928-ZZ/JO/164794\u003c/EndToEndId\u003e\r\n\t\t\t\u003cTxId\u003eBBBB/150928-CCT/EUR/912/2\u003c/TxId\u003e\r\n\t\t\u003c/PmtId\u003e\r\n\t\t\u003cPmtTpInf\u003e\r\n\t\t\t\u003cInstrPrty\u003eNORM\u003c/InstrPrty\u003e\r\n\t\t\u003c/PmtTpInf\u003e\r\n\t\t\u003cIntrBkSttlmAmt Ccy=\"EUR\"\u003e5000\u003c/IntrBkSttlmAmt\u003e\r\n\t\t\u003cChrgBr\u003eSHAR\u003c/ChrgBr\u003e\r\n\t\t\u003cDbtr\u003e\r\n\t\t\t\u003cNm\u003eMr. Jones\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003e16th Street\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e30\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003eNY10023\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eNew York\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eUS\u003c/Ctry\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Dbtr\u003e\r\n\t\t\u003cDbtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cOthr\u003e\r\n\t\t\t\t\t\u003cId\u003e00125583145\u003c/Id\u003e\r\n\t\t\t\t\u003c/Othr\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/DbtrAcct\u003e\r\n\t\t\u003cDbtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/DbtrAgt\u003e\r\n\t\t\u003cCdtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eEEEEDEFF\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/CdtrAgt\u003e\r\n\t\t\u003cCdtr\u003e\r\n\t\t\t\u003cNm\u003eZZ Insurances\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003eFriedrich-Ebert-Anlage\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e2-14\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003eD-60 325\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eFrankfurt am Main\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eDE\u003c/Ctry\u003e\r\n\t\t\t\t\u003cAdrLine\u003eCity Haus 1 10th Floor\u003c/AdrLine\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Cdtr\u003e\r\n\t\t\u003cCdtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cIBAN\u003eDE89370400440532014000\u003c/IBAN\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/CdtrAcct\u003e\r\n\t\t\u003cRmtInf\u003e\r\n\t\t\t\u003cUstrd\u003eContract ZZ/JO/164794\u003c/Ustrd\u003e\r\n\t\t\u003c/RmtInf\u003e\r\n\t\u003c/CdtTrfTxInf\u003e\r\n\u003c/FIToFICstmrCdtTrf\u003e\r\n" + } + ] + } + }, + "/send": { + "post": { + "description": "Send an ISO20022 message", + "consumes": [ + "application/xml" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Messaging" + ], + "summary": "Send a message", + "parameters": [ + { + "description": "ISO20022 message in xml format", + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string", + "example": "\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\r\n\u003cFIToFICstmrCdtTrf\u003e\r\n\t\u003cGrpHdr\u003e\r\n\t\t\u003cMsgId\u003eBBBB/150928-CT/EUR/912\u003c/MsgId\u003e\r\n\t\t\u003cCreDtTm\u003e2015-09-28T16:01:00\u003c/CreDtTm\u003e\r\n\t\t\u003cNbOfTxs\u003e2\u003c/NbOfTxs\u003e\r\n\t\t\u003cTtlIntrBkSttlmAmt Ccy=\"EUR\"\u003e504500\u003c/TtlIntrBkSttlmAmt\u003e\r\n\t\t\u003cIntrBkSttlmDt\u003e2015-09-29\u003c/IntrBkSttlmDt\u003e\r\n\t\t\u003cSttlmInf\u003e\r\n\t\t\t\u003cSttlmMtd\u003eINDA\u003c/SttlmMtd\u003e\r\n\t\t\t\u003cSttlmAcct\u003e\r\n\t\t\t\t\u003cId\u003e\r\n\t\t\t\t\t\u003cOthr\u003e\r\n\t\t\t\t\t\t\u003cId\u003e29314569847\u003c/Id\u003e\r\n\t\t\t\t\t\u003c/Othr\u003e\r\n\t\t\t\t\u003c/Id\u003e\r\n\t\t\t\u003c/SttlmAcct\u003e\r\n\t\t\u003c/SttlmInf\u003e\r\n\t\t\u003cInstgAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/InstgAgt\u003e\r\n\t\t\u003cInstdAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eEEEEDEFF\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/InstdAgt\u003e\r\n\t\u003c/GrpHdr\u003e\r\n\t\u003cCdtTrfTxInf\u003e\r\n\t\t\u003cPmtId\u003e\r\n\t\t\t\u003cInstrId\u003eBBBB/150928-CCT/EUR/912/1\u003c/InstrId\u003e\r\n\t\t\t\u003cEndToEndId\u003eABC/ABC-13679/2015-09-15\u003c/EndToEndId\u003e\r\n\t\t\t\u003cTxId\u003eBBBB/150928-CCT/EUR/912/1\u003c/TxId\u003e\r\n\t\t\u003c/PmtId\u003e\r\n\t\t\u003cPmtTpInf\u003e\r\n\t\t\t\u003cInstrPrty\u003eNORM\u003c/InstrPrty\u003e\r\n\t\t\u003c/PmtTpInf\u003e\r\n\t\t\u003cIntrBkSttlmAmt Ccy=\"EUR\"\u003e499500\u003c/IntrBkSttlmAmt\u003e\r\n\t\t\u003cInstdAmt Ccy=\"EUR\"\u003e500000\u003c/InstdAmt\u003e\r\n\t\t\u003cChrgBr\u003eCRED\u003c/ChrgBr\u003e\r\n\t\t\u003cChrgsInf\u003e\r\n\t\t\t\u003cAmt Ccy=\"EUR\"\u003e500\u003c/Amt\u003e\r\n\t\t\t\u003cAgt\u003e\r\n\t\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\t\u003c/Agt\u003e\r\n\t\t\u003c/ChrgsInf\u003e\r\n\t\t\u003cDbtr\u003e\r\n\t\t\t\u003cNm\u003eABC Corporation\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003eTimes Square\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e7\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003eNY 10036\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eNew York\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eUS\u003c/Ctry\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Dbtr\u003e\r\n\t\t\u003cDbtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cOthr\u003e\r\n\t\t\t\t\t\u003cId\u003e00125574999\u003c/Id\u003e\r\n\t\t\t\t\u003c/Othr\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/DbtrAcct\u003e\r\n\t\t\u003cDbtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/DbtrAgt\u003e\r\n\t\t\u003cCdtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eDDDDBEBB\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/CdtrAgt\u003e\r\n\t\t\u003cCdtr\u003e\r\n\t\t\t\u003cNm\u003eGHI Semiconductors\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003eAvenue Brugmann\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e415\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003e1180\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eBrussels\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eBE\u003c/Ctry\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Cdtr\u003e\r\n\t\t\u003cCdtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cIBAN\u003eBE30001216371411\u003c/IBAN\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/CdtrAcct\u003e\r\n\t\t\u003cPurp\u003e\r\n\t\t\t\u003cCd\u003eGDDS\u003c/Cd\u003e\r\n\t\t\u003c/Purp\u003e\r\n\t\t\u003cRmtInf\u003e\r\n\t\t\t\u003cStrd\u003e\r\n\t\t\t\t\u003cRfrdDocInf\u003e\r\n\t\t\t\t\t\u003cTp\u003e\r\n\t\t\t\t\t\t\u003cCdOrPrtry\u003e\r\n\t\t\t\t\t\t\t\u003cCd\u003eCINV\u003c/Cd\u003e\r\n\t\t\t\t\t\t\u003c/CdOrPrtry\u003e\r\n\t\t\t\t\t\u003c/Tp\u003e\r\n\t\t\t\t\t\u003cNb\u003eABC-13679\u003c/Nb\u003e\r\n\t\t\t\t\t\u003cRltdDt\u003e\r\n\t\t\t\t\t\t\u003cTp\u003e\r\n\t\t\t\t\t\t\t\u003cCd\u003eINDA\u003c/Cd\u003e\r\n\t\t\t\t\t\t\u003c/Tp\u003e\r\n\t\t\t\t\t\t\u003cDt\u003e2015-09-08\u003c/Dt\u003e\r\n\t\t\t\t\t\u003c/RltdDt\u003e\r\n\t\t\t\t\u003c/RfrdDocInf\u003e\r\n\t\t\t\u003c/Strd\u003e\r\n\t\t\u003c/RmtInf\u003e\r\n\t\u003c/CdtTrfTxInf\u003e\r\n\t\u003cCdtTrfTxInf\u003e\r\n\t\t\u003cPmtId\u003e\r\n\t\t\t\u003cInstrId\u003eBBBB/150928-CCT/EUR/912/2\u003c/InstrId\u003e\r\n\t\t\t\u003cEndToEndId\u003eBBBB/150928-ZZ/JO/164794\u003c/EndToEndId\u003e\r\n\t\t\t\u003cTxId\u003eBBBB/150928-CCT/EUR/912/2\u003c/TxId\u003e\r\n\t\t\u003c/PmtId\u003e\r\n\t\t\u003cPmtTpInf\u003e\r\n\t\t\t\u003cInstrPrty\u003eNORM\u003c/InstrPrty\u003e\r\n\t\t\u003c/PmtTpInf\u003e\r\n\t\t\u003cIntrBkSttlmAmt Ccy=\"EUR\"\u003e5000\u003c/IntrBkSttlmAmt\u003e\r\n\t\t\u003cChrgBr\u003eSHAR\u003c/ChrgBr\u003e\r\n\t\t\u003cDbtr\u003e\r\n\t\t\t\u003cNm\u003eMr. Jones\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003e16th Street\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e30\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003eNY10023\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eNew York\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eUS\u003c/Ctry\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Dbtr\u003e\r\n\t\t\u003cDbtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cOthr\u003e\r\n\t\t\t\t\t\u003cId\u003e00125583145\u003c/Id\u003e\r\n\t\t\t\t\u003c/Othr\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/DbtrAcct\u003e\r\n\t\t\u003cDbtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/DbtrAgt\u003e\r\n\t\t\u003cCdtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eEEEEDEFF\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/CdtrAgt\u003e\r\n\t\t\u003cCdtr\u003e\r\n\t\t\t\u003cNm\u003eZZ Insurances\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003eFriedrich-Ebert-Anlage\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e2-14\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003eD-60 325\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eFrankfurt am Main\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eDE\u003c/Ctry\u003e\r\n\t\t\t\t\u003cAdrLine\u003eCity Haus 1 10th Floor\u003c/AdrLine\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Cdtr\u003e\r\n\t\t\u003cCdtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cIBAN\u003eDE89370400440532014000\u003c/IBAN\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/CdtrAcct\u003e\r\n\t\t\u003cRmtInf\u003e\r\n\t\t\t\u003cUstrd\u003eContract ZZ/JO/164794\u003c/Ustrd\u003e\r\n\t\t\u003c/RmtInf\u003e\r\n\t\u003c/CdtTrfTxInf\u003e\r\n\u003c/FIToFICstmrCdtTrf\u003e\r\n" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/server.StandardResponse" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/server.MessageSendResponse" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/server.StandardResponse" + }, + { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + } + ] + } + }, + "500": { + "description": "Something bad happened" + } + } + } + } + }, + "definitions": { + "server.MessageSendResponse": { + "type": "object", + "properties": { + "message_id": { + "type": "string" + } + } + }, + "server.ResponseStatus": { + "type": "string", + "enum": [ + "Ok", + "Fail" + ], + "x-enum-varnames": [ + "OK", + "Fail" + ] + }, + "server.StandardResponse": { + "type": "object", + "properties": { + "data": {}, + "message": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/server.ResponseStatus" + } + } + } + } +}` + +// SwaggerInfo holds exported Swagger Info so clients can modify it +var SwaggerInfo = &swag.Spec{ + Version: "0.0.1", + Host: "", + BasePath: "/v1", + Schemes: []string{}, + Title: "ISO20022 Client", + Description: "", + InfoInstanceName: "swagger", + SwaggerTemplate: docTemplate, + LeftDelim: "{{", + RightDelim: "}}", +} + +func init() { + swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) +} diff --git a/iso20022/docs/swagger/swagger.json b/iso20022/docs/swagger/swagger.json new file mode 100644 index 0000000..bda4d36 --- /dev/null +++ b/iso20022/docs/swagger/swagger.json @@ -0,0 +1,138 @@ +{ + "swagger": "2.0", + "info": { + "title": "ISO20022 Client", + "contact": {}, + "version": "0.0.1" + }, + "basePath": "/v1", + "paths": { + "/receive": { + "get": { + "description": "Tries to receive an ISO20022 message if there is any", + "produces": [ + "application/xml" + ], + "tags": [ + "Messaging" + ], + "summary": "Receive a message", + "responses": { + "200": { + "description": "OK" + }, + "204": { + "description": "No Content" + } + }, + "x-code-samples": [ + { + "lang": "xml", + "source": "\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\r\n\u003cFIToFICstmrCdtTrf\u003e\r\n\t\u003cGrpHdr\u003e\r\n\t\t\u003cMsgId\u003eBBBB/150928-CT/EUR/912\u003c/MsgId\u003e\r\n\t\t\u003cCreDtTm\u003e2015-09-28T16:01:00\u003c/CreDtTm\u003e\r\n\t\t\u003cNbOfTxs\u003e2\u003c/NbOfTxs\u003e\r\n\t\t\u003cTtlIntrBkSttlmAmt Ccy=\"EUR\"\u003e504500\u003c/TtlIntrBkSttlmAmt\u003e\r\n\t\t\u003cIntrBkSttlmDt\u003e2015-09-29\u003c/IntrBkSttlmDt\u003e\r\n\t\t\u003cSttlmInf\u003e\r\n\t\t\t\u003cSttlmMtd\u003eINDA\u003c/SttlmMtd\u003e\r\n\t\t\t\u003cSttlmAcct\u003e\r\n\t\t\t\t\u003cId\u003e\r\n\t\t\t\t\t\u003cOthr\u003e\r\n\t\t\t\t\t\t\u003cId\u003e29314569847\u003c/Id\u003e\r\n\t\t\t\t\t\u003c/Othr\u003e\r\n\t\t\t\t\u003c/Id\u003e\r\n\t\t\t\u003c/SttlmAcct\u003e\r\n\t\t\u003c/SttlmInf\u003e\r\n\t\t\u003cInstgAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/InstgAgt\u003e\r\n\t\t\u003cInstdAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eEEEEDEFF\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/InstdAgt\u003e\r\n\t\u003c/GrpHdr\u003e\r\n\t\u003cCdtTrfTxInf\u003e\r\n\t\t\u003cPmtId\u003e\r\n\t\t\t\u003cInstrId\u003eBBBB/150928-CCT/EUR/912/1\u003c/InstrId\u003e\r\n\t\t\t\u003cEndToEndId\u003eABC/ABC-13679/2015-09-15\u003c/EndToEndId\u003e\r\n\t\t\t\u003cTxId\u003eBBBB/150928-CCT/EUR/912/1\u003c/TxId\u003e\r\n\t\t\u003c/PmtId\u003e\r\n\t\t\u003cPmtTpInf\u003e\r\n\t\t\t\u003cInstrPrty\u003eNORM\u003c/InstrPrty\u003e\r\n\t\t\u003c/PmtTpInf\u003e\r\n\t\t\u003cIntrBkSttlmAmt Ccy=\"EUR\"\u003e499500\u003c/IntrBkSttlmAmt\u003e\r\n\t\t\u003cInstdAmt Ccy=\"EUR\"\u003e500000\u003c/InstdAmt\u003e\r\n\t\t\u003cChrgBr\u003eCRED\u003c/ChrgBr\u003e\r\n\t\t\u003cChrgsInf\u003e\r\n\t\t\t\u003cAmt Ccy=\"EUR\"\u003e500\u003c/Amt\u003e\r\n\t\t\t\u003cAgt\u003e\r\n\t\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\t\u003c/Agt\u003e\r\n\t\t\u003c/ChrgsInf\u003e\r\n\t\t\u003cDbtr\u003e\r\n\t\t\t\u003cNm\u003eABC Corporation\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003eTimes Square\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e7\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003eNY 10036\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eNew York\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eUS\u003c/Ctry\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Dbtr\u003e\r\n\t\t\u003cDbtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cOthr\u003e\r\n\t\t\t\t\t\u003cId\u003e00125574999\u003c/Id\u003e\r\n\t\t\t\t\u003c/Othr\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/DbtrAcct\u003e\r\n\t\t\u003cDbtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/DbtrAgt\u003e\r\n\t\t\u003cCdtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eDDDDBEBB\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/CdtrAgt\u003e\r\n\t\t\u003cCdtr\u003e\r\n\t\t\t\u003cNm\u003eGHI Semiconductors\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003eAvenue Brugmann\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e415\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003e1180\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eBrussels\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eBE\u003c/Ctry\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Cdtr\u003e\r\n\t\t\u003cCdtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cIBAN\u003eBE30001216371411\u003c/IBAN\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/CdtrAcct\u003e\r\n\t\t\u003cPurp\u003e\r\n\t\t\t\u003cCd\u003eGDDS\u003c/Cd\u003e\r\n\t\t\u003c/Purp\u003e\r\n\t\t\u003cRmtInf\u003e\r\n\t\t\t\u003cStrd\u003e\r\n\t\t\t\t\u003cRfrdDocInf\u003e\r\n\t\t\t\t\t\u003cTp\u003e\r\n\t\t\t\t\t\t\u003cCdOrPrtry\u003e\r\n\t\t\t\t\t\t\t\u003cCd\u003eCINV\u003c/Cd\u003e\r\n\t\t\t\t\t\t\u003c/CdOrPrtry\u003e\r\n\t\t\t\t\t\u003c/Tp\u003e\r\n\t\t\t\t\t\u003cNb\u003eABC-13679\u003c/Nb\u003e\r\n\t\t\t\t\t\u003cRltdDt\u003e\r\n\t\t\t\t\t\t\u003cTp\u003e\r\n\t\t\t\t\t\t\t\u003cCd\u003eINDA\u003c/Cd\u003e\r\n\t\t\t\t\t\t\u003c/Tp\u003e\r\n\t\t\t\t\t\t\u003cDt\u003e2015-09-08\u003c/Dt\u003e\r\n\t\t\t\t\t\u003c/RltdDt\u003e\r\n\t\t\t\t\u003c/RfrdDocInf\u003e\r\n\t\t\t\u003c/Strd\u003e\r\n\t\t\u003c/RmtInf\u003e\r\n\t\u003c/CdtTrfTxInf\u003e\r\n\t\u003cCdtTrfTxInf\u003e\r\n\t\t\u003cPmtId\u003e\r\n\t\t\t\u003cInstrId\u003eBBBB/150928-CCT/EUR/912/2\u003c/InstrId\u003e\r\n\t\t\t\u003cEndToEndId\u003eBBBB/150928-ZZ/JO/164794\u003c/EndToEndId\u003e\r\n\t\t\t\u003cTxId\u003eBBBB/150928-CCT/EUR/912/2\u003c/TxId\u003e\r\n\t\t\u003c/PmtId\u003e\r\n\t\t\u003cPmtTpInf\u003e\r\n\t\t\t\u003cInstrPrty\u003eNORM\u003c/InstrPrty\u003e\r\n\t\t\u003c/PmtTpInf\u003e\r\n\t\t\u003cIntrBkSttlmAmt Ccy=\"EUR\"\u003e5000\u003c/IntrBkSttlmAmt\u003e\r\n\t\t\u003cChrgBr\u003eSHAR\u003c/ChrgBr\u003e\r\n\t\t\u003cDbtr\u003e\r\n\t\t\t\u003cNm\u003eMr. Jones\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003e16th Street\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e30\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003eNY10023\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eNew York\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eUS\u003c/Ctry\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Dbtr\u003e\r\n\t\t\u003cDbtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cOthr\u003e\r\n\t\t\t\t\t\u003cId\u003e00125583145\u003c/Id\u003e\r\n\t\t\t\t\u003c/Othr\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/DbtrAcct\u003e\r\n\t\t\u003cDbtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/DbtrAgt\u003e\r\n\t\t\u003cCdtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eEEEEDEFF\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/CdtrAgt\u003e\r\n\t\t\u003cCdtr\u003e\r\n\t\t\t\u003cNm\u003eZZ Insurances\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003eFriedrich-Ebert-Anlage\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e2-14\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003eD-60 325\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eFrankfurt am Main\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eDE\u003c/Ctry\u003e\r\n\t\t\t\t\u003cAdrLine\u003eCity Haus 1 10th Floor\u003c/AdrLine\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Cdtr\u003e\r\n\t\t\u003cCdtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cIBAN\u003eDE89370400440532014000\u003c/IBAN\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/CdtrAcct\u003e\r\n\t\t\u003cRmtInf\u003e\r\n\t\t\t\u003cUstrd\u003eContract ZZ/JO/164794\u003c/Ustrd\u003e\r\n\t\t\u003c/RmtInf\u003e\r\n\t\u003c/CdtTrfTxInf\u003e\r\n\u003c/FIToFICstmrCdtTrf\u003e\r\n" + } + ] + } + }, + "/send": { + "post": { + "description": "Send an ISO20022 message", + "consumes": [ + "application/xml" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Messaging" + ], + "summary": "Send a message", + "parameters": [ + { + "description": "ISO20022 message in xml format", + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "string", + "example": "\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\r\n\u003cFIToFICstmrCdtTrf\u003e\r\n\t\u003cGrpHdr\u003e\r\n\t\t\u003cMsgId\u003eBBBB/150928-CT/EUR/912\u003c/MsgId\u003e\r\n\t\t\u003cCreDtTm\u003e2015-09-28T16:01:00\u003c/CreDtTm\u003e\r\n\t\t\u003cNbOfTxs\u003e2\u003c/NbOfTxs\u003e\r\n\t\t\u003cTtlIntrBkSttlmAmt Ccy=\"EUR\"\u003e504500\u003c/TtlIntrBkSttlmAmt\u003e\r\n\t\t\u003cIntrBkSttlmDt\u003e2015-09-29\u003c/IntrBkSttlmDt\u003e\r\n\t\t\u003cSttlmInf\u003e\r\n\t\t\t\u003cSttlmMtd\u003eINDA\u003c/SttlmMtd\u003e\r\n\t\t\t\u003cSttlmAcct\u003e\r\n\t\t\t\t\u003cId\u003e\r\n\t\t\t\t\t\u003cOthr\u003e\r\n\t\t\t\t\t\t\u003cId\u003e29314569847\u003c/Id\u003e\r\n\t\t\t\t\t\u003c/Othr\u003e\r\n\t\t\t\t\u003c/Id\u003e\r\n\t\t\t\u003c/SttlmAcct\u003e\r\n\t\t\u003c/SttlmInf\u003e\r\n\t\t\u003cInstgAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/InstgAgt\u003e\r\n\t\t\u003cInstdAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eEEEEDEFF\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/InstdAgt\u003e\r\n\t\u003c/GrpHdr\u003e\r\n\t\u003cCdtTrfTxInf\u003e\r\n\t\t\u003cPmtId\u003e\r\n\t\t\t\u003cInstrId\u003eBBBB/150928-CCT/EUR/912/1\u003c/InstrId\u003e\r\n\t\t\t\u003cEndToEndId\u003eABC/ABC-13679/2015-09-15\u003c/EndToEndId\u003e\r\n\t\t\t\u003cTxId\u003eBBBB/150928-CCT/EUR/912/1\u003c/TxId\u003e\r\n\t\t\u003c/PmtId\u003e\r\n\t\t\u003cPmtTpInf\u003e\r\n\t\t\t\u003cInstrPrty\u003eNORM\u003c/InstrPrty\u003e\r\n\t\t\u003c/PmtTpInf\u003e\r\n\t\t\u003cIntrBkSttlmAmt Ccy=\"EUR\"\u003e499500\u003c/IntrBkSttlmAmt\u003e\r\n\t\t\u003cInstdAmt Ccy=\"EUR\"\u003e500000\u003c/InstdAmt\u003e\r\n\t\t\u003cChrgBr\u003eCRED\u003c/ChrgBr\u003e\r\n\t\t\u003cChrgsInf\u003e\r\n\t\t\t\u003cAmt Ccy=\"EUR\"\u003e500\u003c/Amt\u003e\r\n\t\t\t\u003cAgt\u003e\r\n\t\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\t\u003c/Agt\u003e\r\n\t\t\u003c/ChrgsInf\u003e\r\n\t\t\u003cDbtr\u003e\r\n\t\t\t\u003cNm\u003eABC Corporation\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003eTimes Square\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e7\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003eNY 10036\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eNew York\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eUS\u003c/Ctry\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Dbtr\u003e\r\n\t\t\u003cDbtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cOthr\u003e\r\n\t\t\t\t\t\u003cId\u003e00125574999\u003c/Id\u003e\r\n\t\t\t\t\u003c/Othr\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/DbtrAcct\u003e\r\n\t\t\u003cDbtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/DbtrAgt\u003e\r\n\t\t\u003cCdtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eDDDDBEBB\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/CdtrAgt\u003e\r\n\t\t\u003cCdtr\u003e\r\n\t\t\t\u003cNm\u003eGHI Semiconductors\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003eAvenue Brugmann\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e415\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003e1180\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eBrussels\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eBE\u003c/Ctry\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Cdtr\u003e\r\n\t\t\u003cCdtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cIBAN\u003eBE30001216371411\u003c/IBAN\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/CdtrAcct\u003e\r\n\t\t\u003cPurp\u003e\r\n\t\t\t\u003cCd\u003eGDDS\u003c/Cd\u003e\r\n\t\t\u003c/Purp\u003e\r\n\t\t\u003cRmtInf\u003e\r\n\t\t\t\u003cStrd\u003e\r\n\t\t\t\t\u003cRfrdDocInf\u003e\r\n\t\t\t\t\t\u003cTp\u003e\r\n\t\t\t\t\t\t\u003cCdOrPrtry\u003e\r\n\t\t\t\t\t\t\t\u003cCd\u003eCINV\u003c/Cd\u003e\r\n\t\t\t\t\t\t\u003c/CdOrPrtry\u003e\r\n\t\t\t\t\t\u003c/Tp\u003e\r\n\t\t\t\t\t\u003cNb\u003eABC-13679\u003c/Nb\u003e\r\n\t\t\t\t\t\u003cRltdDt\u003e\r\n\t\t\t\t\t\t\u003cTp\u003e\r\n\t\t\t\t\t\t\t\u003cCd\u003eINDA\u003c/Cd\u003e\r\n\t\t\t\t\t\t\u003c/Tp\u003e\r\n\t\t\t\t\t\t\u003cDt\u003e2015-09-08\u003c/Dt\u003e\r\n\t\t\t\t\t\u003c/RltdDt\u003e\r\n\t\t\t\t\u003c/RfrdDocInf\u003e\r\n\t\t\t\u003c/Strd\u003e\r\n\t\t\u003c/RmtInf\u003e\r\n\t\u003c/CdtTrfTxInf\u003e\r\n\t\u003cCdtTrfTxInf\u003e\r\n\t\t\u003cPmtId\u003e\r\n\t\t\t\u003cInstrId\u003eBBBB/150928-CCT/EUR/912/2\u003c/InstrId\u003e\r\n\t\t\t\u003cEndToEndId\u003eBBBB/150928-ZZ/JO/164794\u003c/EndToEndId\u003e\r\n\t\t\t\u003cTxId\u003eBBBB/150928-CCT/EUR/912/2\u003c/TxId\u003e\r\n\t\t\u003c/PmtId\u003e\r\n\t\t\u003cPmtTpInf\u003e\r\n\t\t\t\u003cInstrPrty\u003eNORM\u003c/InstrPrty\u003e\r\n\t\t\u003c/PmtTpInf\u003e\r\n\t\t\u003cIntrBkSttlmAmt Ccy=\"EUR\"\u003e5000\u003c/IntrBkSttlmAmt\u003e\r\n\t\t\u003cChrgBr\u003eSHAR\u003c/ChrgBr\u003e\r\n\t\t\u003cDbtr\u003e\r\n\t\t\t\u003cNm\u003eMr. Jones\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003e16th Street\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e30\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003eNY10023\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eNew York\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eUS\u003c/Ctry\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Dbtr\u003e\r\n\t\t\u003cDbtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cOthr\u003e\r\n\t\t\t\t\t\u003cId\u003e00125583145\u003c/Id\u003e\r\n\t\t\t\t\u003c/Othr\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/DbtrAcct\u003e\r\n\t\t\u003cDbtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eBBBBUS33\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/DbtrAgt\u003e\r\n\t\t\u003cCdtrAgt\u003e\r\n\t\t\t\u003cFinInstnId\u003e\r\n\t\t\t\t\u003cBICFI\u003eEEEEDEFF\u003c/BICFI\u003e\r\n\t\t\t\u003c/FinInstnId\u003e\r\n\t\t\u003c/CdtrAgt\u003e\r\n\t\t\u003cCdtr\u003e\r\n\t\t\t\u003cNm\u003eZZ Insurances\u003c/Nm\u003e\r\n\t\t\t\u003cPstlAdr\u003e\r\n\t\t\t\t\u003cStrtNm\u003eFriedrich-Ebert-Anlage\u003c/StrtNm\u003e\r\n\t\t\t\t\u003cBldgNb\u003e2-14\u003c/BldgNb\u003e\r\n\t\t\t\t\u003cPstCd\u003eD-60 325\u003c/PstCd\u003e\r\n\t\t\t\t\u003cTwnNm\u003eFrankfurt am Main\u003c/TwnNm\u003e\r\n\t\t\t\t\u003cCtry\u003eDE\u003c/Ctry\u003e\r\n\t\t\t\t\u003cAdrLine\u003eCity Haus 1 10th Floor\u003c/AdrLine\u003e\r\n\t\t\t\u003c/PstlAdr\u003e\r\n\t\t\u003c/Cdtr\u003e\r\n\t\t\u003cCdtrAcct\u003e\r\n\t\t\t\u003cId\u003e\r\n\t\t\t\t\u003cIBAN\u003eDE89370400440532014000\u003c/IBAN\u003e\r\n\t\t\t\u003c/Id\u003e\r\n\t\t\u003c/CdtrAcct\u003e\r\n\t\t\u003cRmtInf\u003e\r\n\t\t\t\u003cUstrd\u003eContract ZZ/JO/164794\u003c/Ustrd\u003e\r\n\t\t\u003c/RmtInf\u003e\r\n\t\u003c/CdtTrfTxInf\u003e\r\n\u003c/FIToFICstmrCdtTrf\u003e\r\n" + } + } + ], + "responses": { + "201": { + "description": "Created", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/server.StandardResponse" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/definitions/server.MessageSendResponse" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/server.StandardResponse" + }, + { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + } + ] + } + }, + "500": { + "description": "Something bad happened" + } + } + } + } + }, + "definitions": { + "server.MessageSendResponse": { + "type": "object", + "properties": { + "message_id": { + "type": "string" + } + } + }, + "server.ResponseStatus": { + "type": "string", + "enum": [ + "Ok", + "Fail" + ], + "x-enum-varnames": [ + "OK", + "Fail" + ] + }, + "server.StandardResponse": { + "type": "object", + "properties": { + "data": {}, + "message": { + "type": "string" + }, + "status": { + "$ref": "#/definitions/server.ResponseStatus" + } + } + } + } +} \ No newline at end of file diff --git a/iso20022/docs/swagger/swagger.yaml b/iso20022/docs/swagger/swagger.yaml new file mode 100644 index 0000000..0b9e2db --- /dev/null +++ b/iso20022/docs/swagger/swagger.yaml @@ -0,0 +1,110 @@ +basePath: /v1 +definitions: + server.MessageSendResponse: + properties: + message_id: + type: string + type: object + server.ResponseStatus: + enum: + - Ok + - Fail + type: string + x-enum-varnames: + - OK + - Fail + server.StandardResponse: + properties: + data: {} + message: + type: string + status: + $ref: '#/definitions/server.ResponseStatus' + type: object +info: + contact: {} + title: ISO20022 Client + version: 0.0.1 +paths: + /receive: + get: + description: Tries to receive an ISO20022 message if there is any + produces: + - application/xml + responses: + "200": + description: OK + "204": + description: No Content + summary: Receive a message + tags: + - Messaging + x-code-samples: + - lang: xml + source: "\r\n\r\n\t\r\n\t\tBBBB/150928-CT/EUR/912\r\n\t\t2015-09-28T16:01:00\r\n\t\t2\r\n\t\t504500\r\n\t\t2015-09-29\r\n\t\t\r\n\t\t\tINDA\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t29314569847\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBBBBUS33\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tEEEEDEFF\r\n\t\t\t\r\n\t\t\r\n\t\r\n\t\r\n\t\t\r\n\t\t\tBBBB/150928-CCT/EUR/912/1\r\n\t\t\tABC/ABC-13679/2015-09-15\r\n\t\t\tBBBB/150928-CCT/EUR/912/1\r\n\t\t\r\n\t\t\r\n\t\t\tNORM\r\n\t\t\r\n\t\t499500\r\n\t\t500000\r\n\t\tCRED\r\n\t\t\r\n\t\t\t500\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tBBBBUS33\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tABC + Corporation\r\n\t\t\t\r\n\t\t\t\tTimes Square\r\n\t\t\t\t7\r\n\t\t\t\tNY + 10036\r\n\t\t\t\tNew York\r\n\t\t\t\tUS\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t00125574999\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBBBBUS33\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tDDDDBEBB\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tGHI + Semiconductors\r\n\t\t\t\r\n\t\t\t\tAvenue Brugmann\r\n\t\t\t\t415\r\n\t\t\t\t1180\r\n\t\t\t\tBrussels\r\n\t\t\t\tBE\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBE30001216371411\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tGDDS\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tCINV\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\tABC-13679\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tINDA\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
2015-09-08
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t
\r\n\t\r\n\t\t\r\n\t\t\tBBBB/150928-CCT/EUR/912/2\r\n\t\t\tBBBB/150928-ZZ/JO/164794\r\n\t\t\tBBBB/150928-CCT/EUR/912/2\r\n\t\t\r\n\t\t\r\n\t\t\tNORM\r\n\t\t\r\n\t\t5000\r\n\t\tSHAR\r\n\t\t\r\n\t\t\tMr. + Jones\r\n\t\t\t\r\n\t\t\t\t16th Street\r\n\t\t\t\t30\r\n\t\t\t\tNY10023\r\n\t\t\t\tNew + York\r\n\t\t\t\tUS\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t00125583145\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBBBBUS33\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tEEEEDEFF\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tZZ + Insurances\r\n\t\t\t\r\n\t\t\t\tFriedrich-Ebert-Anlage\r\n\t\t\t\t2-14\r\n\t\t\t\tD-60 + 325\r\n\t\t\t\tFrankfurt am Main\r\n\t\t\t\tDE\r\n\t\t\t\tCity + Haus 1 10th Floor\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tDE89370400440532014000\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tContract + ZZ/JO/164794\r\n\t\t\r\n\t\r\n
\r\n" + /send: + post: + consumes: + - application/xml + description: Send an ISO20022 message + parameters: + - description: ISO20022 message in xml format + in: body + name: body + required: true + schema: + example: "\r\n\r\n\t\r\n\t\tBBBB/150928-CT/EUR/912\r\n\t\t2015-09-28T16:01:00\r\n\t\t2\r\n\t\t504500\r\n\t\t2015-09-29\r\n\t\t\r\n\t\t\tINDA\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t29314569847\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBBBBUS33\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tEEEEDEFF\r\n\t\t\t\r\n\t\t\r\n\t\r\n\t\r\n\t\t\r\n\t\t\tBBBB/150928-CCT/EUR/912/1\r\n\t\t\tABC/ABC-13679/2015-09-15\r\n\t\t\tBBBB/150928-CCT/EUR/912/1\r\n\t\t\r\n\t\t\r\n\t\t\tNORM\r\n\t\t\r\n\t\t499500\r\n\t\t500000\r\n\t\tCRED\r\n\t\t\r\n\t\t\t500\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tBBBBUS33\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tABC + Corporation\r\n\t\t\t\r\n\t\t\t\tTimes Square\r\n\t\t\t\t7\r\n\t\t\t\tNY + 10036\r\n\t\t\t\tNew York\r\n\t\t\t\tUS\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t00125574999\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBBBBUS33\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tDDDDBEBB\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tGHI + Semiconductors\r\n\t\t\t\r\n\t\t\t\tAvenue Brugmann\r\n\t\t\t\t415\r\n\t\t\t\t1180\r\n\t\t\t\tBrussels\r\n\t\t\t\tBE\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBE30001216371411\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tGDDS\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tCINV\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\tABC-13679\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tINDA\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
2015-09-08
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t
\r\n\t\r\n\t\t\r\n\t\t\tBBBB/150928-CCT/EUR/912/2\r\n\t\t\tBBBB/150928-ZZ/JO/164794\r\n\t\t\tBBBB/150928-CCT/EUR/912/2\r\n\t\t\r\n\t\t\r\n\t\t\tNORM\r\n\t\t\r\n\t\t5000\r\n\t\tSHAR\r\n\t\t\r\n\t\t\tMr. + Jones\r\n\t\t\t\r\n\t\t\t\t16th Street\r\n\t\t\t\t30\r\n\t\t\t\tNY10023\r\n\t\t\t\tNew + York\r\n\t\t\t\tUS\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t00125583145\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBBBBUS33\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tEEEEDEFF\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tZZ + Insurances\r\n\t\t\t\r\n\t\t\t\tFriedrich-Ebert-Anlage\r\n\t\t\t\t2-14\r\n\t\t\t\tD-60 + 325\r\n\t\t\t\tFrankfurt am Main\r\n\t\t\t\tDE\r\n\t\t\t\tCity + Haus 1 10th Floor\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tDE89370400440532014000\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tContract + ZZ/JO/164794\r\n\t\t\r\n\t\r\n
\r\n" + type: string + produces: + - application/json + responses: + "201": + description: Created + schema: + allOf: + - $ref: '#/definitions/server.StandardResponse' + - properties: + data: + $ref: '#/definitions/server.MessageSendResponse' + type: object + "400": + description: Bad Request + schema: + allOf: + - $ref: '#/definitions/server.StandardResponse' + - properties: + message: + type: string + type: object + "500": + description: Something bad happened + summary: Send a message + tags: + - Messaging +swagger: "2.0" diff --git a/iso20022/docs/templates/swagger/swagger.html b/iso20022/docs/templates/swagger/swagger.html new file mode 100644 index 0000000..f15e370 --- /dev/null +++ b/iso20022/docs/templates/swagger/swagger.html @@ -0,0 +1,72 @@ + + + + + ISO20022 API Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/iso20022/go.mod b/iso20022/go.mod index 23c64b0..a900633 100644 --- a/iso20022/go.mod +++ b/iso20022/go.mod @@ -42,6 +42,7 @@ require ( github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.9.0 + github.com/swaggo/swag v1.16.3 go.uber.org/mock v0.4.0 go.uber.org/zap v1.23.0 google.golang.org/grpc v1.65.0 @@ -66,6 +67,9 @@ require ( github.com/99designs/keyring v1.2.2 // indirect github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect github.com/CosmWasm/wasmvm v1.5.2 // indirect + github.com/KyleBanks/depth v1.2.1 // indirect + github.com/PuerkitoBio/purell v1.1.1 // indirect + github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/armon/go-metrics v0.4.1 // indirect github.com/aws/aws-sdk-go v1.44.203 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -99,7 +103,6 @@ require ( github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect - github.com/dave/jennifer v1.6.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect @@ -117,6 +120,10 @@ require ( github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.19.6 // indirect + github.com/go-openapi/spec v0.20.4 // indirect + github.com/go-openapi/swag v0.19.15 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.11.2 // indirect @@ -159,6 +166,7 @@ require ( github.com/jmattheis/goverter v1.5.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect + github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.0.9 // indirect github.com/kr/pretty v0.3.1 // indirect @@ -168,6 +176,7 @@ require ( github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/linxGnu/grocksdb v1.7.16 // indirect github.com/magiconair/properties v1.8.7 // indirect + github.com/mailru/easyjson v0.7.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect @@ -225,7 +234,6 @@ require ( golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect golang.org/x/crypto v0.24.0 // indirect golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect - golang.org/x/mod v0.17.0 // indirect golang.org/x/net v0.26.0 // indirect golang.org/x/oauth2 v0.21.0 // indirect golang.org/x/sync v0.7.0 // indirect diff --git a/iso20022/go.sum b/iso20022/go.sum index c0736c9..2cc0ba5 100644 --- a/iso20022/go.sum +++ b/iso20022/go.sum @@ -219,12 +219,18 @@ github.com/CosmWasm/wasmd v0.45.0/go.mod h1:RnSAiqbNIZu4QhO+0pd7qGZgnYAMBPGmXpzT github.com/CosmWasm/wasmvm v1.5.2 h1:+pKB1Mz9GZVt1vadxB+EDdD1FOz3dMNjIKq/58/lrag= github.com/CosmWasm/wasmvm v1.5.2/go.mod h1:Q0bSEtlktzh7W2hhEaifrFp1Erx11ckQZmjq8FLCyys= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= +github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= @@ -355,8 +361,6 @@ github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcX github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/dave/jennifer v1.6.0 h1:MQ/6emI2xM7wt0tJzJzyUik2Q3Tcn2eE0vtYgh4GPVI= -github.com/dave/jennifer v1.6.0/go.mod h1:AxTG893FiZKqxy3FP1kL80VMshSMuz2G+EgvszgGRnk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -431,6 +435,16 @@ github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= +github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M= +github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -634,14 +648,14 @@ github.com/jellydator/ttlcache/v3 v3.2.0 h1:6lqVJ8X3ZaUwvzENqPAobDsXNExfUJd61u++ github.com/jellydator/ttlcache/v3 v3.2.0/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= -github.com/jmattheis/goverter v1.5.0 h1:3ANt/y+OzmB63Kw55ejYPv0J44RqNY781zNETVgi8WQ= -github.com/jmattheis/goverter v1.5.0/go.mod h1:iVIl/4qItWjWj2g3vjouGoYensJbRqDHpzlEVMHHFeY= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= @@ -682,6 +696,11 @@ github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+ github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -845,6 +864,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/swaggo/swag v1.16.3 h1:PnCYjPCah8FK4I26l2F/KQ4yz3sILcVUN3cTlBFA9Pg= +github.com/swaggo/swag v1.16.3/go.mod h1:DImHIuOFXKpMFAQjcC7FG4m3Dg4+QuUgUzJmKjI/gRk= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= @@ -994,6 +1015,7 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1105,6 +1127,7 @@ golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1465,6 +1488,7 @@ google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWn gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -1483,6 +1507,7 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/iso20022/server/handlers.go b/iso20022/server/handlers.go index f3207af..23827a3 100644 --- a/iso20022/server/handlers.go +++ b/iso20022/server/handlers.go @@ -7,6 +7,7 @@ import ( "github.com/gin-gonic/gin" + "github.com/CoreumFoundation/iso20022-client/iso20022/docs" "github.com/CoreumFoundation/iso20022-client/iso20022/processes" ) @@ -15,6 +16,17 @@ type Handler struct { MessageQueue processes.MessageQueue } +// Send godoc +// @Summary Send a message +// @Description Send an ISO20022 message +// @Tags Messaging +// @Accept application/xml +// @Produce json +// @Router /send [post] +// @Param body body string true "ISO20022 message in xml format" SchemaExample(\r\n\r\n\t\r\n\t\tBBBB/150928-CT/EUR/912\r\n\t\t2015-09-28T16:01:00\r\n\t\t2\r\n\t\t504500\r\n\t\t2015-09-29\r\n\t\t\r\n\t\t\tINDA\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t29314569847\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBBBBUS33\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tEEEEDEFF\r\n\t\t\t\r\n\t\t\r\n\t\r\n\t\r\n\t\t\r\n\t\t\tBBBB/150928-CCT/EUR/912/1\r\n\t\t\tABC/ABC-13679/2015-09-15\r\n\t\t\tBBBB/150928-CCT/EUR/912/1\r\n\t\t\r\n\t\t\r\n\t\t\tNORM\r\n\t\t\r\n\t\t499500\r\n\t\t500000\r\n\t\tCRED\r\n\t\t\r\n\t\t\t500\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tBBBBUS33\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tABC Corporation\r\n\t\t\t\r\n\t\t\t\tTimes Square\r\n\t\t\t\t7\r\n\t\t\t\tNY 10036\r\n\t\t\t\tNew York\r\n\t\t\t\tUS\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t00125574999\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBBBBUS33\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tDDDDBEBB\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tGHI Semiconductors\r\n\t\t\t\r\n\t\t\t\tAvenue Brugmann\r\n\t\t\t\t415\r\n\t\t\t\t1180\r\n\t\t\t\tBrussels\r\n\t\t\t\tBE\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBE30001216371411\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tGDDS\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tCINV\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\tABC-13679\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tINDA\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
2015-09-08
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t
\r\n\t\r\n\t\t\r\n\t\t\tBBBB/150928-CCT/EUR/912/2\r\n\t\t\tBBBB/150928-ZZ/JO/164794\r\n\t\t\tBBBB/150928-CCT/EUR/912/2\r\n\t\t\r\n\t\t\r\n\t\t\tNORM\r\n\t\t\r\n\t\t5000\r\n\t\tSHAR\r\n\t\t\r\n\t\t\tMr. Jones\r\n\t\t\t\r\n\t\t\t\t16th Street\r\n\t\t\t\t30\r\n\t\t\t\tNY10023\r\n\t\t\t\tNew York\r\n\t\t\t\tUS\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t00125583145\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBBBBUS33\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tEEEEDEFF\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tZZ Insurances\r\n\t\t\t\r\n\t\t\t\tFriedrich-Ebert-Anlage\r\n\t\t\t\t2-14\r\n\t\t\t\tD-60 325\r\n\t\t\t\tFrankfurt am Main\r\n\t\t\t\tDE\r\n\t\t\t\tCity Haus 1 10th Floor\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tDE89370400440532014000\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tContract ZZ/JO/164794\r\n\t\t\r\n\t\r\n
\r\n) +// @Success 201 {object} StandardResponse{data=MessageSendResponse} +// @Failure 400 {object} StandardResponse{message=string} +// @Failure 500 "Something bad happened" func (h *Handler) Send(c *gin.Context) { defer func(Body io.ReadCloser) { _ = Body.Close() @@ -22,24 +34,36 @@ func (h *Handler) Send(c *gin.Context) { message, err := io.ReadAll(c.Request.Body) if err != nil { - c.AbortWithStatus(http.StatusBadRequest) + resp := GetFailResponseFromErrors(err) + c.AbortWithStatusJSON(http.StatusBadRequest, resp) return } messageId, _, err := h.Parser.ExtractMetadataFromIsoMessage(message) if err != nil { - _ = c.AbortWithError(http.StatusBadRequest, err) + resp := GetFailResponseFromErrors(err) + c.AbortWithStatusJSON(http.StatusBadRequest, resp) return } // TODO: Check for duplicate messages by ID fmt.Printf("Got message with ID : %s\n", messageId) - c.Status(http.StatusCreated) + resp := GetSuccessResponse(MessageSendResponse{MessageID: messageId}) + c.JSON(http.StatusCreated, resp) go h.MessageQueue.PushToSend(messageId, message) } +// Receive godoc +// @Summary Receive a message +// @Description Tries to receive an ISO20022 message if there is any +// @Tags Messaging +// @Produce application/xml +// @Router /receive [get] +// @x-code-samples [{"lang":"xml","source":"\r\n\r\n\t\r\n\t\tBBBB/150928-CT/EUR/912\r\n\t\t2015-09-28T16:01:00\r\n\t\t2\r\n\t\t504500\r\n\t\t2015-09-29\r\n\t\t\r\n\t\t\tINDA\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t29314569847\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBBBBUS33\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tEEEEDEFF\r\n\t\t\t\r\n\t\t\r\n\t\r\n\t\r\n\t\t\r\n\t\t\tBBBB/150928-CCT/EUR/912/1\r\n\t\t\tABC/ABC-13679/2015-09-15\r\n\t\t\tBBBB/150928-CCT/EUR/912/1\r\n\t\t\r\n\t\t\r\n\t\t\tNORM\r\n\t\t\r\n\t\t499500\r\n\t\t500000\r\n\t\tCRED\r\n\t\t\r\n\t\t\t500\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tBBBBUS33\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tABC Corporation\r\n\t\t\t\r\n\t\t\t\tTimes Square\r\n\t\t\t\t7\r\n\t\t\t\tNY 10036\r\n\t\t\t\tNew York\r\n\t\t\t\tUS\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t00125574999\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBBBBUS33\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tDDDDBEBB\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tGHI Semiconductors\r\n\t\t\t\r\n\t\t\t\tAvenue Brugmann\r\n\t\t\t\t415\r\n\t\t\t\t1180\r\n\t\t\t\tBrussels\r\n\t\t\t\tBE\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBE30001216371411\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tGDDS\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tCINV\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\tABC-13679\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tINDA\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
2015-09-08
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t
\r\n\t\r\n\t\t\r\n\t\t\tBBBB/150928-CCT/EUR/912/2\r\n\t\t\tBBBB/150928-ZZ/JO/164794\r\n\t\t\tBBBB/150928-CCT/EUR/912/2\r\n\t\t\r\n\t\t\r\n\t\t\tNORM\r\n\t\t\r\n\t\t5000\r\n\t\tSHAR\r\n\t\t\r\n\t\t\tMr. Jones\r\n\t\t\t\r\n\t\t\t\t16th Street\r\n\t\t\t\t30\r\n\t\t\t\tNY10023\r\n\t\t\t\tNew York\r\n\t\t\t\tUS\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t00125583145\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tBBBBUS33\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tEEEEDEFF\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tZZ Insurances\r\n\t\t\t\r\n\t\t\t\tFriedrich-Ebert-Anlage\r\n\t\t\t\t2-14\r\n\t\t\t\tD-60 325\r\n\t\t\t\tFrankfurt am Main\r\n\t\t\t\tDE\r\n\t\t\t\tCity Haus 1 10th Floor\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tDE89370400440532014000\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\tContract ZZ/JO/164794\r\n\t\t\r\n\t\r\n
\r\n"}] +// @Success 200 +// @Response 204 func (h *Handler) Receive(c *gin.Context) { message, ok := h.MessageQueue.PopFromReceive() if ok { @@ -48,3 +72,11 @@ func (h *Handler) Receive(c *gin.Context) { c.Status(http.StatusNoContent) } } + +func (h *Handler) Doc(c *gin.Context) { + c.Data(http.StatusOK, "text/html; charset=utf-8", docs.SwaggerTemplate) +} + +func (h *Handler) Swagger(c *gin.Context) { + c.Data(http.StatusOK, "application/json", docs.SwaggerJson) +} diff --git a/iso20022/server/server.go b/iso20022/server/server.go index 5f14329..7762267 100644 --- a/iso20022/server/server.go +++ b/iso20022/server/server.go @@ -26,6 +26,9 @@ func createHandlers(parser processes.Parser, messageQueue processes.MessageQueue MessageQueue: messageQueue, } + r.GET("", h.Doc) + r.GET("/swagger.json", h.Swagger) + v1 := r.Group("/v1") v1.POST("/send", h.Send) diff --git a/iso20022/server/standard_response.go b/iso20022/server/standard_response.go new file mode 100644 index 0000000..acc8296 --- /dev/null +++ b/iso20022/server/standard_response.go @@ -0,0 +1,43 @@ +package server + +import ( + "bytes" +) + +const ( + OK ResponseStatus = "Ok" + Fail ResponseStatus = "Fail" +) + +type ResponseStatus string + +type StandardResponse struct { + Status ResponseStatus `json:"status"` + Message string `json:"message"` + Data any `json:"data,omitempty"` +} + +func GetFailResponse(msg string, data map[string]string) StandardResponse { + return StandardResponse{ + Status: Fail, + Message: msg, + Data: data, + } +} + +func GetSuccessResponse(data any) StandardResponse { + return StandardResponse{ + Status: OK, + Data: data, + } +} + +func GetFailResponseFromErrors(errors ...error) StandardResponse { + buf := bytes.Buffer{} + for _, err := range errors { + buf.WriteString(err.Error()) + buf.WriteString("\n") + } + + return GetFailResponse(buf.String(), nil) +} diff --git a/iso20022/server/structs.go b/iso20022/server/structs.go new file mode 100644 index 0000000..8c19268 --- /dev/null +++ b/iso20022/server/structs.go @@ -0,0 +1,5 @@ +package server + +type MessageSendResponse struct { + MessageID string `json:"message_id"` +}