packages feed

grab-form-0.0.0.1: test/Test/OrgRoster/Concepts.hs

{-# OPTIONS_GHC -Wall #-}

module Test.OrgRoster.Concepts where

import Numeric.Natural (Natural)

import Data.Map (Map)

import Data.Text (Text)

newtype OrgId = OrgId Text
    deriving (Eq, Show)

newtype OrgMemberName = OrgMemberName Text
    deriving (Eq, Show)

-- | A position in an org's member list.

newtype RosterOrdinal = RosterOrdinal Natural
    deriving (Show, Eq, Ord)

-- | Whether an org member has permissions to administer the org.

data OrgRole
  = OrgRole_Normal   -- ^ No, a regular user with no management permission
  | OrgRole_Manager  -- ^ Yes, this user is an org manager
    deriving (Eq, Show)

-- | Whether an org member gets access to Type Classes content.

data OrgContentAccess
  = OrgContentAccess_Yes  -- ^ Yes, has access to content
  | OrgContentAccess_No   -- ^ No, the membership does not grant content access
    deriving (Eq, Show)

data Roster =
  Roster
    { roster_org :: OrgId
    , roster_members :: MemberList
    }
    deriving (Eq, Show)

data MemberList =
  MemberList
    { members_existing :: Map RosterOrdinal Modification
    , members_new :: [Member]
    }
    deriving (Eq, Show)

data Modification
  = Modification_Update Member
  | Modification_Delete
    deriving (Eq, Show)

data Member =
  Member
    { member_name :: Maybe OrgMemberName
    , member_role :: OrgRole
    , member_access :: OrgContentAccess
    }
    deriving (Eq, Show)