O722AOKEWXWJPRHGJREU6QPW7HEFPPRETZIAADZ2RMAXHARCNEKAC RN7EI6INGUUHGMNY5RU3NH56WPLRZY5ZMYDNFMNE3TGV4ESFLQIAC WZUHEZSBRKHQMNWDKVG4X6DDIQEAXTGI6IGAJ5ERPRQ3W2KUMX4QC ASF3UPJLCX7KIUCNJD5KAXSPDXCUEJHLL4HBRTRUBPCW73IXOCWQC 64C6AWH66FDKU6UE6Z6JPX2J2GBM2JOPTH2GL6LHKAIUBGNGDZ5AC A6HKMINBNGQLLX4QJMYWKQ4JAEHVJ4HIRVDKPPDI3FJUO2AAB7OQC GCVQD44VRPQVKPZEPIC4AOIXLJIG2ZMV3QI2Y7KALUT6NVUBSGSAC W35DDBFYF6Z4ZPCFEO5RPAONZLYCSNTXUSTS6FIUUVZHCI6Q7GHAC Z3MK2PJ5U222DXRS22WCDHVPZ7HVAR3HOCUNXIGX6VMEPBQDF6PQC RPAJLHMTUJU4AYNBOHVGHGGB4NY2NLY3BVPYN5FMWB3ZIMAUQHCQC POX3UAMTGCNS3SU5I6IKDNCCSHEAUSFBZ3WCMQ3EXKPNXETOI6BAC KNSI575VAW6HRCZYXOEPQ4DTSML4EORML5MV4DJBRKE7TXCPS4EAC TLQ72DSJD7GGPWN6HGBHAVPBRQFKEQ6KSK43U7JWWID4ZWAF47JAC NVOCQVASZWTKQJG7GPH7KHKZZR7NUG4WLV5YY4KAIRPCJRWCZPIAC BROSTG5KP3NUNLSYPVQID254TE47E5RKQAKLPIY7PGWETE6JNMTAC NEDDHXUK3GNFMOFO3KLU7NRIHCTYNWBT3D6HTKZAOXFDE6HMDZ6AC QMRKFEPGFBCEWAIXPEIG5ILKAJ2JH5L3TOITHR4HNJXK5FN3KXBQC O5FVTOM6YFBLEPF3S576K6IMT6ZZ5VQCSB3YVXNS4CKBITKCRZ7AC ADMKQQGCGVSHHIMVQ4XFRDCG544SBJCYALSKZV45CQQBZ4ACUH2AC MB5SHULBN3WP7TGUWZDP6BRGP423FTYKF67T5IF5YHHLNXKQ5REAC MGOF7IUFGXYQKZOKMM2GGULFFVAULEHLZDSHMUW6B5DBKVXXR74AC 2XQD6KKKD6QVHFHAEMVE3XXY7X2T7BLTLL7XIILZAXNJJH2YONUQC HALRDT2F22DAQ54M334YSKD2XJCAXDXEZPDKGMOWKH7XELBAS6MAC parseCreditTo :: Value -> Parser CreditToparseCreditTo = unversion $ \x -> case x ofVersion 1 0 -> withObject "BtcAddr" parseCreditToV1Version 2 0 -> withObject "CreditTo" parseCreditToV2_ -> badVersion "EventAmendment" x
parseLogEvent :: Object -> Parser LogEventparseLogEvent x =(StartWork <$> x .: "start") <|> (StopWork <$> x .: "stop")parseLogEntry :: Value -> Parser LogEntryparseLogEntry = unversion parseLogEntry' whereparseLogEntry' (Version 2 0) (Object x) =LogEntry <$> (x .: "creditTo" >>= parseCreditTo)<*> (x .: "event" >>= parseLogEvent)<*> (x .: "eventMeta")parseLogEntry' v x = badVersion "LogEntry" v x
snapEval $ createEvent pid uid (LogEntry addr (evCtr timestamp) (A.decode requestBody))
snapEval . createEvent pid uid $LogEntry (CreditToAddress addr) (evCtr timestamp) (A.decode requestBody)recordLogEntryHandler :: Handler App App EventIdrecordLogEntryHandler = douid <- requireUserIdpid <- requireProjectIdrequestBody <- readRequestBody 4096timestamp <- liftIO C.getCurrentTimecase A.eitherDecode requestBody >>= parseEither parseLogEntry ofLeft err -> snapError 400 $ "Unable to parse log entry " <> (tshow requestBody) <> ": " <> tshow errRight entry -> snapEval $ createEvent pid uid (event.eventTime .~ timestamp $ entry)
let loginRoute = requireLogin >> redirect "/home"registerRoute = void $ method POST registerHandleracceptInviteRoute = void $ method POST acceptInvitationHandler
let loginRoute = requireLogin >> redirect "/home"registerRoute = void $ method POST registerHandleracceptInviteRoute = void $ method POST acceptInvitationHandler
projectCreateRoute = serveJSON projectIdJSON $ method POST projectCreateHandlerlistProjectsRoute = serveJSON (fmap qdbProjectJSON) $ method GET projectListHandler
projectCreateRoute = serveJSON projectIdJSON $ method POST projectCreateHandlerlistProjectsRoute = serveJSON (fmap qdbProjectJSON) $ method GET projectListHandler
projectRoute = serveJSON projectJSON $ method GET projectGetHandlerlogEventRoute f = serveJSON eventIdJSON $ method POST (logWorkHandler f)logEntriesRoute = serveJSON (fmap logEntryJSON) $ method GET logEntriesHandlerlogIntervalsRoute = serveJSON workIndexJSON $ method GET loggedIntervalsHandlerpayoutsRoute = serveJSON payoutsJSON $ method GET payoutsHandlerinviteRoute = void . method POST $ projectInviteHandler cfg
projectRoute = serveJSON projectJSON $ method GET projectGetHandlerlogWorkRoute f = serveJSON eventIdJSON $ method POST (logWorkHandler f)recordLogEntryRoute = serveJSON eventIdJSON $ method POST recordLogEntryHandlerlogEntriesRoute = serveJSON (fmap logEntryJSON) $ method GET logEntriesHandlerlogIntervalsRoute = serveJSON workIndexJSON $ method GET loggedIntervalsHandlerpayoutsRoute = serveJSON payoutsJSON $ method GET payoutsHandlerinviteRoute = void . method POST $ projectInviteHandler cfg
auctionCreateRoute = serveJSON auctionIdJSON $ method POST auctionCreateHandlerauctionRoute = serveJSON auctionJSON $ method GET auctionGetHandlerauctionBidRoute = serveJSON bidIdJSON $ method POST auctionBidHandler
auctionCreateRoute = serveJSON auctionIdJSON $ method POST auctionCreateHandlerauctionRoute = serveJSON auctionJSON $ method GET auctionGetHandlerauctionBidRoute = serveJSON bidIdJSON $ method POST auctionBidHandler
, ("projects/:projectId/logStart/:btcAddr", logEventRoute StartWork), ("projects/:projectId/logEnd/:btcAddr", logEventRoute StopWork)
, ("projects/:projectId/logStart/:btcAddr", logWorkRoute StartWork), ("projects/:projectId/logEnd/:btcAddr", logWorkRoute StopWork), ("projects/:projectId/logWorkEvent", recordLogEntryRoute)