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

Commit 0e529d8

Browse files
committed
handler: implement users
1 parent 3019cf7 commit 0e529d8

File tree

5 files changed

+419
-108
lines changed

5 files changed

+419
-108
lines changed

infra/default.nix

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@ rec
5151
export AWS_ACCESS_KEY_ID=dummy
5252
export AWS_SECRET_ACCESS_KEY=dummy
5353
54+
aws dynamodb create-table \
55+
--table-name Users \
56+
--attribute-definitions \
57+
AttributeName=UserId,AttributeType=S \
58+
--key-schema AttributeName=UserId,KeyType=HASH \
59+
--endpoint-url http://127.0.0.1:8000 \
60+
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
61+
> /dev/null
62+
5463
aws dynamodb create-table \
5564
--table-name Decks \
5665
--attribute-definitions \

infra/dynamo.tf

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
1-
resource "aws_dynamodb_table" "deckdeckgo-test-dynamodb-table" {
1+
resource "aws_dynamodb_table" "deckdeckgo-test-dynamodb-table-users" {
2+
name = "Users"
3+
billing_mode = "PAY_PER_REQUEST"
4+
hash_key = "UserId"
5+
6+
attribute {
7+
name = "UserId"
8+
type = "S"
9+
}
10+
11+
}
12+
13+
resource "aws_dynamodb_table" "deckdeckgo-test-dynamodb-table-decks" {
214
name = "Decks"
315
billing_mode = "PAY_PER_REQUEST"
416
hash_key = "DeckId"

infra/handler/app/Swagger.hs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,22 @@ import qualified Servant as Servant
1111
import qualified Servant.Swagger as Servant
1212
import qualified Servant.Swagger.UI.Extended as Servant
1313

14-
-- | API type with bells and whistles, i.e. schema file and swagger-ui.
15-
type SwaggerAPI = Servant.SwaggerSchemaUI "" "swagger.json"
14+
type SwaggerAPI = Servant.SwaggerSchemaUI "swagger-ui" "swagger.json"
1615

1716
swaggerApi :: Proxy SwaggerAPI
1817
swaggerApi = Proxy
1918

2019
main :: IO ()
21-
main = serverSwagger
20+
main = serveSwagger
2221

2322
swagger :: Swagger.Swagger
2423
swagger = Servant.toSwagger (Proxy :: Proxy DeckGo.Handler.SlidesAPI)
2524

2625
dumpSwagger :: FilePath -> IO ()
2726
dumpSwagger out = Servant.swaggerSchemaUiDump out swaggerApi (Proxy :: Proxy DeckGo.Handler.SlidesAPI)
2827

29-
serverSwagger :: IO ()
30-
serverSwagger =
28+
serveSwagger :: IO ()
29+
serveSwagger =
3130
Warp.run 3000 $
3231
Servant.serve swaggerApi $
3332
Servant.swaggerSchemaUIServer swagger

infra/handler/app/Test.hs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,17 @@ main = do
2020

2121
let clientEnv = mkClientEnv manager' (BaseUrl Http "localhost" 8080 "")
2222

23+
runClientM usersGet' clientEnv >>= \case
24+
Left err -> error $ "Expected users, got error: " <> show err
25+
Right [] -> pure ()
26+
Right decks -> error $ "Expected 0 users, got: " <> show decks
27+
2328
runClientM (decksGet' b) clientEnv >>= \case
2429
Left err -> error $ "Expected decks, got error: " <> show err
2530
Right [] -> pure ()
2631
Right decks -> error $ "Expected 0 decks, got: " <> show decks
2732

28-
let someDeck = Deck { deckSlides = [] }
33+
let someDeck = Deck { deckSlides = [] , deckDeckname = Deckname "foo" }
2934

3035
deckId <- runClientM (decksPost' someDeck) clientEnv >>= \case
3136
Left err -> error $ "Expected new deck, got error: " <> show err
@@ -37,7 +42,7 @@ main = do
3742
Left err -> error $ "Expected new slide, got error: " <> show err
3843
Right (WithId slideId _) -> pure slideId
3944

40-
let newDeck = Deck { deckSlides = [ slideId ] }
45+
let newDeck = Deck { deckSlides = [ slideId ], deckDeckname = Deckname "bar" }
4146

4247
runClientM (decksPut' b deckId newDeck) clientEnv >>= \case
4348
Left err -> error $ "Expected updated deck, got error: " <> show err
@@ -92,18 +97,32 @@ main = do
9297
Right decks ->
9398
if decks == [] then pure () else (error $ "Expected no decks, got: " <> show decks)
9499

95-
-- 'client' allows you to produce operations to query an API from a client.
100+
101+
usersGet' :: ClientM [WithId UserId User]
102+
_usersGetUserId' :: UserId -> ClientM (WithId UserId User)
103+
_usersPost' :: T.Text -> User -> ClientM (WithId UserId User)
104+
_usersPut' :: T.Text -> UserId -> User -> ClientM (WithId UserId User)
105+
_usersDelete' :: T.Text -> UserId -> ClientM ()
106+
96107
decksGet' :: T.Text -> ClientM [WithId DeckId Deck]
97108
decksGetDeckId' :: T.Text -> DeckId -> ClientM (WithId DeckId Deck)
98109
decksPost' :: Deck -> ClientM (WithId DeckId Deck)
99110
decksPut' :: T.Text -> DeckId -> Deck -> ClientM (WithId DeckId Deck)
100111
decksDelete' :: T.Text -> DeckId -> ClientM ()
112+
101113
slidesGet' :: ClientM [WithId SlideId Slide]
102114
slidesGetSlideId' :: SlideId -> ClientM (WithId SlideId Slide)
103115
slidesPost' :: Slide -> ClientM (WithId SlideId Slide)
104116
slidesPut' :: SlideId -> Slide -> ClientM (WithId SlideId Slide)
105117
slidesDelete' :: SlideId -> ClientM ()
106118
((
119+
usersGet' :<|>
120+
_usersGetUserId' :<|>
121+
_usersPost' :<|>
122+
_usersPut' :<|>
123+
_usersDelete'
124+
) :<|>
125+
(
107126
decksGet' :<|>
108127
decksGetDeckId' :<|>
109128
decksPost' :<|>

0 commit comments

Comments
 (0)