ihp-ide-1.4.0: IHP/IDE/CodeGen/Types.hs
module IHP.IDE.CodeGen.Types where
import IHP.Prelude
import IHP.IDE.SchemaDesigner.Types
data GeneratorAction
= CreateFile { filePath :: Text, fileContent :: Text }
| AppendToFile { filePath :: Text, fileContent :: Text }
| AppendToMarker { marker :: Text, filePath :: Text, fileContent :: Text }
| AddImport { filePath :: Text, fileContent :: Text }
| AddAction { filePath :: Text, fileContent :: Text }
| AddToDataConstructor { dataConstructor :: Text, filePath :: Text, fileContent :: Text }
| AddMountToFrontController { filePath :: Text, applicationName :: Text }
| EnsureDirectory { directory :: Text }
| RunShellCommand { shellCommand :: Text }
deriving (Show, Eq)
fieldsForTable :: [Statement] -> Text -> Maybe [Text]
fieldsForTable database name =
case getTable database name of
Just (StatementCreateTable CreateTable { columns, primaryKeyConstraint }) -> columns
|> filter (columnRelevantForCreateOrEdit primaryKeyConstraint)
|> map (.name)
|> map columnNameToFieldName
|> Just
_ -> Nothing
-- | Returns True when a column should be part of the generated controller or forms
--
-- Returrns @False@ for primary keys, or fields such as @created_at@
columnRelevantForCreateOrEdit :: PrimaryKeyConstraint -> Column -> Bool
columnRelevantForCreateOrEdit _ column
| (column.columnType == PTimestamp || column.columnType == PTimestampWithTimezone)
&& (isJust (column.defaultValue))
= False
columnRelevantForCreateOrEdit (PrimaryKeyConstraint primaryKeyColumns) column =
column.name `notElem` primaryKeyColumns
getTable :: [Statement] -> Text -> Maybe Statement
getTable schema name = find isTable schema
where
isTable :: Statement -> Bool
isTable table@(StatementCreateTable CreateTable { name = name' }) | name == name' = True
isTable _ = False