Add endpoint to list project contributors.

[?]
Jan 2, 2021, 2:15 AM
4354Y4PECM6BOEYIKW2L6WP6ULDIQK2KMNLORWPVKHKQTHUI6CRQC

Dependencies

  • [2] M4PWY5RU Preliminary work to add support for Zcash payments.
  • [3] HALRDT2F Added initial auction create route.
  • [4] PBD7LZYQ Postgres & auth are beginning to function.
  • [5] 2XQD6KKK Add invitation logic and clean up DBProg error handling.
  • [6] B6HWAPDP Modularize & update to recent haskoin.
  • [7] EFSXYZPO Autoformat everything with brittany.
  • [8] QMRKFEPG Refactor QDB to use a free monad algebra instead.
  • [9] X3ES7NUA Fine. I'll use ormolu. At least it doesn't break the code.
  • [*] IZEVQF62 Work in progress replacing sqlite with postgres.
  • [*] 64C6AWH6 Rename Ananke -> Quixotic, project reboot.
  • [*] UWMGUJOW Autoformat sources.
  • [*] 5OI44E4E Add authentication to auction search.
  • [*] ADMKQQGC Initial empty Snap project.

Change contents

  • edit in lib/Aftok/Database/PostgreSQL/Projects.hs at line 12
    [2.47732]
    [2.47732]
    listProjectContributors,
  • edit in lib/Aftok/Database/PostgreSQL/Projects.hs at line 45
    [2.48219]
    [2.48219]
    UserName (..),
  • edit in lib/Aftok/Database/PostgreSQL/Projects.hs at line 151
    [2.51775]
    contributorParser :: RowParser (UserId, UserName, C.UTCTime)
    contributorParser =
    (,,) <$> idParser UserId <*> (UserName <$> field) <*> utcParser
    listProjectContributors :: ProjectId -> DBM [(UserId, UserName, C.UTCTime)]
    listProjectContributors pid =
    pquery
    contributorParser
    [sql|
    SELECT DISTINCT u.id, u.handle, p.joined_at
    FROM users u
    JOIN project_companions p ON u.id = p.user_id
    WHERE p.project_id = ?
    ORDER BY p.joined_at
    |]
    (Only $ pid ^. _ProjectId)
  • edit in lib/Aftok/Database/PostgreSQL.hs at line 62
    [2.62253]
    [2.62253]
    (ListProjectContributors pid) -> Q.listProjectContributors pid
  • edit in lib/Aftok/Database.hs at line 72
    [13.2286]
    [13.2286]
    ListProjectContributors :: ProjectId -> DBOp [(UserId, UserName, C.UTCTime)]
  • edit in lib/Aftok/Database.hs at line 195
    [14.557]
    [3.29109]
    listProjectContributors :: MonadDB m => ProjectId -> UserId -> m [(UserId, UserName, C.UTCTime)]
    listProjectContributors pid uid =
    withProjectAuth pid uid (ListProjectContributors pid)
  • file addition: list_project_contributors.sh (---r------)
    [3.1220]
    #!/bin/bash
    if [ -f ".env" ]; then
    source .env
    fi
    if [ -z "${AFTOK_HOST}" ]; then
    AFTOK_HOST="aftok.com"
    fi
    if [ -z "${USER}" ]; then
    read -p "Username: " USER
    echo
    fi
    if [ -z "${PID}" ]; then
    read -p "Project UUID: " PID
    echo
    fi
    curl --verbose \
    ${ALLOW_INSECURE} \
    --user $USER \
    "https://$AFTOK_HOST/api/projects/$PID/contributors"
  • edit in server/Aftok/Snaplet/Projects.hs at line 9
    [3.63460]
    [3.52743]
    listContributorsHandler,
    contributorJSON,
  • edit in server/Aftok/Snaplet/Projects.hs at line 16
    [3.63503]
    [3.63503]
    import Aftok.Json (idValue)
  • replacement in server/Aftok/Snaplet/Projects.hs at line 24
    [3.63698][3.63698:63718]()
    import Control.Lens
    [3.63698]
    [3.63718]
    import Control.Lens ((^.))
  • replacement in server/Aftok/Snaplet/Projects.hs at line 26
    [3.63763][3.63763:63786]()
    import Data.Aeson as A
    [3.63763]
    [3.63786]
    import qualified Data.Aeson as A
    import Data.Aeson ((.:), (.=), Value (..), object)
  • replacement in server/Aftok/Snaplet/Projects.hs at line 29
    [3.63837][3.63837:63866]()
    import Data.Thyme.Clock as C
    [3.63837]
    [3.63866]
    import qualified Data.Thyme.Clock as C
  • replacement in server/Aftok/Snaplet/Projects.hs at line 33
    [3.63987][3.63987:64020]()
    import Network.Mail.SMTP as SMTP
    [3.63987]
    [3.64020]
    import qualified Network.Mail.SMTP as SMTP
  • replacement in server/Aftok/Snaplet/Projects.hs at line 40
    [3.2792][3.4009:4054]()
    instance FromJSON ProjectCreateRequest where
    [3.8817]
    [3.34611]
    instance A.FromJSON ProjectCreateRequest where
  • edit in server/Aftok/Snaplet/Projects.hs at line 65
    [3.64422]
    [3.8936]
    contributorJSON :: (UserId, UserName, C.UTCTime) -> Value
    contributorJSON (uid, uname, t) =
    object
    [ "user_id" .= idValue _UserId uid,
    "username" .= (uname ^. _UserName),
    "joined_at" .= t
    ]
    listContributorsHandler :: S.Handler App App [(UserId, UserName, C.UTCTime)]
    listContributorsHandler = do
    uid <- requireUserId
    pid <- requireProjectId
    snapEval $ listProjectContributors pid uid
  • replacement in server/Aftok/Snaplet/Projects.hs at line 110
    [3.64959][3.64959:65040]()
    (sendMailWithLogin _smtpHost)
    (sendMailWithLogin' _smtpHost)
    [3.64959]
    [3.65040]
    (SMTP.sendMailWithLogin _smtpHost)
    (SMTP.sendMailWithLogin' _smtpHost)
  • edit in server/Main.hs at line 79
    [3.77224]
    [3.77224]
    listContributorsRoute =
    serveJSON (fmap contributorJSON) $ method GET listContributorsHandler
  • edit in server/Main.hs at line 137
    [2.106406]
    [2.106406]
    ("projects/:projectId/contributors", listContributorsRoute), -- list_project_contributors.sh