1 {-# LANGUAGE OverloadedStrings, TemplateHaskell, TypeFamilies #-} 2 module Databrary.Model.Asset.Types 3 ( AssetRow(..) 4 , Asset(..) 5 , getAssetReleaseMaybe 6 , getAssetFormat 7 , blankAsset 8 ) where 9 10 import qualified Data.ByteString as BS 11 import Data.Int (Int64) 12 import qualified Data.Text as T 13 14 import Databrary.Has (Has(..)) 15 import Databrary.Model.Offset 16 import Databrary.Model.Kind 17 -- import Databrary.Model.Permission.Types 18 import Databrary.Model.Release.Types 19 import Databrary.Model.Id.Types 20 import Databrary.Model.Volume.Types 21 import Databrary.Model.Format.Types 22 23 type instance IdType Asset = Int32 24 25 data AssetRow = AssetRow 26 { assetId :: Id Asset 27 , assetFormat :: Format 28 , assetRelease :: Maybe Release 29 , assetDuration :: Maybe Offset 30 , assetName :: Maybe T.Text 31 , assetSHA1 :: Maybe BS.ByteString 32 , assetSize :: Maybe Int64 33 } 34 deriving (Show) 35 data Asset = Asset 36 { assetRow :: !AssetRow 37 , assetVolume :: Volume 38 } 39 deriving (Show) 40 41 instance Kinded Asset where 42 kindOf _ = "asset" 43 44 -- makeHasRec ''AssetRow ['assetId, 'assetFormat, 'assetRelease] 45 -- makeHasRec ''Asset ['assetRow, 'assetVolume] 46 instance Has (Id Asset) AssetRow where 47 view = assetId 48 instance Has Format AssetRow where 49 view = assetFormat 50 instance Has (Id Format) AssetRow where 51 view = (view . assetFormat) 52 -- instance Has (Maybe Release) AssetRow where 53 -- view = assetRelease 54 -- instance Has Release AssetRow where 55 -- view = (view . assetRelease) 56 57 instance Has AssetRow Asset where 58 view = assetRow 59 instance Has (Id Asset) Asset where 60 view = (view . assetRow) 61 instance Has Format Asset where 62 view = (view . assetRow) 63 instance Has (Id Format) Asset where 64 view = (view . assetRow) 65 -- instance Has (Maybe Release) Asset where 66 -- view = (view . assetRow) 67 -- instance Has Release Asset where 68 -- view = (view . assetRow) 69 instance Has Volume Asset where 70 view = assetVolume 71 -- instance Has Permission Asset where 72 -- view = (view . assetVolume) 73 instance Has (Id Volume) Asset where 74 view = (view . assetVolume) 75 -- instance Has VolumeRow Asset where 76 -- view = (view . assetVolume) 77 78 getAssetReleaseMaybe :: Asset -> Maybe Release 79 getAssetReleaseMaybe = assetRelease . assetRow 80 getAssetFormat :: Asset -> Format 81 getAssetFormat = assetFormat . assetRow 82 83 blankAsset :: Volume -> Asset 84 blankAsset vol = Asset 85 { assetRow = AssetRow 86 { assetId = error "blankAsset" 87 , assetFormat = unknownFormat 88 , assetRelease = Nothing 89 , assetName = Nothing 90 , assetDuration = Nothing 91 , assetSHA1 = Nothing 92 , assetSize = Nothing 93 } 94 , assetVolume = vol 95 }