mirror of
https://github.com/aelve/guide.git
synced 2024-11-25 18:56:52 +03:00
fix getItem
This commit is contained in:
parent
958afba90b
commit
e3a8edbf94
@ -97,10 +97,21 @@ deleteCategory catId =
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
-- | Get item by item ID.
|
||||
getItem :: Uid Item -> Guider CItemFull
|
||||
getItem itemId =
|
||||
--
|
||||
-- Pass 'True' to ignore disabled sections and get full item.
|
||||
getItem :: Bool -> Uid Item -> Guider CItemFull
|
||||
getItem isIgnored itemId =
|
||||
logHandler "getItem" [attr "itemId" itemId] $ do
|
||||
toCItemFull <$> getItemOrFail itemId
|
||||
item <- getItemOrFail itemId
|
||||
sections <- categoryEnabledSections <$> dbQuery (GetCategoryByItem itemId)
|
||||
if isIgnored then pure $ toCItemFull allSections item
|
||||
else pure $ toCItemFull sections item
|
||||
where
|
||||
allSections = S.fromList
|
||||
[ ItemProsConsSection
|
||||
, ItemEcosystemSection
|
||||
, ItemNotesSection
|
||||
]
|
||||
|
||||
-- | Create a new item, given the name.
|
||||
--
|
||||
|
@ -153,6 +153,10 @@ data ItemSite route = ItemSite
|
||||
{ _getItem :: route :-
|
||||
Summary "Get item by id"
|
||||
:> ErrorResponse 404 "Item not found"
|
||||
:> "ignore selections"
|
||||
:> QueryParam' '[Required, Strict,
|
||||
Description "Ignore disabled sections to get full item"]
|
||||
"bool" Bool
|
||||
:> "item"
|
||||
:> Capture "itemId" (Uid Item)
|
||||
:> Get '[JSON] CItemFull
|
||||
@ -505,7 +509,7 @@ toCCategoryFull $(fields 'Category) = CCategoryFull
|
||||
, ccfStatus = categoryStatus
|
||||
, ccfDescription = toCMarkdown categoryNotes
|
||||
, ccfSections = categoryEnabledSections
|
||||
, ccfItems = fmap toCItemFull categoryItems
|
||||
, ccfItems = fmap (toCItemFull categoryEnabledSections) categoryItems
|
||||
}
|
||||
where
|
||||
-- Ignored fields
|
||||
@ -674,23 +678,34 @@ instance ToSchema CItemFull where
|
||||
field "toc" . inlineSchema . description ?= "Table of contents"
|
||||
|
||||
-- | Factory to create a 'CItemFull' from an 'Item'
|
||||
toCItemFull :: Item -> CItemFull
|
||||
toCItemFull $(fields 'Item) = CItemFull
|
||||
--
|
||||
-- Pass to 'Set ItemSection' all kinds of sections
|
||||
-- to ignore disabled sections and get full item content.
|
||||
toCItemFull :: Set ItemSection -> Item -> CItemFull
|
||||
toCItemFull selections $(fields 'Item) = CItemFull
|
||||
{ cifId = itemUid
|
||||
, cifName = itemName
|
||||
, cifCreated = itemCreated
|
||||
, cifHackage = itemHackage
|
||||
, cifSummary = toCMarkdown itemSummary
|
||||
, cifPros = fmap toCTrait itemPros
|
||||
, cifCons = fmap toCTrait itemCons
|
||||
, cifEcosystem = toCMarkdown itemEcosystem
|
||||
, cifNotes = toCMarkdown itemNotes
|
||||
, cifPros = fmap toCTrait pros
|
||||
, cifCons = fmap toCTrait cons
|
||||
, cifEcosystem = toCMarkdown ecosystem
|
||||
, cifNotes = toCMarkdown notes
|
||||
, cifLink = itemLink
|
||||
, cifToc = map toCTocHeading (markdownTreeTOC itemNotes)
|
||||
}
|
||||
where
|
||||
-- Ignored fields
|
||||
_ = (itemProsDeleted, itemConsDeleted)
|
||||
ecosystem = if (ItemEcosystemSection `elem` selections)
|
||||
then itemEcosystem
|
||||
else toMarkdownBlock ""
|
||||
notes = if (ItemNotesSection `elem` selections)
|
||||
then itemNotes
|
||||
else toMarkdownTree "" ""
|
||||
(pros, cons) = if (ItemProsConsSection `elem` selections)
|
||||
then (itemPros, itemCons)
|
||||
else ([],[])
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
-- CTrait
|
||||
|
@ -845,6 +845,7 @@ deriving instance Show GetGlobalState
|
||||
-- category
|
||||
deriving instance Show GetCategories
|
||||
deriving instance Show GetCategoryMaybe
|
||||
deriving instance Show GetCategoryByItem
|
||||
deriving instance Show AddCategory
|
||||
deriving instance Show DeleteCategory
|
||||
deriving instance Show SetCategoryGroup
|
||||
|
Loading…
Reference in New Issue
Block a user