+17
Dockerfile
+17
Dockerfile
+7
Dockerfile-stubby
+7
Dockerfile-stubby
+4
-3
cmd/app/main.go
+4
-3
cmd/app/main.go
···
18
18
19
19
func main() {
20
20
providers := providers.NewUseProviders([]providers.Provider{
21
-
providers.NewBraintreeProvider(getEnv("BRAINTREE_URL", "localhost:8000")),
22
-
providers.NewStripeProvider(getEnv("STRIPE_URL", "localhost:8001")),
21
+
providers.NewBraintreeProvider(getEnv("BRAINTREE_URL", "localhost:8001")),
22
+
providers.NewStripeProvider(getEnv("STRIPE_URL", "localhost:8002")),
23
23
})
24
24
paymentsService := service.NewPaymentService(providers)
25
25
26
-
server := web.NewServer(paymentsService, "8000")
26
+
port := getEnv("PORT", "8000")
27
+
server := web.NewServer(paymentsService, port)
27
28
server.ConfigureRouter()
28
29
29
30
if err := server.Start(); err != nil {
+29
docker-compose.yml
+29
docker-compose.yml
···
1
+
services:
2
+
api-gateway:
3
+
build:
4
+
dockerfile: $PWD/Dockerfile
5
+
ports:
6
+
- "8000:8000"
7
+
environment:
8
+
PORT: 8000
9
+
BRAINTREE_URL: stripe
10
+
STRIPE_URL: braintree
11
+
depends_on:
12
+
- stripe
13
+
- braintree
14
+
15
+
stripe:
16
+
build:
17
+
dockerfile: $PWD/Dockerfile-stubby
18
+
environment:
19
+
PORT: 8882
20
+
volumes:
21
+
- $PWD/mocks/stripe.yml:/app/mock.yml
22
+
23
+
braintree:
24
+
build:
25
+
dockerfile: $PWD/Dockerfile-stubby
26
+
environment:
27
+
PORT: 8882
28
+
volumes:
29
+
- $PWD/mocks/braintree.yml:/app/mock.yml
+27
mocks/braintree.yml
+27
mocks/braintree.yml
···
1
+
- request:
2
+
url: ^/charge$
3
+
method: POST
4
+
headers:
5
+
content-type: application/json
6
+
response:
7
+
- status: 200
8
+
latency: 5000
9
+
headers:
10
+
content-type: application/json
11
+
server: stubbedServer/4.2
12
+
body: >
13
+
{
14
+
"amount": 1000,
15
+
"currency": "BRL",
16
+
"description": "",
17
+
"paymentMethod": {
18
+
"type": "card",
19
+
"card": {
20
+
"number": "",
21
+
"holderName": "",
22
+
"cvv": "",
23
+
"expirationDate": "22/2025",
24
+
"installments": 1
25
+
}
26
+
}
27
+
}
+25
mocks/stripe.yml
+25
mocks/stripe.yml
···
1
+
- request:
2
+
url: ^/transactions$
3
+
method: POST
4
+
headers:
5
+
content-type: application/json
6
+
response:
7
+
- status: 200
8
+
latency: 5000
9
+
headers:
10
+
content-type: application/json
11
+
server: stubbedServer/4.2
12
+
body: >
13
+
{
14
+
"amount": 1000,
15
+
"currency": "BRL",
16
+
"statementDescriptor": "",
17
+
"paymentType": "card",
18
+
"card": {
19
+
"number": "",
20
+
"holder": "",
21
+
"cvv": "",
22
+
"expiration": "22/2025",
23
+
"installmentNumber": 1
24
+
}
25
+
}