Skip to content
This repository was archived by the owner on Feb 6, 2024. It is now read-only.

Commit 7b78019

Browse files
authored
Merge pull request #77 from deckgo/nm-put
handler: handle PUT
2 parents fd62669 + c92bc71 commit 7b78019

File tree

12 files changed

+643
-263
lines changed

12 files changed

+643
-263
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ firebase.json
3636

3737
*.tfstate
3838
*.tfstate.backup
39+
*.tfstate.lock*
3940

4041
result
4142
result-*

infra/default.nix

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,60 @@
11
with { pkgs = import ./nix {}; };
22

3-
# TODO:
4-
# - plug DynamoDBLocal in tests
5-
# -> https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html
6-
73
rec
84
{ function =
9-
pkgs.wai-lambda.wai-lambda-js-build-lambda "${handler}/bin/deckdeckgo-handler";
5+
pkgs.wai-lambda.wai-lambda-js-build-lambda "${handlerStatic}/bin/handler";
6+
7+
handlerStatic = pkgs.haskellPackagesStatic.deckdeckgo-handler;
8+
handler = pkgs.haskellPackages.deckdeckgo-handler;
9+
10+
dynamoJar = pkgs.runCommand "dynamodb-jar" { buildInputs = [ pkgs.gnutar ]; }
11+
''
12+
mkdir -p $out
13+
cd $out
14+
tar -xvf ${pkgs.sources.dynamodb}
15+
'';
16+
17+
test = pkgs.runCommand "tests" { buildInputs = [ pkgs.jre pkgs.curl pkgs.netcat pkgs.awscli ]; }
18+
''
19+
20+
java -Djava.library.path=${dynamoJar}/DynamoDBLocal_lib -jar ${dynamoJar}/DynamoDBLocal.jar -sharedDb -port 8000 &
21+
22+
while ! nc -z 127.0.0.1 8000; do
23+
echo waiting for DynamoDB
24+
sleep 1
25+
done
26+
export AWS_DEFAULT_REGION=us-east-1
27+
export AWS_ACCESS_KEY_ID=dummy
28+
export AWS_SECRET_ACCESS_KEY=dummy
29+
30+
aws dynamodb create-table \
31+
--table-name Decks \
32+
--attribute-definitions \
33+
AttributeName=DeckId,AttributeType=S \
34+
--key-schema AttributeName=DeckId,KeyType=HASH \
35+
--endpoint-url http://127.0.0.1:8000 \
36+
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
37+
38+
aws dynamodb create-table \
39+
--table-name Slides \
40+
--attribute-definitions \
41+
AttributeName=SlideId,AttributeType=S \
42+
--key-schema AttributeName=SlideId,KeyType=HASH \
43+
--endpoint-url http://127.0.0.1:8000 \
44+
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
45+
46+
NIX_REDIRECTS=/etc/protocols=${pkgs.iana-etc}/etc/protocols \
47+
LD_PRELOAD="${pkgs.libredirect}/lib/libredirect.so" \
48+
${handler}/bin/server &
49+
50+
while ! nc -z 127.0.0.1 8080; do
51+
echo waiting for warp
52+
sleep 1
53+
done
54+
55+
echo "Running tests"
56+
${handler}/bin/test
1057
11-
handler = pkgs.haskellPackagesStatic.deckdeckgo-handler;
58+
touch $out
59+
'';
1260
}

infra/handler/Main.hs

Lines changed: 0 additions & 235 deletions
This file was deleted.

infra/handler/app/Handler.hs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import UnliftIO
2+
import qualified Network.AWS as Aws
3+
import qualified DeckGo.Handler
4+
import qualified Network.Wai.Handler.Lambda as Lambda
5+
import qualified Network.Wai.Middleware.Cors as Cors
6+
7+
main :: IO ()
8+
main = do
9+
hSetBuffering stdin LineBuffering
10+
hSetBuffering stdout LineBuffering
11+
12+
liftIO $ putStrLn "Booting..."
13+
env <- Aws.newEnv Aws.Discover
14+
15+
liftIO $ putStrLn "Booted!"
16+
Lambda.run $ Cors.simpleCors $ DeckGo.Handler.application env

infra/handler/app/Server.hs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{-# LANGUAGE OverloadedStrings #-}
2+
3+
import UnliftIO
4+
import Control.Lens
5+
import qualified Network.HTTP.Client as HTTPClient
6+
import qualified Network.HTTP.Client.TLS as HTTPClient
7+
import qualified Network.AWS as Aws
8+
import qualified DeckGo.Handler
9+
import qualified Network.Wai.Handler.Warp as Warp
10+
11+
main :: IO ()
12+
main = do
13+
hSetBuffering stdin LineBuffering
14+
hSetBuffering stdout LineBuffering
15+
mgr <- HTTPClient.newManager HTTPClient.tlsManagerSettings
16+
{ HTTPClient.managerModifyRequest = rerouteDynamoDB
17+
}
18+
env <- Aws.newEnv Aws.Discover <&> Aws.envManager .~ mgr
19+
Warp.run 8080 $ DeckGo.Handler.application env
20+
21+
rerouteDynamoDB :: HTTPClient.Request -> IO HTTPClient.Request
22+
rerouteDynamoDB req =
23+
case HTTPClient.host req of
24+
"dynamodb.us-east-1.amazonaws.com" ->
25+
pure req
26+
{ HTTPClient.host = "127.0.0.1"
27+
, HTTPClient.port = 8000
28+
, HTTPClient.secure = False
29+
}
30+
_ -> pure req

0 commit comments

Comments
 (0)