1 {-# LANGUAGE TemplateHaskell #-}
    2 module Databrary.Model.Funding.SQL
    3   ( selectFunder
    4   , selectVolumeFunding
    5   ) where
    6 
    7 import Data.Maybe (fromMaybe)
    8 import qualified Data.Text as T
    9 
   10 import Databrary.Model.SQL.Select
   11 import Databrary.Model.Funding.Types
   12 
   13 funderRow :: Selector -- ^ @'Funder'@
   14 funderRow = selectColumns 'Funder "funder" ["fundref_id", "name"]
   15 
   16 selectFunder :: Selector -- ^ @'Funder'@
   17 selectFunder = funderRow
   18 
   19 makeFunding :: [Maybe T.Text] -> Funder -> Funding
   20 makeFunding a f = Funding f (map (fromMaybe (error "NULL funding.award")) a)
   21 
   22 fundingRow :: Selector -- ^ @'Funder' -> 'Funding'@
   23 fundingRow = selectColumns 'makeFunding "volume_funding" ["awards"]
   24 
   25 selectVolumeFunding :: Selector -- ^ @'Funding'@
   26 selectVolumeFunding = selectJoin '($)
   27   [ fundingRow
   28   , joinOn "volume_funding.funder = funder.fundref_id" selectFunder
   29   ]