Add getProjectDetail call to project API

[?]
Jan 30, 2021, 3:05 AM
APOATM4XGEQZHANT5IY57SKA2QEQ34BZHGNTRAV5KRVPEHUCDYKAC

Dependencies

  • [2] 7TQPQW3N Begin adding parsing for project detail.
  • [3] GLQSD33Y Use mock capability for overview init.
  • [4] NAFJ6RB3 Minor module reorg.
  • [5] PPW6ROC5 Render project data
  • [6] Z5KNL332 Add skeleton of project overview HTML.
  • [*] QAC2QJ32 Add project overview page to client.

Change contents

  • replacement in client/src/Aftok/Api/Project.purs at line 4
    [3.2947][2.587:634]()
    import Control.Monad.Except.Trans (runExceptT)
    [3.2947]
    [2.634]
    import Control.Monad.Except.Trans (ExceptT, runExceptT)
  • replacement in client/src/Aftok/Api/Project.purs at line 11
    [3.3229][2.833:875]()
    import Data.DateTime.Instant (toDateTime)
    [3.3229]
    [2.875]
    import Data.DateTime.Instant (Instant, toDateTime)
  • replacement in client/src/Aftok/Api/Project.purs at line 13
    [2.907][2.907:962]()
    import Data.Foldable (class Foldable, foldMapDefaultR)
    [2.907]
    [3.5]
    import Data.Foldable (class Foldable, foldr, foldl, foldMapDefaultR)
    import Data.Functor.Compose (Compose(..))
  • replacement in client/src/Aftok/Api/Project.purs at line 16
    [3.26][3.3297:3333](),[3.3297][3.3297:3333]()
    import Data.Newtype (class Newtype)
    [3.26]
    [2.963]
    import Data.Maybe (Maybe)
    import Data.Newtype (class Newtype, unwrap)
  • replacement in client/src/Aftok/Api/Project.purs at line 21
    [2.1102][2.1102:1128]()
    -- import Effect (Effect)
    [2.1102]
    [3.3492]
    import Effect (Effect)
  • edit in client/src/Aftok/Api/Project.purs at line 29
    [2.1175]
    [3.3699]
    , pidStr
  • edit in client/src/Aftok/Api/Project.purs at line 36
    [2.1251]
    [2.1251]
    , parseDatedResponseMay
  • replacement in client/src/Aftok/Api/Project.purs at line 60
    [3.138][2.1749:1777]()
    , depFn :: DepreciationFn
    [3.138]
    [3.3916]
    , depf :: DepreciationFn
  • replacement in client/src/Aftok/Api/Project.purs at line 87
    [2.2563][2.2563:2684]()
    depFn <- project .: "depreciationFn"
    pure $ Project' { projectId, projectName, inceptionDate, initiator, depFn }
    [2.2563]
    [3.4014]
    depf <- project .: "depf"
    pure $ Project' { projectId, projectName, inceptionDate, initiator, depf }
  • edit in client/src/Aftok/Api/Project.purs at line 99
    [3.342]
    [2.2822]
    derive instance contributorNewtype :: Newtype (Contributor' a) _
    derive instance contributorFunctor :: Functor Contributor'
    instance contributorFoldable :: Foldable Contributor' where
    foldr f b (Contributor' p) = f (p.joinedOn) b
    foldl f b (Contributor' p) = f b (p.joinedOn)
    foldMap = foldMapDefaultR
    instance contributorTraversable :: Traversable Contributor' where
    traverse f (Contributor' p) =
    Contributor' <<< (\b -> p { joinedOn = b }) <$> f (p.joinedOn)
    sequence = traverse identity
  • edit in client/src/Aftok/Api/Project.purs at line 131
    [3.554]
    [3.554]
    projectDetail ::
    forall date.
    Project' date ->
    M.Map UserId (Contributor' date) ->
    ProjectDetail' date
    projectDetail project contributors =
    ProjectDetail' { project, contributors }
  • replacement in client/src/Aftok/Api/Project.purs at line 142
    [3.601][2.3358:3468]()
    type ProjectDetailJson date =
    { project :: Project' date
    , contributors :: Array (Contributor' date)
    }
    [3.601]
    [3.4059]
    derive instance projectDetailNewtype :: Newtype (ProjectDetail' a) _
    derive instance projectDetailFunctor :: Functor ProjectDetail'
    instance projectDetailFoldable :: Foldable ProjectDetail' where
    foldr f b (ProjectDetail' p) = foldr f (foldr f b (p.project)) (Compose p.contributors)
    foldl f b (ProjectDetail' p) = foldl f (foldl f b (p.project)) (Compose p.contributors)
    foldMap = foldMapDefaultR
    instance projectDetailTraversable :: Traversable ProjectDetail' where
    traverse f (ProjectDetail' p) =
    projectDetail <$> traverse f p.project
    <*> (map unwrap $ traverse f (Compose p.contributors))
    sequence = traverse identity
  • replacement in client/src/Aftok/Api/Project.purs at line 173
    [3.5350][2.3804:4185]()
    -- getProjectDetail :: ProjectId -> Aff (Maybe ProjectDetail)
    -- getProjectDetail pid = do
    -- response <- get RF.json ("/api/user/projects/" <> pidStr pid)
    -- EC.liftEffect
    -- <<< map (\dt -> ProjectDetail' {
    -- project: dt.project,
    -- contributors: M.fromFoldable $ map (\c -> (Tuple c.userId c)) dt.contributors
    -- })
    -- $ parsed
    [3.5350]
    [3.5618]
    getProjectDetail :: ProjectId -> Aff (Either APIError (Maybe ProjectDetail))
    getProjectDetail pid = do
    response <- get RF.json ("/api/user/projects/" <> pidStr pid <> "/detail")
    let parsed :: ExceptT APIError Effect (Maybe (ProjectDetail' Instant))
    parsed = parseDatedResponseMay response
    EC.liftEffect
    <<< runExceptT
    <<< map (map (map toDateTime))
    $ parsed
  • replacement in client/src/Aftok/Overview.purs at line 168
    [3.1655][2.4675:4720]()
    depreciationCols project.depFn <>
    [3.1655]
    [2.4720]
    depreciationCols project.depf <>
  • replacement in client/src/Aftok/Overview.purs at line 376
    [3.1255][2.5436:5512]()
    , depFn: LinearDepreciation { undep: Days 30.0, dep: Days 300.0 }
    [3.1255]
    [3.1255]
    , depf: LinearDepreciation { undep: Days 30.0, dep: Days 300.0 }