1 {-# LANGUAGE TemplateHaskell, OverloadedStrings #-} 2 module 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 Model.Offset 18 import Model.Format 19 import Model.Id.Types 20 import Model.Release.Types 21 import Model.SQL.Select 22 import Model.Volume.SQL 23 import 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 -}