The route-based logStart/logStop is nicer.

[?]
Oct 20, 2016, 3:57 AM
UILI6PILCRDPZ3XYA54LGIGPSU7ERWNHCE7R3CE64ZEC7ONOEMOQC

Dependencies

  • [2] BWN72T44 Don't accept work timestamp from an external source.
  • [3] O5FVTOM6 Undo JSON silliness, enable a couple more routes.
  • [4] POX3UAMT Enabling logging of time to contributor/project accounts
  • [5] 2XQD6KKK Add invitation logic and clean up DBProg error handling.
  • [6] RPAJLHMT Change to use UUIDs instead of ints for primary keys.
  • [7] RN7EI6IN Update database layer to use CreditTo
  • [8] O722AOKE Add route to allow crediting of events to users/projects.
  • [9] MGOF7IUF Update TASKS list to reflect completed projects.
  • [10] NEDDHXUK Reformat via stylish-haskell
  • [11] BROSTG5K Beginning of modularization of server.
  • [*] W35DDBFY Factor common JSON conversions up into client lib module.
  • [*] QMRKFEPG Refactor QDB to use a free monad algebra instead.
  • [*] ADMKQQGC Initial empty Snap project.

Change contents

  • replacement in lib/Aftok/Json.hs at line 250
    [3.4290][2.59:164]()
    parseLogEntry :: Value -> Parser (C.UTCTime -> LogEntry)
    parseLogEntry = unversion parseLogEntry' where
    [3.4290]
    [2.164]
    parseLogEntry :: (C.UTCTime -> LogEvent) -> Value -> Parser (C.UTCTime -> LogEntry)
    parseLogEntry f = unversion parseLogEntry' where
  • edit in lib/Aftok/Json.hs at line 254
    [2.263][2.263:312]()
    eventCtr <- x .: "eventType" >>= nameEvent
  • replacement in lib/Aftok/Json.hs at line 255
    [2.347][2.347:407]()
    pure $ \t -> LogEntry creditTo' (eventCtr t) eventMeta'
    [2.347]
    [3.664]
    pure $ \t -> LogEntry creditTo' (f t) eventMeta'
  • edit in server/Aftok/Snaplet/WorkLog.hs at line 27
    [3.10148]
    [14.12607]
    uid <- requireUserId
    pid <- requireProjectId
    requestBody <- readRequestBody 4096
    timestamp <- liftIO C.getCurrentTime
    case A.eitherDecode requestBody >>= parseEither (parseLogEntry evCtr) of
    Left err -> snapError 400 $ "Unable to parse log entry " <> (tshow requestBody) <> ": " <> tshow err
    Right entry -> snapEval $ createEvent pid uid (entry timestamp)
    logWorkBTCHandler :: (C.UTCTime -> LogEvent) -> Handler App App EventId
    logWorkBTCHandler evCtr = do
  • edit in server/Aftok/Snaplet/WorkLog.hs at line 48
    [3.1223][3.1223:1598](),[3.1598][2.412:480]()
    recordLogEntryHandler :: Handler App App EventId
    recordLogEntryHandler = do
    uid <- requireUserId
    pid <- requireProjectId
    requestBody <- readRequestBody 4096
    timestamp <- liftIO C.getCurrentTime
    case A.eitherDecode requestBody >>= parseEither parseLogEntry of
    Left err -> snapError 400 $ "Unable to parse log entry " <> (tshow requestBody) <> ": " <> tshow err
    Right entry -> snapEval $ createEvent pid uid (entry timestamp)
  • replacement in server/Main.hs at line 48
    [3.2229][3.2229:2315]()
    recordLogEntryRoute = serveJSON eventIdJSON $ method POST recordLogEntryHandler
    [3.2229]
    [3.2315]
    logWorkBTCRoute f = serveJSON eventIdJSON $ method POST (logWorkBTCHandler f)
  • replacement in server/Main.hs at line 68
    [3.13135][3.2980:3216]()
    , ("projects/:projectId/logStart/:btcAddr", logWorkRoute StartWork)
    , ("projects/:projectId/logEnd/:btcAddr", logWorkRoute StopWork)
    , ("projects/:projectId/logWorkEvent", recordLogEntryRoute)
    [3.13135]
    [3.3631]
    , ("projects/:projectId/logStart", logWorkRoute StartWork)
    , ("projects/:projectId/logEnd", logWorkRoute StopWork)
    , ("projects/:projectId/logStart/:btcAddr", logWorkBTCRoute StartWork)
    , ("projects/:projectId/logEnd/:btcAddr", logWorkBTCRoute StopWork)