@@ -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
181182instance 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
188190instance 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
195198instance Aeson. FromJSON Deck where
@@ -474,7 +477,7 @@ decksPut :: Aws.Env -> Firebase.UserId -> DeckId -> Deck -> Servant.Handler (Ite
474477decksPut 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
658661deckToItem :: 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
665669deckToItem' :: 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
671676itemToDeck :: HMS. HashMap T. Text DynamoDB. AttributeValue -> Maybe (Item DeckId Deck )
672677itemToDeck 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)) =
708714deckOwnerIdFromAttributeValue :: DynamoDB. AttributeValue -> Maybe UserId
709715deckOwnerIdFromAttributeValue 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
713736slideToItem :: SlideId -> Slide -> HMS. HashMap T. Text DynamoDB. AttributeValue
0 commit comments