marketplace.go 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. package cliController
  2. import (
  3. "log/slog"
  4. "strings"
  5. "github.com/goinfinite/os/src/domain/valueObject"
  6. internalDbInfra "github.com/goinfinite/os/src/infra/internalDatabase"
  7. cliHelper "github.com/goinfinite/os/src/presentation/cli/helper"
  8. "github.com/goinfinite/os/src/presentation/liaison"
  9. "github.com/spf13/cobra"
  10. )
  11. type MarketplaceController struct {
  12. persistentDbSvc *internalDbInfra.PersistentDatabaseService
  13. marketplaceLiaison *liaison.MarketplaceLiaison
  14. }
  15. func NewMarketplaceController(
  16. persistentDbSvc *internalDbInfra.PersistentDatabaseService,
  17. trailDbSvc *internalDbInfra.TrailDatabaseService,
  18. ) *MarketplaceController {
  19. return &MarketplaceController{
  20. persistentDbSvc: persistentDbSvc,
  21. marketplaceLiaison: liaison.NewMarketplaceLiaison(persistentDbSvc, trailDbSvc),
  22. }
  23. }
  24. func (controller *MarketplaceController) ReadCatalog() *cobra.Command {
  25. var catalogItemIdUint uint64
  26. var catalogItemSlugStr, catalogItemNameStr, catalogItemTypeStr string
  27. var paginationPageNumberUint32 uint32
  28. var paginationItemsPerPageUint16 uint16
  29. var paginationSortByStr, paginationSortDirectionStr, paginationLastSeenIdStr string
  30. cmd := &cobra.Command{
  31. Use: "list-catalog",
  32. Short: "ReadCatalogItems",
  33. Run: func(cmd *cobra.Command, args []string) {
  34. requestBody := map[string]interface{}{}
  35. if catalogItemIdUint != 0 {
  36. requestBody["id"] = catalogItemIdUint
  37. }
  38. if catalogItemSlugStr != "" {
  39. requestBody["slug"] = catalogItemSlugStr
  40. }
  41. if catalogItemNameStr != "" {
  42. requestBody["name"] = catalogItemNameStr
  43. }
  44. if catalogItemTypeStr != "" {
  45. requestBody["type"] = catalogItemTypeStr
  46. }
  47. if paginationPageNumberUint32 != 0 {
  48. requestBody["pageNumber"] = paginationPageNumberUint32
  49. }
  50. if paginationItemsPerPageUint16 != 0 {
  51. requestBody["itemsPerPage"] = paginationItemsPerPageUint16
  52. }
  53. if paginationSortByStr != "" {
  54. requestBody["sortBy"] = paginationSortByStr
  55. }
  56. if paginationSortDirectionStr != "" {
  57. requestBody["sortDirection"] = paginationSortDirectionStr
  58. }
  59. if paginationLastSeenIdStr != "" {
  60. requestBody["lastSeenId"] = paginationLastSeenIdStr
  61. }
  62. cliHelper.LiaisonResponseWrapper(
  63. controller.marketplaceLiaison.ReadCatalog(requestBody),
  64. )
  65. },
  66. }
  67. cmd.Flags().Uint64VarP(
  68. &catalogItemIdUint, "catalog-item-id", "i", 0, "CatalogItemId",
  69. )
  70. cmd.Flags().StringVarP(
  71. &catalogItemSlugStr, "catalog-item-slug", "s", "", "CatalogItemSlug",
  72. )
  73. cmd.Flags().StringVarP(
  74. &catalogItemNameStr, "catalog-item-name", "n", "", "CatalogItemName",
  75. )
  76. cmd.Flags().StringVarP(
  77. &catalogItemTypeStr, "catalog-item-type", "t", "", "CatalogItemType",
  78. )
  79. cmd.Flags().Uint32VarP(
  80. &paginationPageNumberUint32, "page-number", "p", 0, "PageNumber (Pagination)",
  81. )
  82. cmd.Flags().Uint16VarP(
  83. &paginationItemsPerPageUint16, "items-per-page", "m", 0,
  84. "ItemsPerPage (Pagination)",
  85. )
  86. cmd.Flags().StringVarP(
  87. &paginationSortByStr, "sort-by", "y", "", "SortBy (Pagination)",
  88. )
  89. cmd.Flags().StringVarP(
  90. &paginationSortDirectionStr, "sort-direction", "r", "",
  91. "SortDirection (Pagination)",
  92. )
  93. cmd.Flags().StringVarP(
  94. &paginationLastSeenIdStr, "last-seen-id", "l", "", "LastSeenId (Pagination)",
  95. )
  96. return cmd
  97. }
  98. func (controller *MarketplaceController) parseDataFields(
  99. rawDataFields []string,
  100. ) []valueObject.MarketplaceInstallableItemDataField {
  101. dataFields := []valueObject.MarketplaceInstallableItemDataField{}
  102. for index, rawDataField := range rawDataFields {
  103. dataFieldsParts := strings.Split(rawDataField, ":")
  104. if len(dataFieldsParts) < 2 {
  105. slog.Debug("InvalidDataFieldStructure", slog.Any("fieldIndex", index))
  106. continue
  107. }
  108. fieldName, err := valueObject.NewDataFieldName(dataFieldsParts[0])
  109. if err != nil {
  110. slog.Debug(err.Error(), slog.Any("fieldIndex", index))
  111. continue
  112. }
  113. fieldValue, err := valueObject.NewDataFieldValue(dataFieldsParts[1])
  114. if err != nil {
  115. slog.Debug(err.Error(), slog.Any("fieldName", fieldName.String()))
  116. continue
  117. }
  118. dataField := valueObject.NewMarketplaceInstallableItemDataField(
  119. fieldName, fieldValue,
  120. )
  121. dataFields = append(dataFields, dataField)
  122. }
  123. return dataFields
  124. }
  125. func (controller *MarketplaceController) InstallCatalogItem() *cobra.Command {
  126. var hostnameStr string
  127. var catalogIdInt int
  128. var slugStr, urlPathStr string
  129. var dataFieldsStr []string
  130. cmd := &cobra.Command{
  131. Use: "install",
  132. Short: "InstallCatalogItem",
  133. Run: func(cmd *cobra.Command, args []string) {
  134. requestBody := map[string]interface{}{
  135. "dataFields": controller.parseDataFields(dataFieldsStr),
  136. }
  137. if hostnameStr != "" {
  138. requestBody["hostname"] = hostnameStr
  139. }
  140. if catalogIdInt != 0 {
  141. requestBody["id"] = catalogIdInt
  142. }
  143. if slugStr != "" {
  144. requestBody["slug"] = slugStr
  145. }
  146. if urlPathStr != "" {
  147. requestBody["urlPath"] = urlPathStr
  148. }
  149. cliHelper.LiaisonResponseWrapper(
  150. controller.marketplaceLiaison.InstallCatalogItem(requestBody, false),
  151. )
  152. },
  153. }
  154. cmd.Flags().StringVarP(&hostnameStr, "hostname", "n", "", "VirtualHostName")
  155. cmd.Flags().IntVarP(&catalogIdInt, "id", "i", 0, "CatalogItemId")
  156. cmd.Flags().StringVarP(&slugStr, "slug", "s", "", "CatalogItemSlug")
  157. cmd.Flags().StringVarP(&urlPathStr, "url-path", "d", "", "UrlPath")
  158. cmd.Flags().StringSliceVarP(
  159. &dataFieldsStr, "data-fields", "f", []string{},
  160. "InstallationDataFields (key:value)",
  161. )
  162. return cmd
  163. }
  164. func (controller *MarketplaceController) ReadInstalledItems() *cobra.Command {
  165. var installedItemIdUint uint64
  166. var installedItemHostnameStr, installedItemTypeStr, installedItemUuidStr string
  167. var paginationPageNumberUint32 uint32
  168. var paginationItemsPerPageUint16 uint16
  169. var paginationSortByStr, paginationSortDirectionStr, paginationLastSeenIdStr string
  170. cmd := &cobra.Command{
  171. Use: "list",
  172. Short: "ReadInstalledItems",
  173. Run: func(cmd *cobra.Command, args []string) {
  174. requestBody := map[string]interface{}{}
  175. if installedItemIdUint != 0 {
  176. requestBody["id"] = installedItemIdUint
  177. }
  178. if installedItemHostnameStr != "" {
  179. requestBody["hostname"] = installedItemHostnameStr
  180. }
  181. if installedItemTypeStr != "" {
  182. requestBody["type"] = installedItemTypeStr
  183. }
  184. if installedItemUuidStr != "" {
  185. requestBody["installId"] = installedItemUuidStr
  186. }
  187. if paginationPageNumberUint32 != 0 {
  188. requestBody["pageNumber"] = paginationPageNumberUint32
  189. }
  190. if paginationItemsPerPageUint16 != 0 {
  191. requestBody["itemsPerPage"] = paginationItemsPerPageUint16
  192. }
  193. if paginationSortByStr != "" {
  194. requestBody["sortBy"] = paginationSortByStr
  195. }
  196. if paginationSortDirectionStr != "" {
  197. requestBody["sortDirection"] = paginationSortDirectionStr
  198. }
  199. if paginationLastSeenIdStr != "" {
  200. requestBody["lastSeenId"] = paginationLastSeenIdStr
  201. }
  202. cliHelper.LiaisonResponseWrapper(
  203. controller.marketplaceLiaison.ReadInstalledItems(requestBody),
  204. )
  205. },
  206. }
  207. cmd.Flags().Uint64VarP(
  208. &installedItemIdUint, "installed-item-id", "i", 0, "InstalledItemId",
  209. )
  210. cmd.Flags().StringVarP(
  211. &installedItemHostnameStr, "installed-item-hostname", "n", "",
  212. "InstalledItemHostname",
  213. )
  214. cmd.Flags().StringVarP(
  215. &installedItemTypeStr, "installed-item-type", "t", "", "InstalledItemType",
  216. )
  217. cmd.Flags().StringVarP(
  218. &installedItemUuidStr, "installed-item-uuid", "u", "", "InstalledItemUuidStr",
  219. )
  220. cmd.Flags().Uint32VarP(
  221. &paginationPageNumberUint32, "page-number", "p", 0, "PageNumber (Pagination)",
  222. )
  223. cmd.Flags().Uint16VarP(
  224. &paginationItemsPerPageUint16, "items-per-page", "m", 0,
  225. "ItemsPerPage (Pagination)",
  226. )
  227. cmd.Flags().StringVarP(
  228. &paginationSortByStr, "sort-by", "y", "", "SortBy (Pagination)",
  229. )
  230. cmd.Flags().StringVarP(
  231. &paginationSortDirectionStr, "sort-direction", "r", "",
  232. "SortDirection (Pagination)",
  233. )
  234. cmd.Flags().StringVarP(
  235. &paginationLastSeenIdStr, "last-seen-id", "l", "", "LastSeenId (Pagination)",
  236. )
  237. return cmd
  238. }
  239. func (controller *MarketplaceController) DeleteInstalledItem() *cobra.Command {
  240. var installedIdInt int
  241. var shouldUninstallServicesStr string
  242. cmd := &cobra.Command{
  243. Use: "delete",
  244. Short: "DeleteInstalledItem",
  245. Run: func(cmd *cobra.Command, args []string) {
  246. requestBody := map[string]interface{}{
  247. "installedId": installedIdInt,
  248. "shouldUninstallServices": shouldUninstallServicesStr,
  249. }
  250. cliHelper.LiaisonResponseWrapper(
  251. controller.marketplaceLiaison.DeleteInstalledItem(requestBody, false),
  252. )
  253. },
  254. }
  255. cmd.Flags().IntVarP(&installedIdInt, "installed-id", "i", 0, "InstalledItemId")
  256. cmd.MarkFlagRequired("installed-id")
  257. cmd.Flags().StringVarP(
  258. &shouldUninstallServicesStr, "should-uninstall-services", "s", "true",
  259. "ShouldUninstallUnusedServices",
  260. )
  261. return cmd
  262. }