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

Commit 5bdef40

Browse files
committed
feat: save background
1 parent 33f8dda commit 5bdef40

File tree

2 files changed

+53
-4
lines changed

2 files changed

+53
-4
lines changed

infra/handler/app/Test.hs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ main' = withServer $ \port -> do
197197
let someDeck = Deck
198198
{ deckSlides = []
199199
, deckDeckname = Deckname "foo"
200+
, deckDeckbackground = Nothing
200201
, deckOwnerId = someUserId
201202
, deckAttributes = HMS.empty
202203
}
@@ -221,7 +222,13 @@ main' = withServer $ \port -> do
221222
Left err -> error $ "Expected new slide, got error: " <> show err
222223
Right (Item slideId _) -> pure slideId
223224

224-
let newDeck = Deck { deckSlides = [ slideId ], deckDeckname = Deckname "bar", deckOwnerId = someUserId, deckAttributes = HMS.singleton "foo" "bar" }
225+
let newDeck = Deck
226+
{ deckSlides = [ slideId ]
227+
, deckDeckname = Deckname "bar"
228+
, deckDeckbackground = Just (Deckbackground "bar")
229+
, deckOwnerId = someUserId
230+
, deckAttributes = HMS.singleton "foo" "bar"
231+
}
225232

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

infra/handler/src/DeckGo/Handler.hs

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
240244
data 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

273279
instance 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

10211038
deckToItem :: 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

10301054
deckToItem' :: 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) =
10631096
deckNameFromAttributeValue :: DynamoDB.AttributeValue -> Maybe Deckname
10641097
deckNameFromAttributeValue 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+
10661108
deckSlidesToAttributeValue :: [SlideId] -> DynamoDB.AttributeValue
10671109
deckSlidesToAttributeValue deckSlides =
10681110
DynamoDB.attributeValue & DynamoDB.avL .~

0 commit comments

Comments
 (0)