From 463436c7c79f71b16a70c820a4a45445d2f9020b Mon Sep 17 00:00:00 2001 From: Wanjin Noh Date: Thu, 6 Mar 2025 14:11:10 +0900 Subject: [PATCH 1/5] refactor(api-client): move package schema and API verb interfaces for identity service Signed-off-by: Wanjin Noh --- .../package/schema}/api-verbs/change-order.ts | 0 .../identity/package/schema}/api-verbs/create.ts | 0 .../identity/package/schema}/api-verbs/delete.ts | 0 .../identity/package/schema}/api-verbs/get.ts | 0 .../identity/package/schema}/api-verbs/list.ts | 0 .../package/schema}/api-verbs/set-default.ts | 0 .../identity/package/schema}/api-verbs/update.ts | 0 .../identity/package/schema}/model.ts | 0 .../services/ops-flow/stores/admin/package-store.ts | 12 ++++++------ .../stores/admin/task-management-page-store.ts | 2 +- 10 files changed, 7 insertions(+), 7 deletions(-) rename apps/web/src/{schema/identity/package => api-clients/identity/package/schema}/api-verbs/change-order.ts (100%) rename apps/web/src/{schema/identity/package => api-clients/identity/package/schema}/api-verbs/create.ts (100%) rename apps/web/src/{schema/identity/package => api-clients/identity/package/schema}/api-verbs/delete.ts (100%) rename apps/web/src/{schema/identity/package => api-clients/identity/package/schema}/api-verbs/get.ts (100%) rename apps/web/src/{schema/identity/package => api-clients/identity/package/schema}/api-verbs/list.ts (100%) rename apps/web/src/{schema/identity/package => api-clients/identity/package/schema}/api-verbs/set-default.ts (100%) rename apps/web/src/{schema/identity/package => api-clients/identity/package/schema}/api-verbs/update.ts (100%) rename apps/web/src/{schema/identity/package => api-clients/identity/package/schema}/model.ts (100%) diff --git a/apps/web/src/schema/identity/package/api-verbs/change-order.ts b/apps/web/src/api-clients/identity/package/schema/api-verbs/change-order.ts similarity index 100% rename from apps/web/src/schema/identity/package/api-verbs/change-order.ts rename to apps/web/src/api-clients/identity/package/schema/api-verbs/change-order.ts diff --git a/apps/web/src/schema/identity/package/api-verbs/create.ts b/apps/web/src/api-clients/identity/package/schema/api-verbs/create.ts similarity index 100% rename from apps/web/src/schema/identity/package/api-verbs/create.ts rename to apps/web/src/api-clients/identity/package/schema/api-verbs/create.ts diff --git a/apps/web/src/schema/identity/package/api-verbs/delete.ts b/apps/web/src/api-clients/identity/package/schema/api-verbs/delete.ts similarity index 100% rename from apps/web/src/schema/identity/package/api-verbs/delete.ts rename to apps/web/src/api-clients/identity/package/schema/api-verbs/delete.ts diff --git a/apps/web/src/schema/identity/package/api-verbs/get.ts b/apps/web/src/api-clients/identity/package/schema/api-verbs/get.ts similarity index 100% rename from apps/web/src/schema/identity/package/api-verbs/get.ts rename to apps/web/src/api-clients/identity/package/schema/api-verbs/get.ts diff --git a/apps/web/src/schema/identity/package/api-verbs/list.ts b/apps/web/src/api-clients/identity/package/schema/api-verbs/list.ts similarity index 100% rename from apps/web/src/schema/identity/package/api-verbs/list.ts rename to apps/web/src/api-clients/identity/package/schema/api-verbs/list.ts diff --git a/apps/web/src/schema/identity/package/api-verbs/set-default.ts b/apps/web/src/api-clients/identity/package/schema/api-verbs/set-default.ts similarity index 100% rename from apps/web/src/schema/identity/package/api-verbs/set-default.ts rename to apps/web/src/api-clients/identity/package/schema/api-verbs/set-default.ts diff --git a/apps/web/src/schema/identity/package/api-verbs/update.ts b/apps/web/src/api-clients/identity/package/schema/api-verbs/update.ts similarity index 100% rename from apps/web/src/schema/identity/package/api-verbs/update.ts rename to apps/web/src/api-clients/identity/package/schema/api-verbs/update.ts diff --git a/apps/web/src/schema/identity/package/model.ts b/apps/web/src/api-clients/identity/package/schema/model.ts similarity index 100% rename from apps/web/src/schema/identity/package/model.ts rename to apps/web/src/api-clients/identity/package/schema/model.ts diff --git a/apps/web/src/services/ops-flow/stores/admin/package-store.ts b/apps/web/src/services/ops-flow/stores/admin/package-store.ts index 242efc6b73..da0eb459cb 100644 --- a/apps/web/src/services/ops-flow/stores/admin/package-store.ts +++ b/apps/web/src/services/ops-flow/stores/admin/package-store.ts @@ -7,12 +7,12 @@ import { SpaceConnector } from '@cloudforet/core-lib/space-connector'; import { getCancellableFetcher } from '@cloudforet/core-lib/space-connector/cancellable-fetcher'; import type { ListResponse } from '@/api-clients/_common/schema/api-verbs/list'; -import type { PackageCreateParameters } from '@/schema/identity/package/api-verbs/create'; -import type { PackageDeleteParameters } from '@/schema/identity/package/api-verbs/delete'; -import type { PackageListParameters } from '@/schema/identity/package/api-verbs/list'; -import type { PackageSetDefaultParameters } from '@/schema/identity/package/api-verbs/set-default'; -import type { PackageUpdateParameters } from '@/schema/identity/package/api-verbs/update'; -import type { PackageModel } from '@/schema/identity/package/model'; +import type { PackageCreateParameters } from '@/api-clients/identity/package/schema/api-verbs/create'; +import type { PackageDeleteParameters } from '@/api-clients/identity/package/schema/api-verbs/delete'; +import type { PackageListParameters } from '@/api-clients/identity/package/schema/api-verbs/list'; +import type { PackageSetDefaultParameters } from '@/api-clients/identity/package/schema/api-verbs/set-default'; +import type { PackageUpdateParameters } from '@/api-clients/identity/package/schema/api-verbs/update'; +import type { PackageModel } from '@/api-clients/identity/package/schema/model'; import { useAppContextStore } from '@/store/app-context/app-context-store'; diff --git a/apps/web/src/services/ops-flow/stores/admin/task-management-page-store.ts b/apps/web/src/services/ops-flow/stores/admin/task-management-page-store.ts index fa14c9096c..3ee0d51656 100644 --- a/apps/web/src/services/ops-flow/stores/admin/task-management-page-store.ts +++ b/apps/web/src/services/ops-flow/stores/admin/task-management-page-store.ts @@ -5,8 +5,8 @@ import { import { defineStore } from 'pinia'; +import type { PackageModel } from '@/api-clients/identity/package/schema/model'; import type { TaskCategoryModel } from '@/api-clients/opsflow/task-category/schema/model'; -import type { PackageModel } from '@/schema/identity/package/model'; import type { WorkspaceItem } from '@/store/reference/workspace-reference-store'; import { useWorkspaceReferenceStore } from '@/store/reference/workspace-reference-store'; From 13fe6279403d734741996e6ea5b0c024b0a4b4f3 Mon Sep 17 00:00:00 2001 From: Wanjin Noh Date: Thu, 6 Mar 2025 14:22:04 +0900 Subject: [PATCH 2/5] feat(api-doc): add comprehensive identity service API documentation Signed-off-by: Wanjin Noh --- .../api-clients/_common/constants/api-doc.ts | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) diff --git a/apps/web/src/api-clients/_common/constants/api-doc.ts b/apps/web/src/api-clients/_common/constants/api-doc.ts index 7e615b336b..25cc3000ad 100644 --- a/apps/web/src/api-clients/_common/constants/api-doc.ts +++ b/apps/web/src/api-clients/_common/constants/api-doc.ts @@ -25,6 +25,152 @@ */ export const API_DOC = { + identity: { + agent: [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + app: [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + domain: [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + endpoint: [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + job: [ + 'get', + 'list', + ], + package: [ + 'change-order', + 'create', + 'delete', + 'get', + 'list', + 'set-default', + 'update', + ], + project: [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + 'project-group': [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + provider: [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + role: [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + 'role-binding': [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + schema: [ + 'get', + 'list', + ], + 'service-account': [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + token: [ + 'issue', + 'refresh', + ], + 'trusted-account': [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + user: [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + 'user-group': [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + 'user-profile': [ + 'get', + 'update', + ], + workspace: [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + 'workspace-group': [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + 'workspace-group-user': [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + 'workspace-user': [ + 'create', + 'delete', + 'get', + 'list', + 'update', + ], + }, 'cost-analysis': { budget: [ 'create', From c66abe8d42ab5254026ce85651b64112121905a1 Mon Sep 17 00:00:00 2001 From: Wanjin Noh Date: Thu, 6 Mar 2025 14:37:21 +0900 Subject: [PATCH 3/5] feat(api-client): add composable for package API in identity service Signed-off-by: Wanjin Noh --- .../package/composables/use-package-api.ts | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 apps/web/src/api-clients/identity/package/composables/use-package-api.ts diff --git a/apps/web/src/api-clients/identity/package/composables/use-package-api.ts b/apps/web/src/api-clients/identity/package/composables/use-package-api.ts new file mode 100644 index 0000000000..cadbb54c1d --- /dev/null +++ b/apps/web/src/api-clients/identity/package/composables/use-package-api.ts @@ -0,0 +1,65 @@ +import type { ComputedRef } from 'vue'; + +import type { QueryKey } from '@tanstack/vue-query'; + +import { SpaceConnector } from '@cloudforet/core-lib/space-connector'; + +import { useAPIQueryKey } from '@/api-clients/_common/composables/use-api-query-key'; +import type { ListResponse } from '@/api-clients/_common/schema/api-verbs/list'; +import type { PackageChangeOrderParameters } from '@/api-clients/identity/package/schema/api-verbs/change-order'; +import type { PackageCreateParameters } from '@/api-clients/identity/package/schema/api-verbs/create'; +import type { PackageDeleteParameters } from '@/api-clients/identity/package/schema/api-verbs/delete'; +import type { PackageGetParameters } from '@/api-clients/identity/package/schema/api-verbs/get'; +import type { PackageListParameters } from '@/api-clients/identity/package/schema/api-verbs/list'; +import type { PackageSetDefaultParameters } from '@/api-clients/identity/package/schema/api-verbs/set-default'; +import type { PackageUpdateParameters } from '@/api-clients/identity/package/schema/api-verbs/update'; +import type { PackageModel } from '@/api-clients/identity/package/schema/model'; + +interface UsePackageApiReturn { + packageQueryKey: ComputedRef; + packageListQueryKey: ComputedRef; + packageAPI: { + create: (params: PackageCreateParameters) => Promise; + update: (params: PackageUpdateParameters) => Promise; + delete: (params: PackageDeleteParameters) => Promise; + get: (params: PackageGetParameters) => Promise; + list: (params: PackageListParameters) => Promise>; + setDefault: (params: PackageSetDefaultParameters) => Promise; + changeOrder: (params: PackageChangeOrderParameters) => Promise; + } +} + +export const usePackageApi = (): UsePackageApiReturn => { + const packageQueryKey = useAPIQueryKey('identity', 'package', 'get'); + const packageListQueryKey = useAPIQueryKey('identity', 'package', 'list'); + + const actions = { + async create(params: PackageCreateParameters) { + return SpaceConnector.clientV2.identity.package.create(params); + }, + async update(params: PackageUpdateParameters) { + return SpaceConnector.clientV2.identity.package.update(params); + }, + async delete(params: PackageDeleteParameters) { + return SpaceConnector.clientV2.identity.package.delete(params); + }, + async get(params: PackageGetParameters) { + return SpaceConnector.clientV2.identity.package.get(params); + }, + async list(params: PackageListParameters) { + return SpaceConnector.clientV2.identity.package.list>(params); + }, + async setDefault(params: PackageSetDefaultParameters) { + return SpaceConnector.clientV2.identity.package.setDefault(params); + }, + async changeOrder(params: PackageChangeOrderParameters) { + return SpaceConnector.clientV2.identity.package.changeOrder(params); + }, + }; + + return { + packageQueryKey, + packageListQueryKey, + packageAPI: actions, + }; +}; From 85d8b0bc6449823792e94c2b717c00c76297342d Mon Sep 17 00:00:00 2001 From: Wanjin Noh Date: Thu, 6 Mar 2025 16:06:22 +0900 Subject: [PATCH 4/5] refactor(opsflow): replace package store with default package query composable Signed-off-by: Wanjin Noh --- .../ops-flow/components/PackageForm.vue | 6 ++-- .../composables/use-category-field.ts | 11 +++--- .../composables/use-default-package-query.ts | 35 +++++++++++++++++++ 3 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 apps/web/src/services/ops-flow/composables/use-default-package-query.ts diff --git a/apps/web/src/services/ops-flow/components/PackageForm.vue b/apps/web/src/services/ops-flow/components/PackageForm.vue index 1ce1604027..929198d891 100644 --- a/apps/web/src/services/ops-flow/components/PackageForm.vue +++ b/apps/web/src/services/ops-flow/components/PackageForm.vue @@ -245,10 +245,10 @@ watch([() => taskManagementPageState.visiblePackageForm, () => taskManagementPag > diff --git a/apps/web/src/services/ops-flow/composables/use-category-field.ts b/apps/web/src/services/ops-flow/composables/use-category-field.ts index 8a01892fc9..d5e049d8e9 100644 --- a/apps/web/src/services/ops-flow/composables/use-category-field.ts +++ b/apps/web/src/services/ops-flow/composables/use-category-field.ts @@ -9,7 +9,7 @@ import { getParticle, i18n } from '@/translations'; import { useFieldValidator } from '@/common/composables/form-validator'; -import { usePackageStore } from '@/services/ops-flow/stores/admin/package-store'; +import { useDefaultPackageQuery } from '@/services/ops-flow/composables/use-default-package-query'; import { useTaskCategoryStore } from '@/services/ops-flow/stores/task-category-store'; import { useTaskTypeStore } from '@/services/ops-flow/stores/task-type-store'; @@ -22,7 +22,7 @@ export const useCategoryField = ({ isRequired?: boolean; hasTaskTypeOnly?: boolean; } = {}) => { - const packageStore = usePackageStore(); + const { defaultPackage } = useDefaultPackageQuery(); const taskCategoryStore = useTaskCategoryStore(); const taskTypeStore = useTaskTypeStore(); @@ -70,7 +70,7 @@ export const useCategoryField = ({ name: c.category_id, label: c.name, packageId: c.package_id, - }) || []); + })); }); const categoryItemsByPackage = computed>(() => { const map: Record = {}; @@ -108,7 +108,6 @@ export const useCategoryField = ({ categoryValidator.setValue(prevSelectedCategoryItems.value); }; - const addPackageToCategories = async (packageId: string, categoryIds: string[]) => { const responses = await Promise.allSettled([ ...categoryIds.map((categoryId) => taskCategoryStore.update({ @@ -127,8 +126,8 @@ export const useCategoryField = ({ } }; const bindDefaultPackageToCategories = async (categoryIds: string[]) => { - if (!packageStore.getters.defaultPackage) throw new Error('Default package not found'); - const defaultPackageId = packageStore.getters.defaultPackage.package_id; + if (!defaultPackage.value) throw new Error('Default package not found'); + const defaultPackageId = defaultPackage.value.package_id; const responses = await Promise.allSettled([ ...categoryIds.map((categoryId) => taskCategoryStore.update({ package_id: defaultPackageId, diff --git a/apps/web/src/services/ops-flow/composables/use-default-package-query.ts b/apps/web/src/services/ops-flow/composables/use-default-package-query.ts new file mode 100644 index 0000000000..dca409590a --- /dev/null +++ b/apps/web/src/services/ops-flow/composables/use-default-package-query.ts @@ -0,0 +1,35 @@ +import { computed } from 'vue'; + +import type { QueryKey } from '@tanstack/vue-query'; +import { useQuery } from '@tanstack/vue-query'; + +import { usePackageApi } from '@/api-clients/identity/package/composables/use-package-api'; +import type { PackageListParameters } from '@/api-clients/identity/package/schema/api-verbs/list'; + + +export const useDefaultPackageQuery = () => { + const { packageAPI, packageListQueryKey } = usePackageApi(); + + const defaultPackageQuery: PackageListParameters = { + query: { + filter: [{ k: 'is_default', v: true, o: 'eq' }], + }, + }; + const { data: defaultPackage, isLoading } = useQuery({ + queryKey: computed<[QueryKey, PackageListParameters]>(() => [ + packageListQueryKey.value, + defaultPackageQuery, + ]), + queryFn: async ({ queryKey }) => { + const { results } = await packageAPI.list(queryKey[1]); + return results?.[0]; + }, + staleTime: 1000 * 60 * 5, // 5minutes + gcTime: 1000 * 60, // 1minute + }); + + return { + defaultPackage, + isLoading, + }; +}; From f4082d19700f9ad5286622938edb6de0b4673c67 Mon Sep 17 00:00:00 2001 From: WANJIN Date: Thu, 13 Mar 2025 10:41:25 +0900 Subject: [PATCH 5/5] refactor: replace data stores with vue query (#5689) * refactor(workspace): migrate workspace model to api-clients directory Signed-off-by: Wanjin Noh * refactor(workspace): migrate workspace API verb interfaces to api-clients directory Signed-off-by: Wanjin Noh * feat(workspace): add composable for workspace API in identity service Signed-off-by: Wanjin Noh * refactor(opsflow): replace package store with package mutations and bind composables Signed-off-by: Wanjin Noh * refactor(web): extract ActionMenuItem type to separate type file Signed-off-by: Wanjin Noh * refactor(opsflow): migrate PackagePanel to use vue-query and package API composables Signed-off-by: Wanjin Noh * refactor(opsflow): migrate TaskCategoryPanel to use vue-query and package API composables Signed-off-by: Wanjin Noh * refactor(opsflow): migrate PackageDeleteModal to use vue-query and package API composables Signed-off-by: Wanjin Noh * refactor(opsflow): migrate PackageSetDefaultModal to use vue-query and package API composables Signed-off-by: Wanjin Noh * refactor(opsflow): update task query invalidation with reactive query keys Signed-off-by: Wanjin Noh * refactor(opsflow): create usePackagesQuery composable and update package-related components Signed-off-by: Wanjin Noh * refactor(opsflow): remove package store and update components to use new package query composables Signed-off-by: Wanjin Noh * feat(opsflow): add API composables for comment and event services Signed-off-by: Wanjin Noh * refactor(opsflow): migrate comment components to use vue-query and comment API composables Signed-off-by: Wanjin Noh * refactor(opsflow): create composables for task categories and task types Signed-off-by: Wanjin Noh * refactor(opsflow): remove board page store and simplify category ID handling Signed-off-by: Wanjin Noh * refactor(error): enhance error handling with improved error message and toast support Signed-off-by: Wanjin Noh * refactor(opsflow): migrate PackageForm to vue-query and simplify package mutations Signed-off-by: Wanjin Noh * refactor(opsflow): migrate TaskCategoryPanel to use categories query composable Signed-off-by: Wanjin Noh * feat(project): add 'badge' type to ProjectSelectDropdown appearance options Signed-off-by: Wanjin Noh * refactor(opsflow): migrate task type and category fields to use vue-query composables Signed-off-by: Wanjin Noh * refactor(opsflow): migrate OpsFlowLandingPage to use task categories and types query composables Signed-off-by: Wanjin Noh * refactor(opsflow): migrate AdminTaskCategoryDetailPageTaskTypeTab to use task types query composable Signed-off-by: Wanjin Noh * refactor(opsflow): standardize vue-query usage across task management components Signed-off-by: Wanjin Noh * refactor(opsflow): extract task type form mutations and scope field into composables Signed-off-by: Wanjin Noh * refactor(opsflow): create task type query composable and update related components Signed-off-by: Wanjin Noh * refactor(opsflow): migrate TaskTypeDeleteModal to use vue-query for task type deletion Signed-off-by: Wanjin Noh * refactor(opsflow): remove task type related code from task category page store Signed-off-by: Wanjin Noh * refactor(opsflow): extract task status management logic into composables Signed-off-by: Wanjin Noh * refactor(opsflow): migrate TaskStatusTree to use vue-query for status options management Signed-off-by: Wanjin Noh * refactor(opsflow): migrate TaskStatusSetDefaultModal to use vue-query for status default setting Signed-off-by: Wanjin Noh * refactor(opsflow): optimize TaskStatusTree status options handling Signed-off-by: Wanjin Noh * feat(opsflow): improve task status dropdown rendering and query invalidation Signed-off-by: Wanjin Noh * refactor(opsflow): extract task category and task type management into composables Signed-off-by: Wanjin Noh * refactor(api-clients): simplify use-api-query-key composable type annotations Signed-off-by: Wanjin Noh * refactor(opsflow): extract associated categories logic into composable and remove unused components Signed-off-by: Wanjin Noh * refactor(opsflow): update useCurrentCategory composable to include loading state Signed-off-by: Wanjin Noh * refactor(opsflow): remove task category store dependencies and simplify task content form logic Signed-off-by: Wanjin Noh * refactor(opsflow): remove task category store and migrate to vue-query composables Signed-off-by: Wanjin Noh * refactor(opsflow): migrate task detail page to use vue-query composables for task and events Signed-off-by: Wanjin Noh * refactor(opsflow): standardize import paths and remove relative imports in components Signed-off-by: Wanjin Noh * refactor(opsflow): replace useDefaultPackageQuery with useDefaultPackage composable Signed-off-by: Wanjin Noh * refactor(opsflow): fix reactive references in task content form and query handling Signed-off-by: Wanjin Noh * refactor(opsflow): optimize task page lifecycle and event query handling Signed-off-by: Wanjin Noh * refactor(opsflow): optimize query caching and store management in task components Signed-off-by: Wanjin Noh * feat(opsflow): implement task list query invalidation on task assignment Signed-off-by: Wanjin Noh * feat(opsflow): reset unsaved changes when initializing task content form Signed-off-by: Wanjin Noh * feat(opsflow): add validation for undefined values in task field form Signed-off-by: Wanjin Noh * fix(project): add optional chaining for currentProjectGroupId in ProjectSelectDropdown Signed-off-by: Wanjin Noh * feat(opsflow): enhance task creation and status selection logic Signed-off-by: Wanjin Noh * refactor(opsflow): improve task creation mutation and query handling Signed-off-by: Wanjin Noh * refactor(opsflow): optimize task detail page query client and event handling Signed-off-by: Wanjin Noh * feat(opsflow): implement task list query invalidation on status change Signed-off-by: Wanjin Noh * feat(opsflow): enhance task list query to support total count and pagination Signed-off-by: Wanjin Noh * refactor(opsflow): optimize package mutations and query handling Signed-off-by: Wanjin Noh * refactor(opsflow): optimize task management page store lifecycle Signed-off-by: Wanjin Noh * refactor(opsflow): introduce useAvailableCategories composable for consistent category filtering Signed-off-by: Wanjin Noh * fix(opsflow): add validation for category status options in delete modal Signed-off-by: Wanjin Noh * refactor(opsflow): enhance task deletion handling and improve query management Signed-off-by: Wanjin Noh * refactor(opsflow): update import paths for task, comment, and event types to use absolute paths Signed-off-by: Wanjin Noh * feat(opsflow): enhance LSBTopTitle component with right-end slot Signed-off-by: Wanjin Noh * fix(info): ensure timezone defaults to 'UTC' when undefined Signed-off-by: Wanjin Noh * refactor(opsflow): update user_type comment to remove TODO note Signed-off-by: Wanjin Noh --------- Signed-off-by: Wanjin Noh --- .../_common/composables/use-api-query-key.ts | 9 +- .../workspace/api-verbs/add-package.ts | 0 .../api-verbs/change-workspace-group.ts | 0 .../identity/workspace/api-verbs/create.ts | 0 .../identity/workspace/api-verbs/delete.ts | 0 .../identity/workspace/api-verbs/list.ts | 0 .../workspace/api-verbs/remove-package.ts | 0 .../identity/workspace/api-verbs/update.ts | 0 .../composables/use-workspace-api.ts | 47 +++ .../identity/workspace/model.ts | 0 .../comment/composables/use-comment-api.ts | 55 +++ .../comment/schema/api-verbs/create.ts | 2 +- .../opsflow/comment/schema/api-verbs/list.ts | 2 +- .../comment/schema/api-verbs/update.ts | 2 +- .../opsflow/comment/schema/model.ts | 5 +- .../event/composables/use-event-api.ts | 32 ++ .../opsflow/event/schema/api-verbs/list.ts | 5 +- .../api-clients/opsflow/event/schema/type.ts | 2 +- .../composables/use-task-category-api.ts | 18 +- .../task-category/schema/api-verbs/create.ts | 6 +- .../opsflow/task-category/schema/model.ts | 6 +- .../opsflow/task/schema/api-verbs/create.ts | 4 +- .../opsflow/task/schema/api-verbs/list.ts | 3 +- .../schema/api-verbs/update-description.ts | 4 +- .../opsflow/task/schema/api-verbs/update.ts | 2 +- .../api-clients/opsflow/task/schema/model.ts | 5 +- .../components/buttons/ActionMenuButton.vue | 6 +- .../web/src/common/components/buttons/type.ts | 5 + .../common/composables/error/errorHandler.ts | 15 +- .../favorite-button/FavoriteButton.vue | 2 +- .../navigations/new-lsb/LSBTopTitle.vue | 9 +- .../top-bar-header/TopBarWorkspaces.vue | 2 +- .../top-bar/modules/top-bar-search/store.ts | 2 +- .../TopBarAdminToggleButton.vue | 2 +- .../modules/project/ProjectSelectDropdown.vue | 4 +- .../workspace/WorkspaceSelectDropdown.vue | 4 +- apps/web/src/lib/helper/config-data-helper.ts | 2 +- .../workspace-variable-model.ts | 2 +- apps/web/src/router/helpers/route-helper.ts | 2 +- .../identity/workspace-group-user/model.ts | 2 +- .../advanced/components/BookmarkContainer.vue | 2 +- .../components/BookmarkDetailContainer.vue | 2 +- .../components/BookmarkManagementTable.vue | 2 +- .../advanced/components/BookmarkTree.vue | 2 +- .../WorkspaceGroupAddWorkspacesModal.vue | 6 +- .../components/WorkspaceGroupCreateModal.vue | 6 +- .../components/WorkspaceGroupTabWorkspace.vue | 2 +- .../WorkspaceGroupWokrspaceDeleteModal.vue | 4 +- .../components/WorkspaceManagementTable.vue | 2 +- .../WorkspaceTagManagementTabContents.vue | 4 +- .../components/WorkspacesCreateModal.vue | 9 +- .../components/WorkspacesDeleteModal.vue | 4 +- .../components/WorkspacesSetEnableModal.vue | 2 +- .../composables/refined-table-data.ts | 2 +- .../advanced/store/bookmark-page-store.ts | 4 +- .../store/workspace-group-page-store.ts | 4 +- .../advanced/store/workspace-page-store.ts | 4 +- .../components/WorkspaceDropdown.vue | 4 +- .../components/WorkspaceDropdown.vue | 4 +- .../components/BudgetCreateTargetSelect.vue | 4 +- .../components/BudgetMainListCard.vue | 2 +- .../components/CostAnalysisFiltersPopper.vue | 2 +- .../components/DataSourceManagementModal.vue | 4 +- ...aSourceManagementTabLinkedAccountTable.vue | 4 +- .../composables/data-source-handler.ts | 2 +- .../stores/cost-analysis-page-store.ts | 2 +- .../DashboardCreateScopeForm.vue | 2 +- ...DashboardGlobalVariableFilterReference.vue | 2 +- .../DashboardToolsetScope.vue | 4 +- .../legacy/DashboardVariableDropdown.vue | 2 +- .../components/UserManagementAddAdminRole.vue | 4 +- .../components/UserManagementTabWorkspace.vue | 4 +- .../services/info/components/NoticeDetail.vue | 4 +- .../services/info/components/NoticeForm.vue | 2 +- .../info/components/NoticeListItem.vue | 2 +- .../components/NoticeWorkspaceDropdown.vue | 4 +- .../pages/admin/AdminNoticeDetailPage.vue | 2 +- .../components/DomainLandingNotification.vue | 2 +- .../components/DomainLandingStartBanner.vue | 2 +- .../LandingAllWorkspaces.vue | 2 +- .../workspace-landing/LandingContents.vue | 2 +- .../workspace-landing/LandingRecentVisits.vue | 2 +- .../LandingGroupWorkspaces.vue | 2 +- apps/web/src/services/landing/type/type.ts | 2 +- .../components/AssociatedCategories.vue | 8 +- .../components/AssociatedWorkspaces.vue | 35 -- .../services/ops-flow/components/BoardLSB.vue | 26 +- .../ops-flow/components/BoardTaskComment.vue | 98 +++--- .../ops-flow/components/BoardTaskFilters.vue | 10 +- .../ops-flow/components/BoardTaskTable.vue | 196 ++++++----- .../components/CommentDeleteModal.vue | 67 ++-- .../components/PackageDeleteModal.vue | 58 ++-- .../ops-flow/components/PackageForm.vue | 167 +++++----- .../ops-flow/components/PackagePanel.vue | 96 +++--- .../components/PackageSetDefaultModal.vue | 48 ++- .../ops-flow/components/TaskAssignModal.vue | 114 ++++--- .../components/TaskCategoryDeleteModal.vue | 68 ++-- .../ops-flow/components/TaskCategoryForm.vue | 153 ++++++--- .../ops-flow/components/TaskCategoryPanel.vue | 89 +++-- .../components/TaskContentBaseForm.vue | 313 ++++++++---------- .../ops-flow/components/TaskDeleteModal.vue | 53 +-- .../components/TaskProgressEventView.vue | 42 ++- .../ops-flow/components/TaskProgressTab.vue | 48 +-- .../components/TaskStatusColorPicker.vue | 73 ++++ .../components/TaskStatusDeleteModal.vue | 96 +++--- .../ops-flow/components/TaskStatusForm.vue | 243 ++++---------- .../components/TaskStatusSetDefaultModal.vue | 86 +++-- .../ops-flow/components/TaskStatusTree.vue | 48 ++- .../components/TaskTypeDeleteModal.vue | 59 ++-- .../ops-flow/components/TaskTypeForm.vue | 190 +++++------ .../use-associated-categories-to-package.ts | 16 + .../composables/use-associated-tasks-query.ts | 17 +- .../composables/use-available-categories.ts | 13 + .../composables/use-categories-query.ts | 31 ++ .../composables/use-category-field.ts | 113 ++----- .../use-category-status-options.ts | 54 +++ .../composables/use-current-category.ts | 24 ++ .../composables/use-current-task-type.ts | 20 ++ .../composables/use-default-package-query.ts | 35 -- .../composables/use-default-package.ts | 18 + .../composables/use-default-status-option.ts | 21 ++ .../composables/use-package-category-bind.ts | 96 ++++++ .../composables/use-package-mutations.ts | 130 ++++++++ .../ops-flow/composables/use-package-query.ts | 43 +++ .../composables/use-package-workspace-bind.ts | 101 ++++++ .../composables/use-packages-query.ts | 36 ++ .../use-status-option-form-mutations.ts | 118 +++++++ .../use-status-type-dropdown-items.ts | 23 ++ .../composables/use-target-status-option.ts | 23 ++ .../composables/use-task-events-query.ts | 80 +++++ .../composables/use-task-fields-form.ts | 122 +++++++ .../ops-flow/composables/use-task-query.ts | 51 +++ .../composables/use-task-status-field.ts | 45 ++- .../composables/use-task-type-field.ts | 31 +- .../use-task-type-form-mutations.ts | 135 ++++++++ .../composables/use-task-type-query.ts | 30 ++ .../composables/use-task-type-scope-field.ts | 23 ++ .../composables/use-task-types-query.ts | 32 ++ .../composables/use-workspace-field.ts | 4 +- .../src/services/ops-flow/pages/BoardPage.vue | 13 +- .../ops-flow/pages/OpsFlowLandingPage.vue | 63 ++-- .../ops-flow/pages/TaskCreatePage.vue | 115 ++++--- .../ops-flow/pages/TaskDetailPage.vue | 122 +++---- .../admin/AdminTaskCategoryDetailPage.vue | 16 +- ...AdminTaskCategoryDetailPageTaskTypeTab.vue | 17 +- .../pages/admin/AdminTaskManagementPage.vue | 20 +- .../ops-flow/stores/admin/package-store.ts | 101 ------ .../stores/admin/task-category-page-store.ts | 81 +---- .../admin/task-management-page-store.ts | 49 +-- .../ops-flow/stores/board-page-store.ts | 49 --- .../services/ops-flow/stores/comment-store.ts | 74 ----- .../ops-flow/stores/task-category-store.ts | 124 ------- .../stores/task-content-form-store.ts | 220 +++++------- .../ops-flow/stores/task-detail-page-store.ts | 151 +-------- .../ops-flow/stores/task-type-store.ts | 196 ----------- .../task-fields-form/TaskFieldsForm.vue | 21 +- .../composables/use-task-field-validation.ts | 2 + .../field-templates/TextTaskField.vue | 2 +- .../components/WorkspaceInfo.vue | 2 +- .../workspace/user-workspace-store.ts | 2 +- .../reference/workspace-reference-store.ts | 4 +- 161 files changed, 3190 insertions(+), 2626 deletions(-) rename apps/web/src/{schema => api-clients}/identity/workspace/api-verbs/add-package.ts (100%) rename apps/web/src/{schema => api-clients}/identity/workspace/api-verbs/change-workspace-group.ts (100%) rename apps/web/src/{schema => api-clients}/identity/workspace/api-verbs/create.ts (100%) rename apps/web/src/{schema => api-clients}/identity/workspace/api-verbs/delete.ts (100%) rename apps/web/src/{schema => api-clients}/identity/workspace/api-verbs/list.ts (100%) rename apps/web/src/{schema => api-clients}/identity/workspace/api-verbs/remove-package.ts (100%) rename apps/web/src/{schema => api-clients}/identity/workspace/api-verbs/update.ts (100%) create mode 100644 apps/web/src/api-clients/identity/workspace/composables/use-workspace-api.ts rename apps/web/src/{schema => api-clients}/identity/workspace/model.ts (100%) create mode 100644 apps/web/src/common/components/buttons/type.ts delete mode 100644 apps/web/src/services/ops-flow/components/AssociatedWorkspaces.vue create mode 100644 apps/web/src/services/ops-flow/components/TaskStatusColorPicker.vue create mode 100644 apps/web/src/services/ops-flow/composables/use-associated-categories-to-package.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-available-categories.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-categories-query.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-category-status-options.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-current-category.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-current-task-type.ts delete mode 100644 apps/web/src/services/ops-flow/composables/use-default-package-query.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-default-package.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-default-status-option.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-package-category-bind.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-package-mutations.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-package-query.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-package-workspace-bind.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-packages-query.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-status-option-form-mutations.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-status-type-dropdown-items.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-target-status-option.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-task-events-query.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-task-fields-form.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-task-query.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-task-type-form-mutations.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-task-type-query.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-task-type-scope-field.ts create mode 100644 apps/web/src/services/ops-flow/composables/use-task-types-query.ts delete mode 100644 apps/web/src/services/ops-flow/stores/admin/package-store.ts delete mode 100644 apps/web/src/services/ops-flow/stores/board-page-store.ts delete mode 100644 apps/web/src/services/ops-flow/stores/comment-store.ts delete mode 100644 apps/web/src/services/ops-flow/stores/task-category-store.ts delete mode 100644 apps/web/src/services/ops-flow/stores/task-type-store.ts diff --git a/apps/web/src/api-clients/_common/composables/use-api-query-key.ts b/apps/web/src/api-clients/_common/composables/use-api-query-key.ts index 697ff885e4..1c92d0c5f8 100644 --- a/apps/web/src/api-clients/_common/composables/use-api-query-key.ts +++ b/apps/web/src/api-clients/_common/composables/use-api-query-key.ts @@ -1,14 +1,9 @@ -import type { ComputedRef } from 'vue'; import { computed, reactive } from 'vue'; - -import type { QueryKey } from '@tanstack/vue-query'; - import type { ResourceName, ServiceName, Verb, } from '@/api-clients/_common/types/query-key-type'; - import { useAppContextStore } from '@/store/app-context/app-context-store'; import { useUserWorkspaceStore } from '@/store/app-context/workspace/user-workspace-store'; @@ -40,7 +35,7 @@ export const useAPIQueryKey = , resource: R, verb: V, additionalGlobalParams?: Partial, -): ComputedRef => { +) => { const appContextStore = useAppContextStore(); const userWorkspaceStore = useUserWorkspaceStore(); @@ -55,5 +50,5 @@ export const useAPIQueryKey = , ...additionalGlobalParams, }); - return computed(() => [service, resource, verb, { ...globalQueryParams }]); + return computed(() => [service, resource, verb, { ...globalQueryParams }]); }; diff --git a/apps/web/src/schema/identity/workspace/api-verbs/add-package.ts b/apps/web/src/api-clients/identity/workspace/api-verbs/add-package.ts similarity index 100% rename from apps/web/src/schema/identity/workspace/api-verbs/add-package.ts rename to apps/web/src/api-clients/identity/workspace/api-verbs/add-package.ts diff --git a/apps/web/src/schema/identity/workspace/api-verbs/change-workspace-group.ts b/apps/web/src/api-clients/identity/workspace/api-verbs/change-workspace-group.ts similarity index 100% rename from apps/web/src/schema/identity/workspace/api-verbs/change-workspace-group.ts rename to apps/web/src/api-clients/identity/workspace/api-verbs/change-workspace-group.ts diff --git a/apps/web/src/schema/identity/workspace/api-verbs/create.ts b/apps/web/src/api-clients/identity/workspace/api-verbs/create.ts similarity index 100% rename from apps/web/src/schema/identity/workspace/api-verbs/create.ts rename to apps/web/src/api-clients/identity/workspace/api-verbs/create.ts diff --git a/apps/web/src/schema/identity/workspace/api-verbs/delete.ts b/apps/web/src/api-clients/identity/workspace/api-verbs/delete.ts similarity index 100% rename from apps/web/src/schema/identity/workspace/api-verbs/delete.ts rename to apps/web/src/api-clients/identity/workspace/api-verbs/delete.ts diff --git a/apps/web/src/schema/identity/workspace/api-verbs/list.ts b/apps/web/src/api-clients/identity/workspace/api-verbs/list.ts similarity index 100% rename from apps/web/src/schema/identity/workspace/api-verbs/list.ts rename to apps/web/src/api-clients/identity/workspace/api-verbs/list.ts diff --git a/apps/web/src/schema/identity/workspace/api-verbs/remove-package.ts b/apps/web/src/api-clients/identity/workspace/api-verbs/remove-package.ts similarity index 100% rename from apps/web/src/schema/identity/workspace/api-verbs/remove-package.ts rename to apps/web/src/api-clients/identity/workspace/api-verbs/remove-package.ts diff --git a/apps/web/src/schema/identity/workspace/api-verbs/update.ts b/apps/web/src/api-clients/identity/workspace/api-verbs/update.ts similarity index 100% rename from apps/web/src/schema/identity/workspace/api-verbs/update.ts rename to apps/web/src/api-clients/identity/workspace/api-verbs/update.ts diff --git a/apps/web/src/api-clients/identity/workspace/composables/use-workspace-api.ts b/apps/web/src/api-clients/identity/workspace/composables/use-workspace-api.ts new file mode 100644 index 0000000000..d974f34fe4 --- /dev/null +++ b/apps/web/src/api-clients/identity/workspace/composables/use-workspace-api.ts @@ -0,0 +1,47 @@ +import { SpaceConnector } from '@cloudforet/core-lib/space-connector'; + +import { useAPIQueryKey } from '@/api-clients/_common/composables/use-api-query-key'; +import type { ListResponse } from '@/api-clients/_common/schema/api-verbs/list'; +import type { WorkspaceAddPackageParameters } from '@/api-clients/identity/workspace/api-verbs/add-package'; +import type { WorkspaceChangeWorkspaceGroupParameters } from '@/api-clients/identity/workspace/api-verbs/change-workspace-group'; +import type { WorkspaceCreateParameters } from '@/api-clients/identity/workspace/api-verbs/create'; +import type { WorkspaceDeleteParameters } from '@/api-clients/identity/workspace/api-verbs/delete'; +import type { WorkspaceListParameters } from '@/api-clients/identity/workspace/api-verbs/list'; +import type { WorkspaceRemovePackageParameters } from '@/api-clients/identity/workspace/api-verbs/remove-package'; +import type { WorkspaceUpdateParameters } from '@/api-clients/identity/workspace/api-verbs/update'; +import type { WorkspaceModel } from '@/api-clients/identity/workspace/model'; + +export const useWorkspaceApi = () => { + const workspaceQueryKey = useAPIQueryKey('identity', 'workspace', 'get'); + const workspaceListQueryKey = useAPIQueryKey('identity', 'workspace', 'list'); + + const actions = { + async create(params: WorkspaceCreateParameters) { + return SpaceConnector.clientV2.identity.workspace.create(params); + }, + async update(params: WorkspaceUpdateParameters) { + return SpaceConnector.clientV2.identity.workspace.update(params); + }, + async delete(params: WorkspaceDeleteParameters) { + return SpaceConnector.clientV2.identity.workspace.delete(params); + }, + async list(params: WorkspaceListParameters) { + return SpaceConnector.clientV2.identity.workspace.list>(params); + }, + async addPackage(params: WorkspaceAddPackageParameters) { + return SpaceConnector.clientV2.identity.workspace.addPackage(params); + }, + async removePackage(params: WorkspaceRemovePackageParameters) { + return SpaceConnector.clientV2.identity.workspace.removePackage(params); + }, + async changeWorkspaceGroup(params: WorkspaceChangeWorkspaceGroupParameters) { + return SpaceConnector.clientV2.identity.workspace.changeWorkspaceGroup(params); + }, + }; + + return { + workspaceQueryKey, + workspaceListQueryKey, + workspaceAPI: actions, + }; +}; diff --git a/apps/web/src/schema/identity/workspace/model.ts b/apps/web/src/api-clients/identity/workspace/model.ts similarity index 100% rename from apps/web/src/schema/identity/workspace/model.ts rename to apps/web/src/api-clients/identity/workspace/model.ts diff --git a/apps/web/src/api-clients/opsflow/comment/composables/use-comment-api.ts b/apps/web/src/api-clients/opsflow/comment/composables/use-comment-api.ts index e69de29bb2..60d0857cca 100644 --- a/apps/web/src/api-clients/opsflow/comment/composables/use-comment-api.ts +++ b/apps/web/src/api-clients/opsflow/comment/composables/use-comment-api.ts @@ -0,0 +1,55 @@ +import type { ComputedRef } from 'vue'; + +import type { QueryKey } from '@tanstack/vue-query'; + +import { SpaceConnector } from '@cloudforet/core-lib/space-connector'; + +import { useAPIQueryKey } from '@/api-clients/_common/composables/use-api-query-key'; +import type { ListResponse } from '@/api-clients/_common/schema/api-verbs/list'; +import type { CommentCreateParameters } from '@/api-clients/opsflow/comment/schema/api-verbs/create'; +import type { CommentDeleteParameters } from '@/api-clients/opsflow/comment/schema/api-verbs/delete'; +import type { CommentGetParameters } from '@/api-clients/opsflow/comment/schema/api-verbs/get'; +import type { CommentListParameters } from '@/api-clients/opsflow/comment/schema/api-verbs/list'; +import type { CommentUpdateParameters } from '@/api-clients/opsflow/comment/schema/api-verbs/update'; +import type { CommentModel } from '@/api-clients/opsflow/comment/schema/model'; + +interface UseCommentApiReturn { + commentQueryKey: ComputedRef; + commentListQueryKey: ComputedRef; + commentAPI: { + create: (params: CommentCreateParameters) => Promise; + update: (params: CommentUpdateParameters) => Promise; + delete: (params: CommentDeleteParameters) => Promise; + get: (params: CommentGetParameters) => Promise; + list: (params: CommentListParameters) => Promise>; + } +} + +export const useCommentApi = (): UseCommentApiReturn => { + const commentQueryKey = useAPIQueryKey('opsflow', 'comment', 'get'); + const commentListQueryKey = useAPIQueryKey('opsflow', 'comment', 'list'); + + const actions = { + async create(params: CommentCreateParameters) { + return SpaceConnector.clientV2.opsflow.comment.create(params); + }, + async update(params: CommentUpdateParameters) { + return SpaceConnector.clientV2.opsflow.comment.update(params); + }, + async delete(params: CommentDeleteParameters) { + return SpaceConnector.clientV2.opsflow.comment.delete(params); + }, + async get(params: CommentGetParameters) { + return SpaceConnector.clientV2.opsflow.comment.get(params); + }, + async list(params: CommentListParameters) { + return SpaceConnector.clientV2.opsflow.comment.list>(params); + }, + }; + + return { + commentQueryKey, + commentListQueryKey, + commentAPI: actions, + }; +}; diff --git a/apps/web/src/api-clients/opsflow/comment/schema/api-verbs/create.ts b/apps/web/src/api-clients/opsflow/comment/schema/api-verbs/create.ts index f4892d66f8..0d089fb3ea 100644 --- a/apps/web/src/api-clients/opsflow/comment/schema/api-verbs/create.ts +++ b/apps/web/src/api-clients/opsflow/comment/schema/api-verbs/create.ts @@ -1,4 +1,4 @@ -import type { MentionTargets } from '../type'; +import type { MentionTargets } from '@/api-clients/opsflow/comment/schema/type'; export interface CommentCreateParameters { task_id: string; diff --git a/apps/web/src/api-clients/opsflow/comment/schema/api-verbs/list.ts b/apps/web/src/api-clients/opsflow/comment/schema/api-verbs/list.ts index 88db0c4a8c..7b34d9c095 100644 --- a/apps/web/src/api-clients/opsflow/comment/schema/api-verbs/list.ts +++ b/apps/web/src/api-clients/opsflow/comment/schema/api-verbs/list.ts @@ -1,6 +1,6 @@ import type { Query } from '@cloudforet/core-lib/space-connector/type'; -import type { CommentType } from '../type'; +import type { CommentType } from '@/api-clients/opsflow/comment/schema/type'; export interface CommentListParameters { query?: Query; diff --git a/apps/web/src/api-clients/opsflow/comment/schema/api-verbs/update.ts b/apps/web/src/api-clients/opsflow/comment/schema/api-verbs/update.ts index ed5aad93bf..9ac6e0cc61 100644 --- a/apps/web/src/api-clients/opsflow/comment/schema/api-verbs/update.ts +++ b/apps/web/src/api-clients/opsflow/comment/schema/api-verbs/update.ts @@ -1,4 +1,4 @@ -import type { MentionTargets } from '../type'; +import type { MentionTargets } from '@/api-clients/opsflow/comment/schema/type'; export interface CommentUpdateParameters { comment_id: string; diff --git a/apps/web/src/api-clients/opsflow/comment/schema/model.ts b/apps/web/src/api-clients/opsflow/comment/schema/model.ts index a2ded68fa4..d49d1dc1f4 100644 --- a/apps/web/src/api-clients/opsflow/comment/schema/model.ts +++ b/apps/web/src/api-clients/opsflow/comment/schema/model.ts @@ -1,5 +1,6 @@ -import type { ResourceGroupType } from '../../../_common/schema/type'; -import type { CommentType, MentionTargets, MentionSource } from './type'; +import type { ResourceGroupType } from '@/api-clients/_common/schema/type'; +import type { CommentType, MentionSource, MentionTargets } from '@/api-clients/opsflow/comment/schema/type'; + export interface CommentModel { comment_id: string; diff --git a/apps/web/src/api-clients/opsflow/event/composables/use-event-api.ts b/apps/web/src/api-clients/opsflow/event/composables/use-event-api.ts index e69de29bb2..e79ab67632 100644 --- a/apps/web/src/api-clients/opsflow/event/composables/use-event-api.ts +++ b/apps/web/src/api-clients/opsflow/event/composables/use-event-api.ts @@ -0,0 +1,32 @@ +import type { ComputedRef } from 'vue'; + +import type { QueryKey } from '@tanstack/vue-query'; + +import { SpaceConnector } from '@cloudforet/core-lib/space-connector'; + +import { useAPIQueryKey } from '@/api-clients/_common/composables/use-api-query-key'; +import type { ListResponse } from '@/api-clients/_common/schema/api-verbs/list'; +import type { EventListParameters } from '@/api-clients/opsflow/event/schema/api-verbs/list'; +import type { EventModel } from '@/api-clients/opsflow/event/schema/model'; + +interface UseEventApiReturn { + eventListQueryKey: ComputedRef; + eventAPI: { + list: (params: EventListParameters) => Promise>; + } +} + +export const useEventApi = (): UseEventApiReturn => { + const eventListQueryKey = useAPIQueryKey('opsflow', 'event', 'list'); + + const actions = { + async list(params: EventListParameters) { + return SpaceConnector.clientV2.opsflow.event.list>(params); + }, + }; + + return { + eventListQueryKey, + eventAPI: actions, + }; +}; diff --git a/apps/web/src/api-clients/opsflow/event/schema/api-verbs/list.ts b/apps/web/src/api-clients/opsflow/event/schema/api-verbs/list.ts index 7b160e4d70..ea0e8a13dc 100644 --- a/apps/web/src/api-clients/opsflow/event/schema/api-verbs/list.ts +++ b/apps/web/src/api-clients/opsflow/event/schema/api-verbs/list.ts @@ -1,12 +1,13 @@ import type { Query } from '@cloudforet/core-lib/space-connector/type'; -import type { EventType } from '../type'; +import type { EventType } from '@/api-clients/opsflow/event/schema/type'; + export interface EventListParameters { query?: Query; task_id?: string; event_type?: EventType; - user_type?: 'USER'|'APP'; // TODO: replace with UserType + user_type?: 'USER'|'APP'; event_id?: string; project_id?: string; workspace_id?: string; diff --git a/apps/web/src/api-clients/opsflow/event/schema/type.ts b/apps/web/src/api-clients/opsflow/event/schema/type.ts index 544e2b3e46..16bcbcf58e 100644 --- a/apps/web/src/api-clients/opsflow/event/schema/type.ts +++ b/apps/web/src/api-clients/opsflow/event/schema/type.ts @@ -1,4 +1,4 @@ -import type { TaskStatusType } from '../../task/schema/type'; +import type { TaskStatusType } from '@/api-clients/opsflow/task/schema/type'; export type EventType = 'CREATED'|'UPDATED'|'CHANGE_STATUS'|'COMMENTED'; export interface UpdatedDatum { diff --git a/apps/web/src/api-clients/opsflow/task-category/composables/use-task-category-api.ts b/apps/web/src/api-clients/opsflow/task-category/composables/use-task-category-api.ts index 8c0971069c..a93ba7893f 100644 --- a/apps/web/src/api-clients/opsflow/task-category/composables/use-task-category-api.ts +++ b/apps/web/src/api-clients/opsflow/task-category/composables/use-task-category-api.ts @@ -1,7 +1,3 @@ -import type { ComputedRef } from 'vue'; - -import type { QueryKey } from '@tanstack/vue-query'; - import { SpaceConnector } from '@cloudforet/core-lib/space-connector'; import { useAPIQueryKey } from '@/api-clients/_common/composables/use-api-query-key'; @@ -13,19 +9,7 @@ import type { TaskCategoryListParameters } from '@/api-clients/opsflow/task-cate import type { TaskCategoryUpdateParameters } from '@/api-clients/opsflow/task-category/schema/api-verbs/update'; import type { TaskCategoryModel } from '@/api-clients/opsflow/task-category/schema/model'; -interface UseTaskCategoryApiReturn { - taskCategoryQueryKey: ComputedRef; - taskCategoryListQueryKey: ComputedRef; - taskCategoryAPI: { - create: (params: TaskCategoryCreateParameters) => Promise; - update: (params: TaskCategoryUpdateParameters) => Promise; - delete: (params: TaskCategoryDeleteParameters) => Promise; - get: (params: TaskCategoryGetParameters) => Promise; - list: (params: TaskCategoryListParameters) => Promise>; - } -} - -export const useTaskCategoryApi = (): UseTaskCategoryApiReturn => { +export const useTaskCategoryApi = () => { const taskCategoryQueryKey = useAPIQueryKey('opsflow', 'task-category', 'get'); const taskCategoryListQueryKey = useAPIQueryKey('opsflow', 'task-category', 'list'); diff --git a/apps/web/src/api-clients/opsflow/task-category/schema/api-verbs/create.ts b/apps/web/src/api-clients/opsflow/task-category/schema/api-verbs/create.ts index 362a0821d1..cfafbfb244 100644 --- a/apps/web/src/api-clients/opsflow/task-category/schema/api-verbs/create.ts +++ b/apps/web/src/api-clients/opsflow/task-category/schema/api-verbs/create.ts @@ -1,6 +1,6 @@ -import type { Tags } from '../../../../_common/schema/model'; -import type { TaskField } from '../../../_types/task-field-type'; -import type { TaskStatusType, TaskStatusOptionWithOptionalId } from '../../../task/schema/type'; +import type { Tags } from '@/api-clients/_common/schema/model'; +import type { TaskField } from '@/api-clients/opsflow/_types/task-field-type'; +import type { TaskStatusOptionWithOptionalId, TaskStatusType } from '@/api-clients/opsflow/task/schema/type'; export interface TaskCategoryCreateParameters { diff --git a/apps/web/src/api-clients/opsflow/task-category/schema/model.ts b/apps/web/src/api-clients/opsflow/task-category/schema/model.ts index b8265c88c9..6ef3703451 100644 --- a/apps/web/src/api-clients/opsflow/task-category/schema/model.ts +++ b/apps/web/src/api-clients/opsflow/task-category/schema/model.ts @@ -1,6 +1,6 @@ -import type { Tags } from '../../../_common/schema/model'; -import type { TaskField } from '../../_types/task-field-type'; -import type { TaskStatusOptions } from '../../task/schema/type'; +import type { Tags } from '@/api-clients/_common/schema/model'; +import type { TaskField } from '@/api-clients/opsflow/_types/task-field-type'; +import type { TaskStatusOptions } from '@/api-clients/opsflow/task/schema/type'; export interface TaskCategoryModel { category_id: string; diff --git a/apps/web/src/api-clients/opsflow/task/schema/api-verbs/create.ts b/apps/web/src/api-clients/opsflow/task/schema/api-verbs/create.ts index 59c63d775f..b640dfdaf8 100644 --- a/apps/web/src/api-clients/opsflow/task/schema/api-verbs/create.ts +++ b/apps/web/src/api-clients/opsflow/task/schema/api-verbs/create.ts @@ -1,5 +1,5 @@ -import type { MentionTargets } from '../../../comment/schema/type'; -import type { TaskPriority } from '../type'; +import type { MentionTargets } from '@/api-clients/opsflow/comment/schema/type'; +import type { TaskPriority } from '@/api-clients/opsflow/task/schema/type'; export interface TaskCreateParameters { task_type_id: string; diff --git a/apps/web/src/api-clients/opsflow/task/schema/api-verbs/list.ts b/apps/web/src/api-clients/opsflow/task/schema/api-verbs/list.ts index fe2428ccac..92e39c62e0 100644 --- a/apps/web/src/api-clients/opsflow/task/schema/api-verbs/list.ts +++ b/apps/web/src/api-clients/opsflow/task/schema/api-verbs/list.ts @@ -1,6 +1,7 @@ import type { Query } from '@cloudforet/core-lib/space-connector/type'; -import type { TaskPriority, TaskStatusType } from '../type'; +import type { TaskPriority, TaskStatusType } from '@/api-clients/opsflow/task/schema/type'; + export interface TaskListParameters { query?: Query; diff --git a/apps/web/src/api-clients/opsflow/task/schema/api-verbs/update-description.ts b/apps/web/src/api-clients/opsflow/task/schema/api-verbs/update-description.ts index 3522bf9df9..19ce725416 100644 --- a/apps/web/src/api-clients/opsflow/task/schema/api-verbs/update-description.ts +++ b/apps/web/src/api-clients/opsflow/task/schema/api-verbs/update-description.ts @@ -1,5 +1,5 @@ -import type { FileModel } from '../../../../../schema/file-manager/model'; -import type { MentionTargets } from '../../../comment/schema/type'; +import type { MentionTargets } from '@/api-clients/opsflow/comment/schema/type'; +import type { FileModel } from '@/schema/file-manager/model'; export interface TaskUpdateDescriptionParameters { task_id: string; diff --git a/apps/web/src/api-clients/opsflow/task/schema/api-verbs/update.ts b/apps/web/src/api-clients/opsflow/task/schema/api-verbs/update.ts index 5aa2fbe6d5..7dec57a6c8 100644 --- a/apps/web/src/api-clients/opsflow/task/schema/api-verbs/update.ts +++ b/apps/web/src/api-clients/opsflow/task/schema/api-verbs/update.ts @@ -1,4 +1,4 @@ -import type { TaskPriority } from '../type'; +import type { TaskPriority } from '@/api-clients/opsflow/task/schema/type'; export interface TaskUpdateParameters { task_id: string; diff --git a/apps/web/src/api-clients/opsflow/task/schema/model.ts b/apps/web/src/api-clients/opsflow/task/schema/model.ts index 0d0e71b3d5..093027663a 100644 --- a/apps/web/src/api-clients/opsflow/task/schema/model.ts +++ b/apps/web/src/api-clients/opsflow/task/schema/model.ts @@ -1,5 +1,6 @@ -import type { FileModel } from '../../../../schema/file-manager/model'; -import type { TaskPriority, TaskStatusType } from './type'; +import type { TaskPriority, TaskStatusType } from '@/api-clients/opsflow/task/schema/type'; +import type { FileModel } from '@/schema/file-manager/model'; + export interface TaskModel { task_id: string; diff --git a/apps/web/src/common/components/buttons/ActionMenuButton.vue b/apps/web/src/common/components/buttons/ActionMenuButton.vue index 6b4b532b3c..8a6d6a3226 100644 --- a/apps/web/src/common/components/buttons/ActionMenuButton.vue +++ b/apps/web/src/common/components/buttons/ActionMenuButton.vue @@ -3,13 +3,11 @@ import { onClickOutside } from '@vueuse/core'; import { ref, computed } from 'vue'; import { PIconButton, PContextMenu, useContextMenuStyle } from '@cloudforet/mirinae'; -import type { MenuItem } from '@cloudforet/mirinae/types/controls/context-menu/type'; import { i18n } from '@/translations'; -interface ActionMenuItem extends MenuItem { - name: string; -} +import type { ActionMenuItem } from './type'; + type SupportMenu = 'edit' | 'delete'; const props = withDefaults(defineProps<{ diff --git a/apps/web/src/common/components/buttons/type.ts b/apps/web/src/common/components/buttons/type.ts new file mode 100644 index 0000000000..6fd501733b --- /dev/null +++ b/apps/web/src/common/components/buttons/type.ts @@ -0,0 +1,5 @@ +import type { MenuItem } from '@cloudforet/mirinae/types/controls/context-menu/type'; + +export interface ActionMenuItem extends MenuItem { + name: string; +} diff --git a/apps/web/src/common/composables/error/errorHandler.ts b/apps/web/src/common/composables/error/errorHandler.ts index 5d3619c99e..61dd695d45 100644 --- a/apps/web/src/common/composables/error/errorHandler.ts +++ b/apps/web/src/common/composables/error/errorHandler.ts @@ -68,11 +68,20 @@ export default class ErrorHandler { }; } - static handleRequestError(error: unknown, errorMessage: TranslateResult) { + static handleRequestError(error: unknown, errorMessage: TranslateResult, toast = false) { if (!isInstanceOfAuthorizationError(error)) { - if (isInstanceOfBadRequestError(error) && errorMessage) showErrorMessage(errorMessage, error); - else if (isInstanceOfAPIError(error)) showErrorMessage('Something is Wrong! Please contact the administrator.', error); + if (isInstanceOfBadRequestError(error) && errorMessage) { + showErrorMessage(errorMessage, error); + this.handleError(error); + return; + } + if (isInstanceOfAPIError(error)) { + showErrorMessage('Something is Wrong! Please contact the administrator.', error); + this.handleError(error); + return; + } } + if (toast) showErrorMessage('Something is Wrong! Please contact the administrator.', error); this.handleError(error); } } diff --git a/apps/web/src/common/modules/favorites/favorite-button/FavoriteButton.vue b/apps/web/src/common/modules/favorites/favorite-button/FavoriteButton.vue index 2e2af5f2c0..146024d3e4 100644 --- a/apps/web/src/common/modules/favorites/favorite-button/FavoriteButton.vue +++ b/apps/web/src/common/modules/favorites/favorite-button/FavoriteButton.vue @@ -7,7 +7,7 @@ import { useRoute } from 'vue-router/composables'; import { PI } from '@cloudforet/mirinae'; import type { CostQuerySetModel } from '@/api-clients/cost-analysis/cost-query-set/schema/model'; -import type { WorkspaceModel } from '@/schema/identity/workspace/model'; +import type { WorkspaceModel } from '@/api-clients/identity/workspace/model'; import type { MetricExampleModel } from '@/schema/inventory/metric-example/model'; import { useAppContextStore } from '@/store/app-context/app-context-store'; diff --git a/apps/web/src/common/modules/navigations/new-lsb/LSBTopTitle.vue b/apps/web/src/common/modules/navigations/new-lsb/LSBTopTitle.vue index 912e02cf9d..4fcc1fc8c0 100644 --- a/apps/web/src/common/modules/navigations/new-lsb/LSBTopTitle.vue +++ b/apps/web/src/common/modules/navigations/new-lsb/LSBTopTitle.vue @@ -19,7 +19,7 @@ const props = defineProps<{ diff --git a/apps/web/src/common/modules/navigations/top-bar/modules/top-bar-header/TopBarWorkspaces.vue b/apps/web/src/common/modules/navigations/top-bar/modules/top-bar-header/TopBarWorkspaces.vue index 1e3ded313f..fe68d7270d 100644 --- a/apps/web/src/common/modules/navigations/top-bar/modules/top-bar-header/TopBarWorkspaces.vue +++ b/apps/web/src/common/modules/navigations/top-bar/modules/top-bar-header/TopBarWorkspaces.vue @@ -13,7 +13,7 @@ import { import type { MenuItem } from '@cloudforet/mirinae/src/controls/context-menu/type'; import { CONTEXT_MENU_TYPE } from '@cloudforet/mirinae/src/controls/context-menu/type'; -import type { WorkspaceModel } from '@/schema/identity/workspace/model'; +import type { WorkspaceModel } from '@/api-clients/identity/workspace/model'; import { i18n } from '@/translations'; import { useAppContextStore } from '@/store/app-context/app-context-store'; diff --git a/apps/web/src/common/modules/navigations/top-bar/modules/top-bar-search/store.ts b/apps/web/src/common/modules/navigations/top-bar/modules/top-bar-search/store.ts index 5691c91172..f8e83346c3 100644 --- a/apps/web/src/common/modules/navigations/top-bar/modules/top-bar-search/store.ts +++ b/apps/web/src/common/modules/navigations/top-bar/modules/top-bar-search/store.ts @@ -5,7 +5,7 @@ import { defineStore } from 'pinia'; import { SpaceConnector } from '@cloudforet/core-lib/space-connector'; -import type { WorkspaceModel } from '@/schema/identity/workspace/model'; +import type { WorkspaceModel } from '@/api-clients/identity/workspace/model'; import type { ResourceSearchParameters, ResourceSearchResponse } from '@/schema/search/resource/api-verbs/search'; import type { ResourceModel } from '@/schema/search/resource/model'; diff --git a/apps/web/src/common/modules/navigations/top-bar/modules/top-bar-toolset/modules/top-bar-admin-toggle-button/TopBarAdminToggleButton.vue b/apps/web/src/common/modules/navigations/top-bar/modules/top-bar-toolset/modules/top-bar-admin-toggle-button/TopBarAdminToggleButton.vue index 71e4c891b7..2eb2edf0a6 100644 --- a/apps/web/src/common/modules/navigations/top-bar/modules/top-bar-toolset/modules/top-bar-admin-toggle-button/TopBarAdminToggleButton.vue +++ b/apps/web/src/common/modules/navigations/top-bar/modules/top-bar-toolset/modules/top-bar-admin-toggle-button/TopBarAdminToggleButton.vue @@ -4,7 +4,7 @@ import { useRouter } from 'vue-router/composables'; import { throttle } from 'lodash'; -import type { WorkspaceModel } from '@/schema/identity/workspace/model'; +import type { WorkspaceModel } from '@/api-clients/identity/workspace/model'; import { i18n } from '@/translations'; import { ROOT_ROUTE } from '@/router/constant'; diff --git a/apps/web/src/common/modules/project/ProjectSelectDropdown.vue b/apps/web/src/common/modules/project/ProjectSelectDropdown.vue index 13e614fd30..67c1062ea0 100644 --- a/apps/web/src/common/modules/project/ProjectSelectDropdown.vue +++ b/apps/web/src/common/modules/project/ProjectSelectDropdown.vue @@ -50,7 +50,7 @@ interface Props { isInitSelectedItem?: boolean; block?: boolean; styleType?: string; - appearanceType?: 'stack'; + appearanceType?: 'stack'|'badge'; showDeleteAllButton?: boolean; } @@ -325,7 +325,7 @@ watch(() => state._selectedProjectIds, (selectedProjectIds) => { diff --git a/apps/web/src/services/ops-flow/components/AssociatedWorkspaces.vue b/apps/web/src/services/ops-flow/components/AssociatedWorkspaces.vue deleted file mode 100644 index 1a0ef700e4..0000000000 --- a/apps/web/src/services/ops-flow/components/AssociatedWorkspaces.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - - diff --git a/apps/web/src/services/ops-flow/components/BoardLSB.vue b/apps/web/src/services/ops-flow/components/BoardLSB.vue index 52b4dcbfd3..98bb8d98c5 100644 --- a/apps/web/src/services/ops-flow/components/BoardLSB.vue +++ b/apps/web/src/services/ops-flow/components/BoardLSB.vue @@ -1,5 +1,5 @@