explicit first and last, and no field selectors
This commit is contained in:
parent
a0bdd57e83
commit
931e075067
3 changed files with 14 additions and 5 deletions
|
@ -53,6 +53,7 @@ library
|
||||||
DeriveAnyClass
|
DeriveAnyClass
|
||||||
DerivingStrategies
|
DerivingStrategies
|
||||||
DuplicateRecordFields
|
DuplicateRecordFields
|
||||||
|
NoFieldSelectors
|
||||||
|
|
||||||
executable fedi
|
executable fedi
|
||||||
import: warnings
|
import: warnings
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
module Fedi.Activity where
|
module Fedi.Activity where
|
||||||
|
|
||||||
import Data.Maybe (listToMaybe)
|
|
||||||
import Data.Aeson qualified as A
|
import Data.Aeson qualified as A
|
||||||
import Data.Text qualified as T
|
import Data.Text qualified as T
|
||||||
import Fedi.Types
|
import Fedi.Types
|
||||||
|
@ -14,6 +13,10 @@ data Activity
|
||||||
, object :: Object
|
, object :: Object
|
||||||
}
|
}
|
||||||
|
|
||||||
|
activityUrl :: Activity -> ActivityUrl
|
||||||
|
activityUrl = \case
|
||||||
|
create@Create{} -> create.id
|
||||||
|
|
||||||
type ActivityUrl = Url
|
type ActivityUrl = Url
|
||||||
|
|
||||||
data Object
|
data Object
|
||||||
|
@ -52,6 +55,8 @@ data Collection order a
|
||||||
= Collection
|
= Collection
|
||||||
{ summary :: String
|
{ summary :: String
|
||||||
, items :: [a]
|
, items :: [a]
|
||||||
|
, first :: Maybe Url
|
||||||
|
, last :: Maybe Url
|
||||||
}
|
}
|
||||||
|
|
||||||
instance A.ToJSON Note where
|
instance A.ToJSON Note where
|
||||||
|
@ -95,8 +100,8 @@ instance A.ToJSON a => A.ToJSON (Collection Ordered a) where
|
||||||
, "summary" A..= collection.summary
|
, "summary" A..= collection.summary
|
||||||
, "totalItems" A..= length collection.items
|
, "totalItems" A..= length collection.items
|
||||||
, "orderedItems" A..= collection.items
|
, "orderedItems" A..= collection.items
|
||||||
, "first" A..= listToMaybe (take 1 collection.items)
|
, "first" A..= collection.first
|
||||||
, "last" A..= listToMaybe (take 1 $ reverse collection.items)
|
, "last" A..= collection.last
|
||||||
]
|
]
|
||||||
|
|
||||||
instance A.ToJSON a => A.ToJSON (Collection Unordered a) where
|
instance A.ToJSON a => A.ToJSON (Collection Unordered a) where
|
||||||
|
@ -109,8 +114,8 @@ instance A.ToJSON a => A.ToJSON (Collection Unordered a) where
|
||||||
, "summary" A..= collection.summary
|
, "summary" A..= collection.summary
|
||||||
, "totalItems" A..= length collection.items
|
, "totalItems" A..= length collection.items
|
||||||
, "items" A..= collection.items
|
, "items" A..= collection.items
|
||||||
, "first" A..= listToMaybe (take 1 collection.items)
|
, "first" A..= collection.first
|
||||||
, "last" A..= listToMaybe (take 1 $ reverse collection.items)
|
, "last" A..= collection.last
|
||||||
]
|
]
|
||||||
|
|
||||||
instance A.ToJSON a => A.ToJSON (OrderedCollectionPage a) where
|
instance A.ToJSON a => A.ToJSON (OrderedCollectionPage a) where
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
module Fedi.Routes where
|
module Fedi.Routes where
|
||||||
|
|
||||||
|
import Data.Maybe (listToMaybe)
|
||||||
import Web.Twain qualified as Twain
|
import Web.Twain qualified as Twain
|
||||||
import Web.Twain.Types qualified as Twain
|
import Web.Twain.Types qualified as Twain
|
||||||
import Data.String (fromString)
|
import Data.String (fromString)
|
||||||
|
@ -91,6 +92,8 @@ handleOutbox details items = do
|
||||||
Collection
|
Collection
|
||||||
{ summary = details.username <> "'s notes"
|
{ summary = details.username <> "'s notes"
|
||||||
, items = items
|
, items = items
|
||||||
|
, first = Just $ outboxUrl <> "?page=true"
|
||||||
|
, last = Nothing
|
||||||
}
|
}
|
||||||
in A.encode content
|
in A.encode content
|
||||||
Twain.send $ jsonLD response
|
Twain.send $ jsonLD response
|
||||||
|
|
Loading…
Add table
Reference in a new issue