O5FVTOM6YFBLEPF3S576K6IMT6ZZ5VQCSB3YVXNS4CKBITKCRZ7AC KNSI575VAW6HRCZYXOEPQ4DTSML4EORML5MV4DJBRKE7TXCPS4EAC 4IQVQL4TS35GL2GYZJG254TKJLL5EHMRSFT77Z4VTRZIG2TMBM3QC HE3JTXO37O4MOMWPZ4BRBHP53KBPZDG3PCSUCVNOKIS7IY26OCIAC 2Y2QZFVFSKXEFEGYJB5A7GI735ONWPCF7DVTIY5T73AUEVTZTBBQC A6HKMINBNGQLLX4QJMYWKQ4JAEHVJ4HIRVDKPPDI3FJUO2AAB7OQC TNR3TEHKVADAEZSTOD2XLSUTSW5AWST2YUW4CWK5KE7DSC6XHZNAC LD4GLVSF6YTA7OZWIGJ45H6TUXGM4WKUIYXKWQFNUP36WDMYSMXAC IZEVQF627FA7VV25KJAWYWGGC35LZUUBBQRPN5ZAINTQLPEDRTEAC Z7KS5XHHC6PAMTVBHXY7KUSS3BWAOU6FSYIITUCFOOJZU4OUJHBAC 2G3GNDDUOVPF45PELJ65ZB2IXEHJJXJILFRVHZXGPXUL4BVNZJFQC 64C6AWH66FDKU6UE6Z6JPX2J2GBM2JOPTH2GL6LHKAIUBGNGDZ5AC 5XFJNUAZUCQ3WCGW4QRIAWR764QYDOPHOIVO2TRMGSSG7UDX2M2AC W35DDBFYF6Z4ZPCFEO5RPAONZLYCSNTXUSTS6FIUUVZHCI6Q7GHAC EZQG2APB36DDMIAYDPPDGOIXOD7K2RZZSGC2NKGZIHB2HZBTW7EQC 5DRIWGLUKMQZU2ZPBXSTLAWJKAMOD5YXAHM5LEDQHDFGYYLHWCDQC NVOCQVASZWTKQJG7GPH7KHKZZR7NUG4WLV5YY4KAIRPCJRWCZPIAC Y35QCWYW2OTZ27ZVTH2BA3XJTUCJ2WMLKU32ZCOCDY3AW7TIZXRAC TLQ72DSJD7GGPWN6HGBHAVPBRQFKEQ6KSK43U7JWWID4ZWAF47JAC SLL7262CJUE7TZDDZZXFROHCVVDA527WA4PHXCKEGZUJF2EN5MQAC EMVTF2IWNQGRL44FC4JNG5FYYQTZSFPNM6SOM7IAEH6T7PPK2NVAC 7DBNV3GV773FH5ZLQWFX4RBOS4Q3CIK2RYZNNABY3ZOETYZCXRNQC VJPT6HDRMJAJD5PT3VOYJYW43ISKLICEHLSDWSROX2XZWO2OFZPQC ADMKQQGCGVSHHIMVQ4XFRDCG544SBJCYALSKZV45CQQBZ4ACUH2AC I2KHGVD44KT4MQJXGCTVSQKMBO6TVCY72F26TLXGWRL6PHGF6RNQC XTBSG4C7SCZUFOU2BTNFR6B6TCGYI35BWUV4PVTS3N7KNH5VEARQC PBD7LZYQHXAA3KLH2ZUX5GW4UFML6BQ32KXZF4KZ6OYFASUYFJ5QC BROSTG5KP3NUNLSYPVQID254TE47E5RKQAKLPIY7PGWETE6JNMTAC recordEvent' :: ProjectId -> UserId -> LogEntry -> QDBM EventIdrecordEvent' (ProjectId pid) (UserId uid) (LogEntry a e m) = do
createEvent' :: ProjectId -> UserId -> LogEntry -> QDBM EventIdcreateEvent' (ProjectId pid) (UserId uid) (LogEntry a e m) = do
, newAuction :: ProjectId -> Auction -> m AuctionId, readAuction :: AuctionId -> m (Maybe Auction), recordBid :: AuctionId -> Bid -> m ()
, createAuction :: ProjectId -> Auction -> m AuctionId, findAuction :: AuctionId -> m (Maybe Auction), createBid :: AuctionId -> Bid -> m ()
payoutsJSON :: Payouts -> ValuepayoutsJSON (Payouts m) = toJSON $ MS.mapKeys (^. _BtcAddr) mparsePayoutsJSON :: Value -> Parser PayoutsparsePayoutsJSON v =Payouts . MS.mapKeys BtcAddr <$> parseJSON vworkIndexJSON :: WorkIndex -> ValueworkIndexJSON (WorkIndex widx) =toJSON $ (L.toList . fmap intervalJSON) <$> (MS.mapKeysMonotonic (^._BtcAddr) widx)eventIdJSON :: EventId -> ValueeventIdJSON (EventId eid) = toJSON eid
payoutsJSON :: Payouts -> ValuepayoutsJSON (Payouts m) = toJSON $ MS.mapKeys (^. _BtcAddr) mparsePayoutsJSON :: Value -> Parser PayoutsparsePayoutsJSON v =Payouts . MS.mapKeys BtcAddr <$> parseJSON vinstance A.ToJSON Payouts wheretoJSON = versioned (Version 1 0 0) . payoutsJSONinstance A.FromJSON Payouts whereparseJSON v = let parsePayouts (Version 1 0 0) = parsePayoutsJSONparsePayouts v' = \_ -> fail . show $ printVersion v'in unversion parsePayouts $ v
addRoutes [ ("login", requireLogin >> (redirect "/home")), ("register", void $ method POST registerHandler), ("projects/:projectId/logStart/:btcAddr", serveJSON eventIdJSON . method POST $ logWorkHandler StartWork), ("projects/:projectId/logEnd/:btcAddr", serveJSON eventIdJSON . method POST $ logWorkHandler StopWork), ("projects/:projectId/log/:btcAddr", serveJSON workIndexJSON $ method GET loggedIntervalsHandler), ("projects/:projectId", serveJSON projectJSON $ method GET projectGetHandler), ("projects", void $ method POST projectCreateHandler), ("payouts/:projectId", serveJSON id $ method GET payoutsHandler)
let loginRoute = requireLogin >> redirect "/home"registerRoute = void $ method POST registerHandlerlogEventRoute f = serveJSON eventIdJSON . method POST $ logWorkHandler floggedIntervalsRoute = serveJSON workIndexJSON $ method GET loggedIntervalsHandlerprojectCreateRoute = void $ method POST projectCreateHandlerprojectRoute = serveJSON projectJSON $ method GET projectGetHandlerlistProjectsRoute = serveJSON (fmap qdbProjectJSON) $ method GET projectListHandlerpayoutsRoute = serveJSON payoutsJSON $ method GET payoutsHandleraddRoutes [ ("login", loginRoute), ("register", registerRoute), ("projects/:projectId/logStart/:btcAddr", logEventRoute StartWork), ("projects/:projectId/logEnd/:btcAddr", logEventRoute StopWork), ("projects/:projectId/log/:btcAddr", loggedIntervalsRoute), ("projects/:projectId", projectRoute), ("projects", listProjectsRoute), ("projects", projectCreateRoute), ("payouts/:projectId", payoutsRoute)
projectGetHandler :: Handler App App ProjectprojectGetHandler = doQDB{..} <- view qdb <$> with qm getuid <- requireUserIdpid <- requireProjectAccess uidmp <- liftPG . runReaderT $ findProject pidmaybe (snapError 404 $ "Project not found for id " <> tshow pid) pure mp