1 {-# LANGUAGE OverloadedStrings, TypeFamilies #-} 2 module 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 Has (Has(..)) 15 import Model.Offset 16 import Model.Kind 17 import Model.Release.Types 18 import Model.Id.Types 19 import Model.Volume.Types 20 import Model.Format.Types 21 22 type instance IdType Asset = Int32 23 24 data AssetRow = AssetRow 25 { assetId :: Id Asset 26 , assetFormat :: Format 27 , assetRelease :: Maybe Release 28 , assetDuration :: Maybe Offset 29 , assetName :: Maybe T.Text 30 , assetSHA1 :: Maybe BS.ByteString 31 , assetSize :: Maybe Int64 32 } 33 34 data Asset = Asset 35 { assetRow :: !AssetRow 36 , assetVolume :: Volume 37 } 38 39 instance Kinded Asset where 40 kindOf _ = "asset" 41 42 instance Has (Id Asset) AssetRow where 43 view = assetId 44 instance Has Format AssetRow where 45 view = assetFormat 46 instance Has (Id Format) AssetRow where 47 view = formatId . assetFormat 48 49 instance Has AssetRow Asset where 50 view = assetRow 51 instance Has (Id Asset) Asset where 52 view = view . assetRow 53 instance Has Format Asset where 54 view = view . assetRow 55 instance Has (Id Format) Asset where 56 view = view . assetRow 57 instance Has Volume Asset where 58 view = assetVolume 59 instance Has (Id Volume) Asset where 60 view = volumeId . volumeRow . assetVolume 61 62 getAssetReleaseMaybe :: Asset -> Maybe Release 63 getAssetReleaseMaybe = assetRelease . assetRow 64 getAssetFormat :: Asset -> Format 65 getAssetFormat = assetFormat . assetRow 66 67 blankAsset :: Volume -> Asset 68 blankAsset vol = Asset 69 { assetRow = AssetRow 70 { assetId = error "blankAsset" 71 , assetFormat = unknownFormat 72 , assetRelease = Nothing 73 , assetName = Nothing 74 , assetDuration = Nothing 75 , assetSHA1 = Nothing 76 , assetSize = Nothing 77 } 78 , assetVolume = vol 79 }