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

Commit d2761a6

Browse files
committed
handler: deck attributes
1 parent 47dcbdd commit d2761a6

File tree

2 files changed

+30
-7
lines changed

2 files changed

+30
-7
lines changed

infra/handler/app/Test.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ main = do
3434
let someFirebaseId = FirebaseId "the-uid" -- from ./token
3535
let someUserId = UserId someFirebaseId
3636

37-
let someDeck = Deck { deckSlides = [] , deckDeckname = Deckname "foo", deckOwnerId = someUserId }
37+
let someDeck = Deck { deckSlides = [] , deckDeckname = Deckname "foo", deckOwnerId = someUserId, deckAttributes = HMS.empty }
3838

3939
deckId <- runClientM (decksPost' b someDeck) clientEnv >>= \case
4040
Left err -> error $ "Expected new deck, got error: " <> show err
@@ -46,7 +46,7 @@ main = do
4646
Left err -> error $ "Expected new slide, got error: " <> show err
4747
Right (Item slideId _) -> pure slideId
4848

49-
let newDeck = Deck { deckSlides = [ slideId ], deckDeckname = Deckname "bar", deckOwnerId = someUserId }
49+
let newDeck = Deck { deckSlides = [ slideId ], deckDeckname = Deckname "bar", deckOwnerId = someUserId, deckAttributes = HMS.singleton "foo" "bar" }
5050

5151
runClientM (decksPut' b deckId newDeck) clientEnv >>= \case
5252
Left err -> error $ "Expected updated deck, got error: " <> show err

infra/handler/src/DeckGo/Handler.hs

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ data Deck = Deck
176176
{ deckSlides :: [SlideId]
177177
, deckDeckname :: Deckname
178178
, deckOwnerId :: UserId
179+
, deckAttributes :: HMS.HashMap T.Text T.Text
179180
} deriving (Show, Eq)
180181

181182
instance FromJSONObject Deck where
@@ -184,12 +185,14 @@ instance FromJSONObject Deck where
184185
<$> obj .: "slides"
185186
<*> obj .: "name"
186187
<*> obj .: "owner_id"
188+
<*> obj .: "attributes"
187189

188190
instance ToJSONObject Deck where
189191
toJSONObject deck = HMS.fromList
190192
[ "slides" .= deckSlides deck
191193
, "name" .= deckDeckname deck
192194
, "owner_id" .= deckOwnerId deck
195+
, "attributes" .= deckAttributes deck
193196
]
194197

195198
instance Aeson.FromJSON Deck where
@@ -474,7 +477,7 @@ decksPut :: Aws.Env -> Firebase.UserId -> DeckId -> Deck -> Servant.Handler (Ite
474477
decksPut env _ deckId deck = do
475478

476479
res <- runAWS env $ Aws.send $ DynamoDB.updateItem "Decks" &
477-
DynamoDB.uiUpdateExpression .~ Just "SET DeckSlides = :s, DeckName = :n, DeckOwnerId = :o" &
480+
DynamoDB.uiUpdateExpression .~ Just "SET DeckSlides = :s, DeckName = :n, DeckOwnerId = :o, DeckAttributes = :a" &
478481
DynamoDB.uiExpressionAttributeValues .~ deckToItem' deck &
479482
DynamoDB.uiReturnValues .~ Just DynamoDB.UpdatedNew &
480483
DynamoDB.uiKey .~ HMS.singleton "DeckId"
@@ -656,24 +659,27 @@ userDecksFromAttributeValue attr =
656659
-- DECKS
657660

658661
deckToItem :: DeckId -> Deck -> HMS.HashMap T.Text DynamoDB.AttributeValue
659-
deckToItem deckId Deck{deckSlides, deckDeckname, deckOwnerId} =
662+
deckToItem deckId Deck{deckSlides, deckDeckname, deckOwnerId, deckAttributes} =
660663
HMS.singleton "DeckId" (deckIdToAttributeValue deckId) <>
661664
HMS.singleton "DeckSlides" (deckSlidesToAttributeValue deckSlides) <>
662665
HMS.singleton "DeckName" (deckNameToAttributeValue deckDeckname) <>
663-
HMS.singleton "DeckOwnerId" (deckOwnerIdToAttributeValue deckOwnerId)
666+
HMS.singleton "DeckOwnerId" (deckOwnerIdToAttributeValue deckOwnerId) <>
667+
HMS.singleton "DeckAttributes" (deckAttributesToAttributeValue deckAttributes)
664668

665669
deckToItem' :: Deck -> HMS.HashMap T.Text DynamoDB.AttributeValue
666-
deckToItem' Deck{deckSlides, deckDeckname, deckOwnerId} =
670+
deckToItem' Deck{deckSlides, deckDeckname, deckOwnerId, deckAttributes} =
667671
HMS.singleton ":s" (deckSlidesToAttributeValue deckSlides) <>
668672
HMS.singleton ":n" (deckNameToAttributeValue deckDeckname) <>
669-
HMS.singleton ":o" (deckOwnerIdToAttributeValue deckOwnerId)
673+
HMS.singleton ":o" (deckOwnerIdToAttributeValue deckOwnerId) <>
674+
HMS.singleton ":a" (deckAttributesToAttributeValue deckAttributes)
670675

671676
itemToDeck :: HMS.HashMap T.Text DynamoDB.AttributeValue -> Maybe (Item DeckId Deck)
672677
itemToDeck item = do
673678
deckId <- HMS.lookup "DeckId" item >>= deckIdFromAttributeValue
674679
deckSlides <- HMS.lookup "DeckSlides" item >>= deckSlidesFromAttributeValue
675680
deckDeckname <- HMS.lookup "DeckName" item >>= deckNameFromAttributeValue
676681
deckOwnerId <- HMS.lookup "DeckOwnerId" item >>= deckOwnerIdFromAttributeValue
682+
deckAttributes <- HMS.lookup "DeckAttributes" item >>= deckAttributesFromAttributeValue
677683
pure $ Item deckId Deck{..}
678684

679685
-- DECK ATTRIBUTES
@@ -708,6 +714,23 @@ deckOwnerIdToAttributeValue (UserId (FirebaseId deckOwnerId)) =
708714
deckOwnerIdFromAttributeValue :: DynamoDB.AttributeValue -> Maybe UserId
709715
deckOwnerIdFromAttributeValue attr = (UserId . FirebaseId) <$> attr ^. DynamoDB.avS
710716

717+
deckAttributesToAttributeValue :: HMS.HashMap T.Text T.Text -> DynamoDB.AttributeValue
718+
deckAttributesToAttributeValue attributes =
719+
DynamoDB.attributeValue & DynamoDB.avM .~
720+
HMS.map attributeValueToAttributeValue attributes
721+
where
722+
attributeValueToAttributeValue :: T.Text -> DynamoDB.AttributeValue
723+
attributeValueToAttributeValue attrValue =
724+
DynamoDB.attributeValue & DynamoDB.avB .~ Just (T.encodeUtf8 attrValue)
725+
726+
deckAttributesFromAttributeValue :: DynamoDB.AttributeValue -> Maybe (HMS.HashMap T.Text T.Text)
727+
deckAttributesFromAttributeValue attr =
728+
traverse attributeValueFromAttributeValue (attr ^. DynamoDB.avM)
729+
where
730+
attributeValueFromAttributeValue :: DynamoDB.AttributeValue -> Maybe T.Text
731+
attributeValueFromAttributeValue attrValue =
732+
T.decodeUtf8 <$> attrValue ^. DynamoDB.avB
733+
711734
-- SLIDES
712735

713736
slideToItem :: SlideId -> Slide -> HMS.HashMap T.Text DynamoDB.AttributeValue

0 commit comments

Comments
 (0)