explicit first and last, and no field selectors

This commit is contained in:
me 2024-12-17 10:46:59 +02:00
parent a0bdd57e83
commit 931e075067
3 changed files with 14 additions and 5 deletions

View file

@ -53,6 +53,7 @@ library
DeriveAnyClass DeriveAnyClass
DerivingStrategies DerivingStrategies
DuplicateRecordFields DuplicateRecordFields
NoFieldSelectors
executable fedi executable fedi
import: warnings import: warnings

View file

@ -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

View file

@ -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