1 {-# LANGUAGE TemplateHaskell, OverloadedStrings #-}
    2 module Databrary.Model.Asset.SQL
    3   ( selectAssetRow
    4   , selectAsset
    5   -- , insertAsset
    6   -- , updateAsset
    7   , makeAssetRow
    8   , setAssetId
    9   -- for expanded queries
   10   ) where
   11 
   12 import qualified Data.ByteString as BS
   13 import Data.Int (Int64)
   14 import qualified Data.Text as T
   15 import qualified Language.Haskell.TH as TH
   16 
   17 import Databrary.Model.Offset
   18 import Databrary.Model.Format
   19 import Databrary.Model.Id.Types
   20 import Databrary.Model.Release.Types
   21 import Databrary.Model.SQL.Select
   22 import Databrary.Model.Volume.SQL
   23 import Databrary.Model.Asset.Types
   24 
   25 makeAssetRow :: Id Asset -> Id Format -> Maybe Release -> Maybe Offset -> Maybe T.Text -> Maybe BS.ByteString -> Maybe Int64 -> AssetRow
   26 makeAssetRow i = AssetRow i . getFormat'
   27 
   28 selectAssetRow :: Selector -- ^ @'AssetRow'@
   29 selectAssetRow = selectColumns 'makeAssetRow "asset" ["id", "format", "release", "duration", "name", "sha1", "size"]
   30 
   31 selectAsset :: TH.Name -- ^ @'Identity'@
   32   -> Selector -- ^ @'Asset'@
   33 selectAsset ident = selectJoin 'Asset
   34   [ selectAssetRow
   35   , joinOn "asset.volume = volume.id" $ selectVolume ident
   36   ]
   37 
   38 setAssetId :: Asset -> Id Asset -> Asset
   39 setAssetId a i = a{ assetRow = (assetRow a){ assetId = i } }
   40 
   41 {-
   42 assetKeys :: String -- ^ @'Asset'@
   43   -> [(String, String)]
   44 assetKeys r =
   45   [ ("id", "${assetId $ assetRow " ++ r ++ "}") ]
   46 
   47 assetSets :: String -- ^ @'Asset'@
   48   -> [(String, String)]
   49 assetSets a =
   50   [ ("volume", "${volumeId $ volumeRow $ assetVolume " ++ a ++ "}")
   51   , ("format", "${formatId $ assetFormat $ assetRow " ++ a ++ "}")
   52   , ("release", "${assetRelease $ assetRow " ++ a ++ "}")
   53   , ("duration", "${assetDuration $ assetRow " ++ a ++ "}")
   54   , ("name", "${assetName $ assetRow " ++ a ++ "}")
   55   , ("sha1", "${assetSHA1 $ assetRow " ++ a ++ "}")
   56   , ("size", "${assetSize $ assetRow " ++ a ++ "}")
   57   ]
   58 
   59 insertAsset :: TH.Name -- ^ @'AuditIdentity'@
   60   -> TH.Name -- ^ @'Asset'@
   61   -> TH.ExpQ -- ^ @'Asset'@
   62 insertAsset ident a = auditInsert ident "asset"
   63   (assetSets (nameRef a))
   64   (Just $ selectOutput $ selectMap ((TH.VarE 'setAssetId `TH.AppE` TH.VarE a) `TH.AppE`) $ selectColumn "asset" "id")
   65 
   66 updateAsset :: TH.Name -- ^ @'AuditIdentity'@
   67   -> TH.Name -- ^ @'Asset'@
   68   -> TH.ExpQ -- ^ @()@
   69 updateAsset ident a = auditUpdate ident "asset"
   70   (assetSets (nameRef a))
   71   (whereEq $ assetKeys (nameRef a))
   72   Nothing
   73 -}