packages feed

rds-data-0.0.0.1: src/Data/RdsData/Migration/Types.hs

{-# LANGUAGE DeriveGeneric              #-}
{-# LANGUAGE DerivingStrategies         #-}
{-# LANGUAGE DuplicateRecordFields      #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}

{- HLINT ignore "Use let" -}

module Data.RdsData.Migration.Types
  ( MigrationRow(..),
    RdsClusterDetails(..),
    Migration(..),
    Step(..),
    Statement(..),
  ) where

import           Amazonka.Data           (FromJSON, ToJSON)
import qualified Amazonka.RDS            as AWS
import qualified Amazonka.SecretsManager as AWS
import           Data.RdsData.Orphans    ()
import           Data.Text               (Text)
import           Data.Time
import           Data.ULID               (ULID)
import           GHC.Generics

data MigrationRow = MigrationRow
  { uuid       :: ULID
  , createdBy  :: UTCTime
  , deployedBy :: Text
  } deriving (Eq, Show, Generic)

data RdsClusterDetails = RdsClusterDetails
  { createDbClusterResponse :: AWS.CreateDBClusterResponse
  , createSecretResponse    :: AWS.CreateSecretResponse
  } deriving (Eq, Generic, Show)

data Migration = Migration
  { description :: Text
  , plan        :: [Step]
  }
  deriving (Eq, Generic, Show)

instance ToJSON Migration

instance FromJSON Migration

data Step = Step
  { id          :: ULID
  , description :: Text
  , up          :: [Statement]
  , down        :: [Statement]
  }
  deriving (Eq, Generic, Show)

instance ToJSON Step

instance FromJSON Step

newtype Statement = Statement Text
  deriving (Eq, Generic, Show)
  deriving newtype (ToJSON, FromJSON)