瀏覽代碼

refactor: marketplace api and cli presentation

ntorga 1 年之前
父節點
當前提交
3b79bcae31

+ 177 - 0
src/presentation/api/controller/marketplace.go

@@ -0,0 +1,177 @@
+package apiController
+
+import (
+	"errors"
+	"net/http"
+	"strconv"
+
+	"github.com/labstack/echo/v4"
+	"github.com/speedianet/os/src/domain/valueObject"
+	internalDbInfra "github.com/speedianet/os/src/infra/internalDatabase"
+	apiHelper "github.com/speedianet/os/src/presentation/api/helper"
+	"github.com/speedianet/os/src/presentation/service"
+)
+
+type MarketplaceController struct {
+	marketplaceService *service.MarketplaceService
+	persistentDbSvc    *internalDbInfra.PersistentDatabaseService
+}
+
+func NewMarketplaceController(
+	persistentDbSvc *internalDbInfra.PersistentDatabaseService,
+) *MarketplaceController {
+	return &MarketplaceController{
+		marketplaceService: service.NewMarketplaceService(persistentDbSvc),
+		persistentDbSvc:    persistentDbSvc,
+	}
+}
+
+// ReadCatalog godoc
+// @Summary      ReadCatalog
+// @Description  List marketplace catalog items.
+// @Tags         marketplace
+// @Security     Bearer
+// @Accept       json
+// @Produce      json
+// @Success      200 {array} entity.MarketplaceCatalogItem
+// @Router       /v1/marketplace/catalog/ [get]
+func (controller *MarketplaceController) ReadCatalog(c echo.Context) error {
+	return apiHelper.ServiceResponseWrapper(
+		c, controller.marketplaceService.ReadCatalog(),
+	)
+}
+
+func (controller *MarketplaceController) parseDataFields(
+	rawDataFields []interface{},
+) ([]valueObject.MarketplaceInstallableItemDataField, error) {
+	dataFields := []valueObject.MarketplaceInstallableItemDataField{}
+
+	for fieldIndex, rawDataField := range rawDataFields {
+		errPrefix := "[index " + strconv.Itoa(fieldIndex) + "] "
+
+		rawDataFieldMap, assertOk := rawDataField.(map[string]interface{})
+		if !assertOk {
+			return dataFields, errors.New(errPrefix + "InvalidDataFieldStructure")
+		}
+
+		rawName, exists := rawDataFieldMap["name"]
+		if !exists {
+			rawName, exists = rawDataFieldMap["key"]
+			if !exists {
+				return dataFields, errors.New(errPrefix + "DataFieldNameNotFound")
+			}
+			rawDataFieldMap["name"] = rawName
+		}
+
+		fieldName, err := valueObject.NewDataFieldName(rawName)
+		if err != nil {
+			return dataFields, errors.New(errPrefix + err.Error())
+		}
+
+		fieldValue, err := valueObject.NewDataFieldValue(rawDataFieldMap["value"])
+		if err != nil {
+			return dataFields, errors.New(errPrefix + err.Error())
+		}
+
+		dataField := valueObject.NewMarketplaceInstallableItemDataFieldPanic(
+			fieldName, fieldValue,
+		)
+
+		dataFields = append(dataFields, dataField)
+	}
+
+	return dataFields, nil
+}
+
+// InstallCatalogItem	 godoc
+// @Summary      InstallCatalogItem
+// @Description  Install a marketplace catalog item.
+// @Tags         marketplace
+// @Accept       json
+// @Produce      json
+// @Param        InstallMarketplaceCatalogItem 	  body    dto.InstallMarketplaceCatalogItem  true  "directory will be the virtual host root directory."
+// @Success      201 {object} object{} "MarketplaceCatalogItemInstalled"
+// @Router       /v1/marketplace/catalog/ [post]
+func (controller *MarketplaceController) InstallCatalogItem(c echo.Context) error {
+	requestBody, err := apiHelper.ReadRequestBody(c)
+	if err != nil {
+		return err
+	}
+
+	possibleUrlPathKeys := []string{"urlPath", "directory", "installDirectory"}
+	for _, key := range possibleUrlPathKeys {
+		if requestBody[key] == nil {
+			continue
+		}
+
+		urlPath, err := valueObject.NewUrlPath(requestBody[key])
+		if err != nil {
+			return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error())
+		}
+		requestBody["urlPath"] = urlPath
+	}
+
+	if requestBody["dataFields"] != nil {
+		_, isMapStringInterface := requestBody["dataFields"].(map[string]interface{})
+		if isMapStringInterface {
+			requestBody["dataFields"] = []interface{}{requestBody["dataFields"]}
+		}
+
+		dataFieldsSlice, assertOk := requestBody["dataFields"].([]interface{})
+		if !assertOk {
+			return apiHelper.ResponseWrapper(
+				c, http.StatusBadRequest, "DataFieldsMustBeArray",
+			)
+		}
+
+		dataFields, err := controller.parseDataFields(dataFieldsSlice)
+		if err != nil {
+			return apiHelper.ResponseWrapper(c, http.StatusBadRequest, err.Error())
+		}
+		requestBody["dataFields"] = dataFields
+	}
+
+	return apiHelper.ServiceResponseWrapper(
+		c, controller.marketplaceService.InstallCatalogItem(requestBody),
+	)
+}
+
+// ReadInstalledItems godoc
+// @Summary      ReadInstalledItems
+// @Description  List marketplace installed items.
+// @Tags         marketplace
+// @Security     Bearer
+// @Accept       json
+// @Produce      json
+// @Success      200 {array} entity.MarketplaceInstalledItem
+// @Router       /v1/marketplace/installed/ [get]
+func (controller *MarketplaceController) ReadInstalledItems(c echo.Context) error {
+	return apiHelper.ServiceResponseWrapper(
+		c, controller.marketplaceService.ReadInstalledItems(),
+	)
+}
+
+// DeleteInstalledItem godoc
+// @Summary      DeleteInstalledItem
+// @Description  Delete/Uninstall an installed item.
+// @Tags         marketplace
+// @Accept       json
+// @Produce      json
+// @Security     Bearer
+// @Param        installedId path uint true "MarketplaceInstalledItemId to delete."
+// @Param        shouldUninstallServices query boolean false "Should uninstall all services not being used? Default is 'true'."
+// @Success      200 {object} object{} "MarketplaceInstalledItemDeleted"
+// @Router       /v1/marketplace/installed/{installedId}/ [delete]
+func (controller *MarketplaceController) DeleteInstalledItem(c echo.Context) error {
+	requestBody := map[string]interface{}{
+		"installedId": c.Param("installedId"),
+	}
+
+	if c.QueryParam("shouldUninstallServices") != "" {
+		requestBody["shouldUninstallServices"] = c.QueryParam("shouldUninstallServices")
+	}
+
+	return apiHelper.ServiceResponseWrapper(
+		c, controller.marketplaceService.DeleteInstalledItem(requestBody),
+	)
+}

+ 0 - 214
src/presentation/api/controller/marketplaceController.go

@@ -1,214 +0,0 @@
-package apiController
-
-import (
-	"net/http"
-
-	"github.com/labstack/echo/v4"
-	"github.com/speedianet/os/src/domain/dto"
-	"github.com/speedianet/os/src/domain/useCase"
-	"github.com/speedianet/os/src/domain/valueObject"
-	internalDbInfra "github.com/speedianet/os/src/infra/internalDatabase"
-	marketplaceInfra "github.com/speedianet/os/src/infra/marketplace"
-	vhostInfra "github.com/speedianet/os/src/infra/vhost"
-	apiHelper "github.com/speedianet/os/src/presentation/api/helper"
-	sharedHelper "github.com/speedianet/os/src/presentation/shared/helper"
-)
-
-type MarketplaceController struct {
-	persistentDbSvc *internalDbInfra.PersistentDatabaseService
-}
-
-func NewMarketplaceController(
-	persistentDbSvc *internalDbInfra.PersistentDatabaseService,
-) *MarketplaceController {
-	return &MarketplaceController{
-		persistentDbSvc: persistentDbSvc,
-	}
-}
-
-// ReadCatalog godoc
-// @Summary      ReadCatalog
-// @Description  List marketplace catalog services names, types, steps and more.
-// @Tags         marketplace
-// @Security     Bearer
-// @Accept       json
-// @Produce      json
-// @Success      200 {array} entity.MarketplaceCatalogItem
-// @Router       /v1/marketplace/catalog/ [get]
-func (controller *MarketplaceController) ReadCatalog(c echo.Context) error {
-	marketplaceQueryRepo := marketplaceInfra.NewMarketplaceQueryRepo(controller.persistentDbSvc)
-
-	catalogItems, err := useCase.ReadMarketplaceCatalog(marketplaceQueryRepo)
-	if err != nil {
-		return apiHelper.ResponseWrapper(c, http.StatusInternalServerError, err.Error())
-	}
-
-	return apiHelper.ResponseWrapper(c, http.StatusOK, catalogItems)
-}
-
-func parseDataFieldsFromBody(
-	dataFieldsBodyInput interface{},
-) []valueObject.MarketplaceInstallableItemDataField {
-	dataFields := []valueObject.MarketplaceInstallableItemDataField{}
-
-	if dataFieldsBodyInput == nil {
-		return dataFields
-	}
-
-	dataFieldsInterfaceSlice, assertOk := dataFieldsBodyInput.([]interface{})
-	if !assertOk {
-		panic("InvalidDataField")
-	}
-
-	for _, dataFieldsInterface := range dataFieldsInterfaceSlice {
-		dataFieldMap, assertOk := dataFieldsInterface.(map[string]interface{})
-		if !assertOk {
-			panic("InvalidDataFieldStructure")
-		}
-
-		nameStr, assertOk := dataFieldMap["name"].(string)
-		if !assertOk {
-			nameStr, assertOk = dataFieldMap["key"].(string)
-			if !assertOk {
-				panic("InvalidDataField")
-			}
-		}
-
-		dataField := valueObject.NewMarketplaceInstallableItemDataFieldPanic(
-			valueObject.NewDataFieldNamePanic(nameStr),
-			valueObject.NewDataFieldValuePanic(dataFieldMap["value"].(string)),
-		)
-
-		dataFields = append(dataFields, dataField)
-	}
-
-	return dataFields
-}
-
-// InstallCatalogItem	 godoc
-// @Summary      InstallCatalogItem
-// @Description  Install a marketplace catalog item.
-// @Tags         marketplace
-// @Accept       json
-// @Produce      json
-// @Param        InstallMarketplaceCatalogItem 	  body    dto.InstallMarketplaceCatalogItem  true  "directory will be the virtual host root directory."
-// @Success      201 {object} object{} "MarketplaceCatalogItemInstalled"
-// @Router       /v1/marketplace/catalog/ [post]
-func (controller *MarketplaceController) InstallCatalogItem(c echo.Context) error {
-	requiredParams := []string{"hostname"}
-	requestBody, _ := apiHelper.ReadRequestBody(c)
-
-	apiHelper.CheckMissingParams(requestBody, requiredParams)
-
-	hostname := valueObject.NewFqdnPanic(requestBody["hostname"].(string))
-
-	var idPtr *valueObject.MarketplaceItemId
-	if requestBody["id"] != nil {
-		id := valueObject.NewMarketplaceItemIdPanic(requestBody["id"])
-		idPtr = &id
-	}
-
-	var slugPtr *valueObject.MarketplaceItemSlug
-	if requestBody["slug"] != nil {
-		slug := valueObject.NewMarketplaceItemSlugPanic(requestBody["slug"])
-		slugPtr = &slug
-	}
-
-	var urlPathPtr *valueObject.UrlPath
-	if requestBody["directory"] != nil {
-		urlPath := valueObject.NewUrlPathPanic(requestBody["directory"].(string))
-		urlPathPtr = &urlPath
-	}
-	if requestBody["installDirectory"] != nil {
-		urlPath := valueObject.NewUrlPathPanic(requestBody["installDirectory"].(string))
-		urlPathPtr = &urlPath
-	}
-
-	dataFields := parseDataFieldsFromBody(requestBody["dataFields"])
-
-	marketplaceQueryRepo := marketplaceInfra.NewMarketplaceQueryRepo(controller.persistentDbSvc)
-	marketplaceCmdRepo := marketplaceInfra.NewMarketplaceCmdRepo(controller.persistentDbSvc)
-	vhostQueryRepo := vhostInfra.NewVirtualHostQueryRepo(controller.persistentDbSvc)
-	vhostCmdRepo := vhostInfra.NewVirtualHostCmdRepo(controller.persistentDbSvc)
-
-	dto := dto.NewInstallMarketplaceCatalogItem(idPtr, slugPtr, hostname, urlPathPtr, dataFields)
-	err := useCase.InstallMarketplaceCatalogItem(
-		marketplaceQueryRepo,
-		marketplaceCmdRepo,
-		vhostQueryRepo,
-		vhostCmdRepo,
-		dto,
-	)
-	if err != nil {
-		return apiHelper.ResponseWrapper(c, http.StatusInternalServerError, err.Error())
-	}
-
-	return apiHelper.ResponseWrapper(c, http.StatusCreated, "MarketplaceCatalogItemInstalled")
-}
-
-// ReadInstalledItems godoc
-// @Summary      ReadInstalledItems
-// @Description  List marketplace installed items.
-// @Tags         marketplace
-// @Security     Bearer
-// @Accept       json
-// @Produce      json
-// @Success      200 {array} entity.MarketplaceInstalledItem
-// @Router       /v1/marketplace/installed/ [get]
-func (controller *MarketplaceController) ReadInstalledItems(c echo.Context) error {
-	marketplaceQueryRepo := marketplaceInfra.NewMarketplaceQueryRepo(controller.persistentDbSvc)
-
-	installedItems, err := useCase.ReadMarketplaceInstalledItems(marketplaceQueryRepo)
-	if err != nil {
-		return apiHelper.ResponseWrapper(c, http.StatusInternalServerError, err.Error())
-	}
-
-	return apiHelper.ResponseWrapper(c, http.StatusOK, installedItems)
-}
-
-// DeleteInstalledItem godoc
-// @Summary      DeleteInstalledItem
-// @Description  Delete/Uninstall a marketplace installed item.
-// @Tags         marketplace
-// @Accept       json
-// @Produce      json
-// @Security     Bearer
-// @Param        installedId path uint true "MarketplaceInstalledItemId to delete."
-// @Param        shouldUninstallServices query boolean false "Should uninstall all services that were installed with the marketplace item installation? Default is 'true'."
-// @Success      200 {object} object{} "MarketplaceInstalledItemDeleted"
-// @Router       /v1/marketplace/installed/{installedId}/ [delete]
-func (controller *MarketplaceController) DeleteInstalledItem(c echo.Context) error {
-	installedId := valueObject.NewMarketplaceItemIdPanic(
-		c.Param("installedId"),
-	)
-
-	var err error
-
-	shouldUninstallServices := true
-	if c.QueryParam("shouldUninstallServices") != "" {
-		shouldUninstallServices, err = sharedHelper.ParseBoolParam(
-			c.QueryParam("shouldUninstallServices"),
-		)
-		if err != nil {
-			shouldUninstallServices = false
-		}
-	}
-
-	deleteMarketplaceInstalledItem := dto.NewDeleteMarketplaceInstalledItem(
-		installedId, shouldUninstallServices,
-	)
-
-	marketplaceQueryRepo := marketplaceInfra.NewMarketplaceQueryRepo(controller.persistentDbSvc)
-	marketplaceCmdRepo := marketplaceInfra.NewMarketplaceCmdRepo(controller.persistentDbSvc)
-
-	err = useCase.DeleteMarketplaceInstalledItem(
-		marketplaceQueryRepo,
-		marketplaceCmdRepo,
-		deleteMarketplaceInstalledItem,
-	)
-	if err != nil {
-		return apiHelper.ResponseWrapper(c, http.StatusInternalServerError, err.Error())
-	}
-
-	return apiHelper.ResponseWrapper(c, http.StatusOK, "MarketplaceInstalledItemDeleted")
-}

+ 167 - 0
src/presentation/cli/controller/marketplace.go

@@ -0,0 +1,167 @@
+package cliController
+
+import (
+	"errors"
+	"strconv"
+	"strings"
+
+	"github.com/speedianet/os/src/domain/valueObject"
+	internalDbInfra "github.com/speedianet/os/src/infra/internalDatabase"
+	cliHelper "github.com/speedianet/os/src/presentation/cli/helper"
+	"github.com/speedianet/os/src/presentation/service"
+	"github.com/spf13/cobra"
+)
+
+type MarketplaceController struct {
+	persistentDbSvc    *internalDbInfra.PersistentDatabaseService
+	marketplaceService *service.MarketplaceService
+}
+
+func NewMarketplaceController(
+	persistentDbSvc *internalDbInfra.PersistentDatabaseService,
+) *MarketplaceController {
+	return &MarketplaceController{
+		persistentDbSvc:    persistentDbSvc,
+		marketplaceService: service.NewMarketplaceService(persistentDbSvc),
+	}
+}
+
+func (controller *MarketplaceController) ReadCatalog() *cobra.Command {
+	cmd := &cobra.Command{
+		Use:   "list-catalog",
+		Short: "ReadCatalogItems",
+		Run: func(cmd *cobra.Command, args []string) {
+			cliHelper.ServiceResponseWrapper(controller.marketplaceService.ReadCatalog())
+		},
+	}
+
+	return cmd
+}
+
+func (controller *MarketplaceController) parseDataFields(
+	rawDataFields []string,
+) ([]valueObject.MarketplaceInstallableItemDataField, error) {
+	dataFields := []valueObject.MarketplaceInstallableItemDataField{}
+
+	for fieldIndex, rawDataField := range rawDataFields {
+		errPrefix := "[index " + strconv.Itoa(fieldIndex) + "] "
+
+		dataFieldsParts := strings.Split(rawDataField, ":")
+		if len(dataFieldsParts) < 2 {
+			return dataFields, errors.New(errPrefix + "InvalidDataFields")
+		}
+
+		fieldName, err := valueObject.NewDataFieldName(dataFieldsParts[0])
+		if err != nil {
+			return dataFields, errors.New(errPrefix + "InvalidDataFieldName")
+		}
+
+		fieldValue, err := valueObject.NewDataFieldValue(dataFieldsParts[1])
+		if err != nil {
+			return dataFields, errors.New(errPrefix + "InvalidDataFieldValue")
+		}
+
+		dataField := valueObject.NewMarketplaceInstallableItemDataFieldPanic(
+			fieldName, fieldValue,
+		)
+
+		dataFields = append(dataFields, dataField)
+	}
+
+	return dataFields, nil
+}
+
+func (controller *MarketplaceController) InstallCatalogItem() *cobra.Command {
+	var hostnameStr string
+	var catalogIdInt int
+	var slugStr string
+	var urlPath string
+	var dataFieldsStr []string
+
+	cmd := &cobra.Command{
+		Use:   "install",
+		Short: "InstallCatalogItem",
+		Run: func(cmd *cobra.Command, args []string) {
+			requestBody := map[string]interface{}{
+				"hostname": hostnameStr,
+			}
+
+			if catalogIdInt != 0 {
+				requestBody["id"] = catalogIdInt
+			}
+
+			if slugStr != "" {
+				requestBody["slug"] = slugStr
+			}
+
+			if urlPath != "" {
+				requestBody["urlPath"] = urlPath
+			}
+
+			dataFields, err := controller.parseDataFields(dataFieldsStr)
+			if err != nil {
+				cliHelper.ResponseWrapper(false, err.Error())
+			}
+			requestBody["dataFields"] = dataFields
+
+			cliHelper.ServiceResponseWrapper(
+				controller.marketplaceService.InstallCatalogItem(requestBody),
+			)
+		},
+	}
+
+	cmd.Flags().StringVarP(&hostnameStr, "hostname", "n", "", "VirtualHostName")
+	cmd.MarkFlagRequired("hostname")
+	cmd.Flags().IntVarP(&catalogIdInt, "catalogId", "i", 0, "CatalogItemId")
+	cmd.Flags().StringVarP(&slugStr, "slug", "s", "", "CatalogItemSlug")
+	cmd.Flags().StringVarP(&urlPath, "urlPath", "d", "", "UrlPath")
+	cmd.Flags().StringSliceVarP(
+		&dataFieldsStr, "dataFields", "f", []string{}, "InstallationDataFields (key:value)",
+	)
+	return cmd
+}
+
+func (controller *MarketplaceController) ReadInstalledItems() *cobra.Command {
+	cmd := &cobra.Command{
+		Use:   "list",
+		Short: "ReadInstalledItems",
+		Run: func(cmd *cobra.Command, args []string) {
+			cliHelper.ServiceResponseWrapper(
+				controller.marketplaceService.ReadInstalledItems(),
+			)
+		},
+	}
+
+	return cmd
+}
+
+func (controller *MarketplaceController) DeleteInstalledItem() *cobra.Command {
+	var installedIdInt int
+	var shouldUninstallServices bool
+
+	cmd := &cobra.Command{
+		Use:   "delete",
+		Short: "DeleteInstalledItem",
+		Run: func(cmd *cobra.Command, args []string) {
+			requestBody := map[string]interface{}{
+				"installedId": installedIdInt,
+			}
+
+			if !shouldUninstallServices {
+				requestBody["shouldUninstallServices"] = false
+			}
+
+			cliHelper.ServiceResponseWrapper(
+				controller.marketplaceService.DeleteInstalledItem(requestBody),
+			)
+		},
+	}
+
+	cmd.Flags().IntVarP(&installedIdInt, "installedId", "i", 0, "InstalledItemId")
+	cmd.MarkFlagRequired("installedId")
+	cmd.Flags().BoolVarP(
+		&shouldUninstallServices, "shouldUninstallServices", "s", true,
+		"ShouldUninstallUnusedServices",
+	)
+	return cmd
+}

+ 0 - 198
src/presentation/cli/controller/marketplaceController.go

@@ -1,198 +0,0 @@
-package cliController
-
-import (
-	"strings"
-
-	"github.com/speedianet/os/src/domain/dto"
-	"github.com/speedianet/os/src/domain/useCase"
-	"github.com/speedianet/os/src/domain/valueObject"
-	internalDbInfra "github.com/speedianet/os/src/infra/internalDatabase"
-	marketplaceInfra "github.com/speedianet/os/src/infra/marketplace"
-	vhostInfra "github.com/speedianet/os/src/infra/vhost"
-	cliHelper "github.com/speedianet/os/src/presentation/cli/helper"
-	"github.com/spf13/cobra"
-)
-
-type MarketplaceController struct {
-	persistentDbSvc *internalDbInfra.PersistentDatabaseService
-}
-
-func NewMarketplaceController(
-	persistentDbSvc *internalDbInfra.PersistentDatabaseService,
-) *MarketplaceController {
-	return &MarketplaceController{
-		persistentDbSvc: persistentDbSvc,
-	}
-}
-
-func (controller *MarketplaceController) ReadInstalled() *cobra.Command {
-	cmd := &cobra.Command{
-		Use:   "list",
-		Short: "ReadInstalledItems",
-		Run: func(cmd *cobra.Command, args []string) {
-			marketplaceQueryRepo := marketplaceInfra.NewMarketplaceQueryRepo(
-				controller.persistentDbSvc,
-			)
-
-			installedItems, err := useCase.ReadMarketplaceInstalledItems(marketplaceQueryRepo)
-			if err != nil {
-				cliHelper.ResponseWrapper(false, err.Error())
-			}
-
-			cliHelper.ResponseWrapper(true, installedItems)
-		},
-	}
-	return cmd
-}
-
-func parseDataFields(
-	dataFieldsStr []string,
-) []valueObject.MarketplaceInstallableItemDataField {
-	dataFields := []valueObject.MarketplaceInstallableItemDataField{}
-
-	for _, dataFieldStr := range dataFieldsStr {
-		dataFieldsParts := strings.Split(dataFieldStr, ":")
-		if len(dataFieldsParts) < 2 {
-			panic("InvalidDataFields")
-		}
-
-		dataField := valueObject.NewMarketplaceInstallableItemDataFieldPanic(
-			valueObject.NewDataFieldNamePanic(dataFieldsParts[0]),
-			valueObject.NewDataFieldValuePanic(dataFieldsParts[1]),
-		)
-		dataFields = append(dataFields, dataField)
-	}
-
-	return dataFields
-}
-
-func (controller *MarketplaceController) InstallCatalogItem() *cobra.Command {
-	var hostnameStr string
-	var catalogIdInt int
-	var slugStr string
-	var urlPath string
-	var dataFieldsStr []string
-
-	cmd := &cobra.Command{
-		Use:   "install",
-		Short: "InstallCatalogItem",
-		Run: func(cmd *cobra.Command, args []string) {
-			hostname := valueObject.NewFqdnPanic(hostnameStr)
-
-			var catalogIdPtr *valueObject.MarketplaceItemId
-			if catalogIdInt != 0 {
-				catalogId := valueObject.NewMarketplaceItemIdPanic(catalogIdInt)
-				catalogIdPtr = &catalogId
-			}
-
-			var slugPtr *valueObject.MarketplaceItemSlug
-			if slugStr != "" {
-				slug := valueObject.NewMarketplaceItemSlugPanic(slugStr)
-				slugPtr = &slug
-			}
-
-			var urlPathPtr *valueObject.UrlPath
-			if urlPath != "" {
-				urlPath := valueObject.NewUrlPathPanic(urlPath)
-				urlPathPtr = &urlPath
-			}
-
-			// Format: key:value,key:value
-			dataFields := parseDataFields(dataFieldsStr)
-
-			marketplaceQueryRepo := marketplaceInfra.NewMarketplaceQueryRepo(controller.persistentDbSvc)
-			marketplaceCmdRepo := marketplaceInfra.NewMarketplaceCmdRepo(controller.persistentDbSvc)
-			vhostQueryRepo := vhostInfra.NewVirtualHostQueryRepo(controller.persistentDbSvc)
-			vhostCmdRepo := vhostInfra.NewVirtualHostCmdRepo(controller.persistentDbSvc)
-
-			dto := dto.NewInstallMarketplaceCatalogItem(
-				catalogIdPtr,
-				slugPtr,
-				hostname,
-				urlPathPtr,
-				dataFields,
-			)
-			err := useCase.InstallMarketplaceCatalogItem(
-				marketplaceQueryRepo,
-				marketplaceCmdRepo,
-				vhostQueryRepo,
-				vhostCmdRepo,
-				dto,
-			)
-			if err != nil {
-				cliHelper.ResponseWrapper(false, err.Error())
-			}
-
-			cliHelper.ResponseWrapper(true, "MarketplaceCatalogItemInstalled")
-		},
-	}
-
-	cmd.Flags().StringVarP(&hostnameStr, "hostname", "n", "", "VirtualHostName")
-	cmd.MarkFlagRequired("hostname")
-	cmd.Flags().IntVarP(&catalogIdInt, "catalogId", "i", 0, "CatalogItemId")
-	cmd.Flags().StringVarP(&slugStr, "slug", "s", "", "CatalogItemSlug")
-	cmd.Flags().StringVarP(&urlPath, "urlPath", "d", "", "UrlPath")
-	cmd.Flags().StringSliceVarP(
-		&dataFieldsStr, "dataFields", "f", []string{}, "InstallationDataFields (key:value)",
-	)
-	return cmd
-}
-
-func (controller *MarketplaceController) DeleteInstalledItem() *cobra.Command {
-	var installedIdInt int
-	var shouldUninstallServices bool
-
-	cmd := &cobra.Command{
-		Use:   "delete",
-		Short: "DeleteInstalledItem",
-		Run: func(cmd *cobra.Command, args []string) {
-			installedId := valueObject.NewMarketplaceItemIdPanic(installedIdInt)
-
-			deleteMarketplaceInstalledItem := dto.NewDeleteMarketplaceInstalledItem(
-				installedId, shouldUninstallServices,
-			)
-
-			marketplaceQueryRepo := marketplaceInfra.NewMarketplaceQueryRepo(controller.persistentDbSvc)
-			marketplaceCmdRepo := marketplaceInfra.NewMarketplaceCmdRepo(controller.persistentDbSvc)
-
-			err := useCase.DeleteMarketplaceInstalledItem(
-				marketplaceQueryRepo,
-				marketplaceCmdRepo,
-				deleteMarketplaceInstalledItem,
-			)
-			if err != nil {
-				cliHelper.ResponseWrapper(false, err.Error())
-			}
-
-			cliHelper.ResponseWrapper(true, "MarketplaceInstalledItemDeleted")
-		},
-	}
-
-	cmd.Flags().IntVarP(&installedIdInt, "installedId", "i", 0, "InstalledItemId")
-	cmd.MarkFlagRequired("installedId")
-	cmd.Flags().BoolVarP(
-		&shouldUninstallServices, "shouldUninstallServices", "s", true,
-		"ShouldUninstallInstalledItemServices",
-	)
-	return cmd
-}
-
-func (controller *MarketplaceController) ReadCatalog() *cobra.Command {
-	cmd := &cobra.Command{
-		Use:   "list-catalog",
-		Short: "ReadCatalogItems",
-		Run: func(cmd *cobra.Command, args []string) {
-			marketplaceQueryRepo := marketplaceInfra.NewMarketplaceQueryRepo(
-				controller.persistentDbSvc,
-			)
-
-			catalogItems, err := useCase.ReadMarketplaceCatalog(marketplaceQueryRepo)
-			if err != nil {
-				cliHelper.ResponseWrapper(false, err.Error())
-			}
-
-			cliHelper.ResponseWrapper(true, catalogItems)
-		},
-	}
-	return cmd
-}