@@ -108,12 +108,14 @@ type API =
108108
109109type DecksAPI =
110110 Get '[JSON ] [WithId DeckId Deck ] :<|>
111+ Capture " deck_id" DeckId :> Get '[JSON ] (WithId DeckId Deck ) :<|>
111112 ReqBody '[JSON ] Deck :> Post '[JSON ] (WithId DeckId Deck ) :<|>
112113 Capture " deck_id" DeckId :> ReqBody '[JSON ] Deck :> Put '[JSON ] (WithId DeckId Deck ) :<|>
113114 Capture " deck_id" DeckId :> Delete '[JSON ] ()
114115
115116type SlidesAPI =
116117 Get '[JSON ] [WithId SlideId Slide ] :<|>
118+ Capture " slide_id" SlideId :> Get '[JSON ] (WithId SlideId Slide ) :<|>
117119 ReqBody '[JSON ] Slide :> Post '[JSON ] (WithId SlideId Slide ) :<|>
118120 Capture " slide_id" SlideId :> ReqBody '[JSON ] Slide :> Put '[JSON ] (WithId SlideId Slide ) :<|>
119121 Capture " slide_id" SlideId :> Delete '[JSON ] ()
@@ -133,11 +135,13 @@ server env = serveDecks :<|> serveSlides
133135 where
134136 serveDecks =
135137 decksGet env :<|>
138+ decksGetDeckId env :<|>
136139 decksPost env :<|>
137140 decksPut env :<|>
138141 decksDelete env
139142 serveSlides =
140143 slidesGet env :<|>
144+ slidesGetSlideId env :<|>
141145 slidesPost env :<|>
142146 slidesPut env :<|>
143147 slidesDelete env
@@ -156,6 +160,32 @@ decksGet env = do
156160 liftIO $ print e
157161 Servant. throwError Servant. err500
158162
163+ decksGetDeckId :: Aws. Env -> DeckId -> Servant. Handler (WithId DeckId Deck )
164+ decksGetDeckId env deckId = do
165+ res <- runAWS env $ Aws. send $ DynamoDB. getItem " Decks" &
166+ DynamoDB. giKey .~ HMS. singleton " DeckId" (deckIdToAttributeValue deckId)
167+ case res of
168+ Right getItemResponse -> do
169+ case getItemResponse ^. DynamoDB. girsResponseStatus of
170+ 200 -> pure ()
171+ 404 -> do
172+ liftIO $ putStrLn $ " Item not found: " <> show getItemResponse
173+ Servant. throwError Servant. err404
174+ s -> do
175+ liftIO $
176+ putStrLn $ " Unkown response status: " <> show s <>
177+ " in response " <> show getItemResponse
178+ Servant. throwError Servant. err500
179+
180+ case itemToDeck (getItemResponse ^. DynamoDB. girsItem) of
181+ Nothing -> do
182+ liftIO $ putStrLn $ " Could not parse response: " <> show getItemResponse
183+ Servant. throwError Servant. err500
184+ Just deck -> pure deck
185+ Left e -> do
186+ liftIO $ print e
187+ Servant. throwError Servant. err500
188+
159189decksPost :: Aws. Env -> Deck -> Servant. Handler (WithId DeckId Deck )
160190decksPost env deck = do
161191
@@ -226,6 +256,32 @@ slidesGet env = do
226256 liftIO $ print e
227257 Servant. throwError Servant. err500
228258
259+ slidesGetSlideId :: Aws. Env -> SlideId -> Servant. Handler (WithId SlideId Slide )
260+ slidesGetSlideId env slideId = do
261+ res <- runAWS env $ Aws. send $ DynamoDB. getItem " Slides" &
262+ DynamoDB. giKey .~ HMS. singleton " SlideId" (slideIdToAttributeValue slideId)
263+ case res of
264+ Right getItemResponse -> do
265+ case getItemResponse ^. DynamoDB. girsResponseStatus of
266+ 200 -> pure ()
267+ 404 -> do
268+ liftIO $ putStrLn $ " Item not found: " <> show getItemResponse
269+ Servant. throwError Servant. err404
270+ s -> do
271+ liftIO $
272+ putStrLn $ " Unkown response status: " <> show s <>
273+ " in response " <> show getItemResponse
274+ Servant. throwError Servant. err500
275+
276+ case itemToSlide (getItemResponse ^. DynamoDB. girsItem) of
277+ Nothing -> do
278+ liftIO $ putStrLn $ " Could not parse response: " <> show getItemResponse
279+ Servant. throwError Servant. err500
280+ Just slide -> pure slide
281+ Left e -> do
282+ liftIO $ print e
283+ Servant. throwError Servant. err500
284+
229285slidesPost :: Aws. Env -> Slide -> Servant. Handler (WithId SlideId Slide )
230286slidesPost env slide = do
231287 slideId <- liftIO $ SlideId <$> newId
0 commit comments