@@ -237,9 +237,14 @@ newtype Deckname = Deckname { unDeckname :: T.Text }
237237 deriving stock (Show , Eq )
238238 deriving newtype (Aeson.FromJSON , Aeson.ToJSON )
239239
240+ newtype Deckbackground = Deckbackground { unDeckbackground :: T. Text }
241+ deriving stock (Show , Eq )
242+ deriving newtype (Aeson.FromJSON , Aeson.ToJSON )
243+
240244data Deck = Deck
241245 { deckSlides :: [SlideId ]
242246 , deckDeckname :: Deckname
247+ , deckDeckbackground :: Maybe Deckbackground
243248 , deckOwnerId :: UserId
244249 , deckAttributes :: HMS. HashMap T. Text T. Text
245250 } deriving (Show , Eq )
@@ -267,13 +272,15 @@ instance FromJSONObject Deck where
267272 Deck
268273 <$> obj .: " slides"
269274 <*> obj .: " name"
275+ <*> obj .: " background"
270276 <*> obj .: " owner_id"
271277 <*> obj .:? " attributes" .!= HMS. empty
272278
273279instance ToJSONObject Deck where
274280 toJSONObject deck = HMS. fromList
275281 [ " slides" .= deckSlides deck
276282 , " name" .= deckDeckname deck
283+ , " background" .= deckDeckbackground deck
277284 , " owner_id" .= deckOwnerId deck
278285 , " attributes" .= deckAttributes deck
279286 ]
@@ -772,7 +779,17 @@ decksPut env fuid deckId deck = do
772779 Servant. throwError Servant. err404
773780
774781 res <- runAWS env $ Aws. send $ DynamoDB. updateItem " Decks" &
775- DynamoDB. uiUpdateExpression .~ Just " SET DeckSlides = :s, DeckName = :n, DeckOwnerId = :o, DeckAttributes = :a" &
782+ DynamoDB. uiUpdateExpression .~ Just
783+ (dynamoSet $
784+ (if isJust (deckDeckbackground deck)
785+ then [ Set " DeckBackground" " :b" ]
786+ else [ Remove " DeckBackground" ]) <>
787+ [ Set " DeckSlides" " :s"
788+ , Set " DeckName" " :n"
789+ , Set " DeckOwnerId" " :o"
790+ , Set " DeckAttributes" " :a"
791+ ]) &
792+ -- "SET DeckSlides = :s, DeckName = :n, DeckOwnerId = :o, DeckAttributes = :a" &
776793 DynamoDB. uiExpressionAttributeValues .~ deckToItem' deck &
777794 DynamoDB. uiReturnValues .~ Just DynamoDB. UpdatedNew &
778795 DynamoDB. uiKey .~ HMS. singleton " DeckId"
@@ -1019,18 +1036,29 @@ userIdToAttributeValue (UserId (FirebaseId userId)) =
10191036-- DECKS
10201037
10211038deckToItem :: DeckId -> Deck -> HMS. HashMap T. Text DynamoDB. AttributeValue
1022- deckToItem deckId Deck {deckSlides, deckDeckname, deckOwnerId, deckAttributes} =
1039+ deckToItem
1040+ deckId
1041+ Deck {deckSlides, deckDeckname, deckDeckbackground, deckOwnerId, deckAttributes} =
10231042 HMS. singleton " DeckId" (deckIdToAttributeValue deckId) <>
10241043 HMS. singleton " DeckSlides" (deckSlidesToAttributeValue deckSlides) <>
10251044 HMS. singleton " DeckName" (deckNameToAttributeValue deckDeckname) <>
1045+ (maybe
1046+ HMS. empty
1047+ (\ content -> HMS. singleton " DeckBackground"
1048+ (deckBackgroundToAttributeValue content))
1049+ deckDeckbackground) <>
10261050 HMS. singleton " DeckOwnerId" (deckOwnerIdToAttributeValue deckOwnerId) <>
10271051 HMS. singleton " DeckAttributes"
10281052 (deckAttributesToAttributeValue deckAttributes)
10291053
10301054deckToItem' :: Deck -> HMS. HashMap T. Text DynamoDB. AttributeValue
1031- deckToItem' Deck {deckSlides, deckDeckname, deckOwnerId, deckAttributes} =
1055+ deckToItem' Deck {deckSlides, deckDeckname, deckDeckbackground, deckOwnerId, deckAttributes} =
10321056 HMS. singleton " :s" (deckSlidesToAttributeValue deckSlides) <>
10331057 HMS. singleton " :n" (deckNameToAttributeValue deckDeckname) <>
1058+ (maybe
1059+ HMS. empty
1060+ (HMS. singleton " :b" . deckBackgroundToAttributeValue)
1061+ deckDeckbackground) <>
10341062 HMS. singleton " :o" (deckOwnerIdToAttributeValue deckOwnerId) <>
10351063 HMS. singleton " :a" (deckAttributesToAttributeValue deckAttributes)
10361064
@@ -1041,6 +1069,11 @@ itemToDeck item = do
10411069 deckId <- HMS. lookup " DeckId" item >>= deckIdFromAttributeValue
10421070 deckSlides <- HMS. lookup " DeckSlides" item >>= deckSlidesFromAttributeValue
10431071 deckDeckname <- HMS. lookup " DeckName" item >>= deckNameFromAttributeValue
1072+
1073+ deckDeckbackground <- case HMS. lookup " DeckBackground" item of
1074+ Nothing -> Just Nothing
1075+ Just c -> Just <$> deckBackgroundFromAttributeValue c
1076+
10441077 deckOwnerId <- HMS. lookup " DeckOwnerId" item >>=
10451078 deckOwnerIdFromAttributeValue
10461079 deckAttributes <- HMS. lookup " DeckAttributes" item >>=
@@ -1063,6 +1096,15 @@ deckNameToAttributeValue (Deckname deckname) =
10631096deckNameFromAttributeValue :: DynamoDB. AttributeValue -> Maybe Deckname
10641097deckNameFromAttributeValue attr = Deckname <$> attr ^. DynamoDB. avS
10651098
1099+ deckBackgroundToAttributeValue :: Deckbackground -> DynamoDB. AttributeValue
1100+ deckBackgroundToAttributeValue (Deckbackground bg) =
1101+ DynamoDB. attributeValue & DynamoDB. avB .~ Just (T. encodeUtf8 bg)
1102+
1103+ deckBackgroundFromAttributeValue :: DynamoDB. AttributeValue -> Maybe Deckbackground
1104+ deckBackgroundFromAttributeValue attr = toDeckbackground <$> attr ^. DynamoDB. avB
1105+ where
1106+ toDeckbackground = Deckbackground . T. decodeUtf8
1107+
10661108deckSlidesToAttributeValue :: [SlideId ] -> DynamoDB. AttributeValue
10671109deckSlidesToAttributeValue deckSlides =
10681110 DynamoDB. attributeValue & DynamoDB. avL .~
0 commit comments