{-# LANGUAGE TemplateHaskell, OverloadedStrings #-} module Model.Asset.SQL ( selectAssetRow , selectAsset -- , insertAsset -- , updateAsset , makeAssetRow , setAssetId -- for expanded queries ) where import qualified Data.ByteString as BS import Data.Int (Int64) import qualified Data.Text as T import qualified Language.Haskell.TH as TH import Model.Offset import Model.Format import Model.Id.Types import Model.Release.Types import Model.SQL.Select import Model.Volume.SQL import Model.Asset.Types makeAssetRow :: Id Asset -> Id Format -> Maybe Release -> Maybe Offset -> Maybe T.Text -> Maybe BS.ByteString -> Maybe Int64 -> AssetRow makeAssetRow i = AssetRow i . getFormat' selectAssetRow :: Selector -- ^ @'AssetRow'@ selectAssetRow = selectColumns 'makeAssetRow "asset" ["id", "format", "release", "duration", "name", "sha1", "size"] selectAsset :: TH.Name -- ^ @'Identity'@ -> Selector -- ^ @'Asset'@ selectAsset ident = selectJoin 'Asset [ selectAssetRow , joinOn "asset.volume = volume.id" $ selectVolume ident ] setAssetId :: Asset -> Id Asset -> Asset setAssetId a i = a{ assetRow = (assetRow a){ assetId = i } } {- assetKeys :: String -- ^ @'Asset'@ -> [(String, String)] assetKeys r = [ ("id", "${assetId $ assetRow " ++ r ++ "}") ] assetSets :: String -- ^ @'Asset'@ -> [(String, String)] assetSets a = [ ("volume", "${volumeId $ volumeRow $ assetVolume " ++ a ++ "}") , ("format", "${formatId $ assetFormat $ assetRow " ++ a ++ "}") , ("release", "${assetRelease $ assetRow " ++ a ++ "}") , ("duration", "${assetDuration $ assetRow " ++ a ++ "}") , ("name", "${assetName $ assetRow " ++ a ++ "}") , ("sha1", "${assetSHA1 $ assetRow " ++ a ++ "}") , ("size", "${assetSize $ assetRow " ++ a ++ "}") ] insertAsset :: TH.Name -- ^ @'AuditIdentity'@ -> TH.Name -- ^ @'Asset'@ -> TH.ExpQ -- ^ @'Asset'@ insertAsset ident a = auditInsert ident "asset" (assetSets (nameRef a)) (Just $ selectOutput $ selectMap ((TH.VarE 'setAssetId `TH.AppE` TH.VarE a) `TH.AppE`) $ selectColumn "asset" "id") updateAsset :: TH.Name -- ^ @'AuditIdentity'@ -> TH.Name -- ^ @'Asset'@ -> TH.ExpQ -- ^ @()@ updateAsset ident a = auditUpdate ident "asset" (assetSets (nameRef a)) (whereEq $ assetKeys (nameRef a)) Nothing -}