module IHP.IDE.SchemaDesigner.Controller.Indexes where import IHP.ControllerPrelude import IHP.IDE.ToolServer.Types import IHP.IDE.SchemaDesigner.View.Indexes.Edit import IHP.IDE.SchemaDesigner.View.Layout (schemaDesignerLayout) import IHP.IDE.SchemaDesigner.Controller.Helper import qualified IHP.IDE.SchemaDesigner.SchemaOperations as SchemaOperations instance Controller IndexesController where beforeAction :: (?context::ControllerContext, ?modelContext::ModelContext, ?theAction::IndexesController) => IO () beforeAction = (?context::ControllerContext) => ((?context::ControllerContext) => Layout) -> IO () ((?context::ControllerContext) => Layout) -> IO () setLayout (?context::ControllerContext) => Layout Layout Html -> Html schemaDesignerLayout action :: (?context::ControllerContext, ?modelContext::ModelContext, ?theAction::IndexesController) => IndexesController -> IO () action EditIndexAction { Text tableName :: Text $sel:tableName:EditIndexAction :: IndexesController -> Text tableName, Text indexName :: Text $sel:indexName:EditIndexAction :: IndexesController -> Text indexName } = do [Statement] statements <- IO [Statement] forall controller. (?context::ControllerContext, ?modelContext::ModelContext, ?theAction::controller) => IO [Statement] readSchema EditIndexView -> IO () forall view. (View view, ?context::ControllerContext) => view -> IO () render EditIndexView { [Statement] Text tableName :: Text indexName :: Text statements :: [Statement] $sel:statements:EditIndexView :: [Statement] $sel:indexName:EditIndexView :: Text $sel:tableName:EditIndexView :: Text .. } action UpdateIndexAction { Text $sel:tableName:EditIndexAction :: IndexesController -> Text tableName :: Text tableName, Text $sel:indexName:EditIndexAction :: IndexesController -> Text indexName :: Text indexName } = do [Statement] statements <- IO [Statement] forall controller. (?context::ControllerContext, ?modelContext::ModelContext, ?theAction::controller) => IO [Statement] readSchema let options :: UpdateIndexOptions options = SchemaOperations.UpdateIndexOptions { $sel:indexName:UpdateIndexOptions :: Text indexName = Text indexName , $sel:newIndexName:UpdateIndexOptions :: Text newIndexName = ByteString -> Text forall valueType. (?context::ControllerContext, ParamReader valueType) => ByteString -> valueType param ByteString "newIndexName" , $sel:indexColumns:UpdateIndexOptions :: [IndexColumn] indexColumns = ByteString -> [IndexColumn] forall valueType. (?context::ControllerContext, ParamReader valueType) => ByteString -> valueType param ByteString "indexColumns" } ([Statement] -> [Statement]) -> IO () forall controller. (?context::ControllerContext, ?modelContext::ModelContext, ?theAction::controller) => ([Statement] -> [Statement]) -> IO () updateSchema (UpdateIndexOptions -> [Statement] -> [Statement] SchemaOperations.updateIndex UpdateIndexOptions options) TablesController -> IO () forall action. (?context::ControllerContext, HasPath action) => action -> IO () redirectTo ShowTableAction { Text tableName :: Text $sel:tableName:TablesAction :: Text .. } action CreateIndexAction { Text $sel:tableName:EditIndexAction :: IndexesController -> Text tableName :: Text tableName, Text columnName :: Text $sel:columnName:EditIndexAction :: IndexesController -> Text columnName } = do [Statement] statements <- IO [Statement] forall controller. (?context::ControllerContext, ?modelContext::ModelContext, ?theAction::controller) => IO [Statement] readSchema let options :: AddIndexOptions options = SchemaOperations.AddIndexOptions { Text tableName :: Text $sel:tableName:AddIndexOptions :: Text tableName, Text columnName :: Text $sel:columnName:AddIndexOptions :: Text columnName } ([Statement] -> [Statement]) -> IO () forall controller. (?context::ControllerContext, ?modelContext::ModelContext, ?theAction::controller) => ([Statement] -> [Statement]) -> IO () updateSchema (AddIndexOptions -> [Statement] -> [Statement] SchemaOperations.addIndex AddIndexOptions options) TablesController -> IO () forall action. (?context::ControllerContext, HasPath action) => action -> IO () redirectTo ShowTableAction { Text $sel:tableName:TablesAction :: Text tableName :: Text .. } action DeleteIndexAction { Text $sel:tableName:EditIndexAction :: IndexesController -> Text tableName :: Text tableName, Text $sel:indexName:EditIndexAction :: IndexesController -> Text indexName :: Text indexName } = do [Statement] statements <- IO [Statement] forall controller. (?context::ControllerContext, ?modelContext::ModelContext, ?theAction::controller) => IO [Statement] readSchema ([Statement] -> [Statement]) -> IO () forall controller. (?context::ControllerContext, ?modelContext::ModelContext, ?theAction::controller) => ([Statement] -> [Statement]) -> IO () updateSchema (Text -> [Statement] -> [Statement] SchemaOperations.deleteIndex Text indexName) TablesController -> IO () forall action. (?context::ControllerContext, HasPath action) => action -> IO () redirectTo ShowTableAction { Text $sel:tableName:TablesAction :: Text tableName :: Text .. }