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 = (formatId . 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   }