1 {-# LANGUAGE OverloadedStrings, TypeFamilies #-} 2 module Model.Container.Types 3 ( ContainerRow(..) 4 , Container(..) 5 , getContainerVolumeRole 6 , getContainerRelease 7 ) where 8 9 import Data.Foldable (fold) 10 import qualified Data.Text as T 11 12 import Has (Has(..)) 13 import Model.Time 14 import Model.Kind 15 import Model.Release.Types 16 import Model.Id.Types 17 import Model.Volume.Types 18 import Model.Permission.Types 19 20 type instance IdType Container = Int32 21 22 data ContainerRow = ContainerRow 23 { containerId :: Id Container 24 , containerTop :: Bool 25 , containerName :: Maybe T.Text 26 , containerDate :: Maybe Date 27 } 28 29 data Container = Container 30 { containerRow :: !ContainerRow 31 , containerRelease :: Maybe Release 32 , containerVolume :: Volume 33 } 34 35 getContainerVolumeRole :: Container -> VolumeRolePolicy 36 getContainerVolumeRole = volumeRolePolicy . containerVolume 37 38 getContainerRelease :: Container -> EffectiveRelease 39 getContainerRelease c = 40 EffectiveRelease { 41 effRelPublic = (fold . containerRelease) c 42 , effRelPrivate = ReleasePRIVATE -- TODO: name hardcoded default level for Private release centrally 43 } 44 45 instance Kinded Container where 46 kindOf _ = "container" 47 48 instance Has (Id Container) ContainerRow where 49 view = containerId 50 51 instance Has (Id Container) Container where 52 view = view . containerRow 53 instance Has (Maybe Release) Container where 54 view = containerRelease 55 instance Has Volume Container where 56 view = containerVolume 57 instance Has Permission Container where 58 view = view . containerVolume 59