fetch account details from account id instead of context

This commit is contained in:
Bikram Choudhury
2025-10-28 16:57:55 +05:30
parent e002a4505c
commit 5ba7ce2f10
11 changed files with 201 additions and 142 deletions

View File

@@ -1,22 +1,28 @@
import { configContext } from "ConfigContext";
import React from "react"; import React from "react";
import { userContext } from "UserContext"; import { userContext } from "UserContext";
import { useSidePanel } from "../../../hooks/useSidePanel"; import { useSidePanel } from "../../../hooks/useSidePanel";
import { armRequest } from "../../../Utils/arm/request"; import {
cancel,
complete,
create,
listByDatabaseAccount,
pause,
resume
} from "../../../Utils/arm/generatedClients/dataTransferService/dataTransferJobs";
import { CreateJobRequest, DataTransferJobGetResults } from "../../../Utils/arm/generatedClients/dataTransferService/types";
import ContainerCopyMessages from "../ContainerCopyMessages"; import ContainerCopyMessages from "../ContainerCopyMessages";
import { import {
buildDataTransferJobPath,
convertTime, convertTime,
convertToCamelCase, convertToCamelCase,
COPY_JOB_API_VERSION,
COSMOS_SQL_COMPONENT, COSMOS_SQL_COMPONENT,
extractErrorMessage, extractErrorMessage,
formatUTCDateTime formatUTCDateTime,
getAccountDetailsFromResourceId
} from "../CopyJobUtils"; } from "../CopyJobUtils";
import CreateCopyJobScreensProvider from "../CreateCopyJob/Screens/CreateCopyJobScreensProvider"; import CreateCopyJobScreensProvider from "../CreateCopyJob/Screens/CreateCopyJobScreensProvider";
import { CopyJobStatusType } from "../Enums"; import { CopyJobActions, CopyJobStatusType } from "../Enums";
import { MonitorCopyJobsRefState } from "../MonitorCopyJobs/MonitorCopyJobRefState"; import { MonitorCopyJobsRefState } from "../MonitorCopyJobs/MonitorCopyJobRefState";
import { CopyJobContextState, CopyJobError, CopyJobType, DataTransferJobType } from "../Types"; import { CopyJobContextState, CopyJobError, CopyJobErrorType, CopyJobType } from "../Types";
export const openCreateCopyJobPanel = () => { export const openCreateCopyJobPanel = () => {
const sidePanelState = useSidePanel.getState() const sidePanelState = useSidePanel.getState()
@@ -37,19 +43,13 @@ export const getCopyJobs = async (): Promise<CopyJobType[]> => {
} }
copyJobsAbortController = new AbortController(); copyJobsAbortController = new AbortController();
try { try {
const path = buildDataTransferJobPath({ const { subscriptionId, resourceGroup, accountName } = getAccountDetailsFromResourceId(userContext.databaseAccount?.id || "");
subscriptionId: userContext.subscriptionId, const response = await listByDatabaseAccount(
resourceGroup: userContext.databaseAccount?.resourceGroup || "", subscriptionId,
accountName: userContext.databaseAccount?.name || "" resourceGroup,
}); accountName,
copyJobsAbortController.signal
const response: { value: DataTransferJobType[] } = await armRequest({ );
host: configContext.ARM_ENDPOINT,
path,
method: "GET",
apiVersion: COPY_JOB_API_VERSION,
signal: copyJobsAbortController.signal
});
const jobs = response.value || []; const jobs = response.value || [];
if (!Array.isArray(jobs)) { if (!Array.isArray(jobs)) {
@@ -74,14 +74,14 @@ export const getCopyJobs = async (): Promise<CopyJobType[]> => {
}; };
const formattedJobs: CopyJobType[] = jobs const formattedJobs: CopyJobType[] = jobs
.filter((job: DataTransferJobType) => .filter((job: DataTransferJobGetResults) =>
job.properties?.source?.component === COSMOS_SQL_COMPONENT && job.properties?.source?.component === COSMOS_SQL_COMPONENT &&
job.properties?.destination?.component === COSMOS_SQL_COMPONENT job.properties?.destination?.component === COSMOS_SQL_COMPONENT
) )
.sort((current: DataTransferJobType, next: DataTransferJobType) => .sort((current: DataTransferJobGetResults, next: DataTransferJobGetResults) =>
new Date(next.properties.lastUpdatedUtcTime).getTime() - new Date(current.properties.lastUpdatedUtcTime).getTime() new Date(next.properties.lastUpdatedUtcTime).getTime() - new Date(current.properties.lastUpdatedUtcTime).getTime()
) )
.map((job: DataTransferJobType, index: number) => { .map((job: DataTransferJobGetResults, index: number) => {
const dateTimeObj = formatUTCDateTime(job.properties.lastUpdatedUtcTime); const dateTimeObj = formatUTCDateTime(job.properties.lastUpdatedUtcTime);
return { return {
@@ -93,7 +93,7 @@ export const getCopyJobs = async (): Promise<CopyJobType[]> => {
Duration: convertTime(job.properties.duration), Duration: convertTime(job.properties.duration),
LastUpdatedTime: dateTimeObj.formattedDateTime, LastUpdatedTime: dateTimeObj.formattedDateTime,
timestamp: dateTimeObj.timestamp, timestamp: dateTimeObj.timestamp,
Error: job.properties.error ? extractErrorMessage(job.properties.error) : null, Error: job.properties.error ? extractErrorMessage(job.properties.error as unknown as CopyJobErrorType) : null,
} as CopyJobType; } as CopyJobType;
}); });
return formattedJobs; return formattedJobs;
@@ -107,32 +107,31 @@ export const getCopyJobs = async (): Promise<CopyJobType[]> => {
export const submitCreateCopyJob = async (state: CopyJobContextState, onSuccess: () => void) => { export const submitCreateCopyJob = async (state: CopyJobContextState, onSuccess: () => void) => {
try { try {
const { source, target, migrationType, jobName } = state; const { source, target, migrationType, jobName } = state;
const path = buildDataTransferJobPath({ const { subscriptionId, resourceGroup, accountName } = getAccountDetailsFromResourceId(userContext.databaseAccount?.id || "");
subscriptionId: userContext.subscriptionId,
resourceGroup: userContext.databaseAccount?.resourceGroup || "",
accountName: userContext.databaseAccount?.name || "",
jobName
});
const body = { const body = {
"properties": { properties: {
"source": { source: {
"component": "CosmosDBSql", component: "CosmosDBSql",
"remoteAccountName": source?.account?.name, remoteAccountName: source?.account?.name,
"databaseName": source?.databaseId, databaseName: source?.databaseId,
"containerName": source?.containerId containerName: source?.containerId
}, },
"destination": { destination: {
"component": "CosmosDBSql", component: "CosmosDBSql",
"databaseName": target?.databaseId, databaseName: target?.databaseId,
"containerName": target?.containerId containerName: target?.containerId
}, },
"mode": migrationType mode: migrationType
} }
}; } as unknown as CreateJobRequest;
const response: DataTransferJobType = await armRequest({ const response = await create(
host: configContext.ARM_ENDPOINT, path, method: "PUT", body, apiVersion: COPY_JOB_API_VERSION subscriptionId,
}); resourceGroup,
accountName,
jobName,
body,
);
MonitorCopyJobsRefState.getState().ref?.refreshJobList(); MonitorCopyJobsRefState.getState().ref?.refreshJobList();
onSuccess(); onSuccess();
return response; return response;
@@ -142,19 +141,29 @@ export const submitCreateCopyJob = async (state: CopyJobContextState, onSuccess:
} }
} }
export const updateCopyJobStatus = async (job: CopyJobType, action: string): Promise<DataTransferJobType> => { export const updateCopyJobStatus = async (job: CopyJobType, action: string): Promise<DataTransferJobGetResults> => {
try { try {
const path = buildDataTransferJobPath({
subscriptionId: userContext.subscriptionId,
resourceGroup: userContext.databaseAccount?.resourceGroup || "",
accountName: userContext.databaseAccount?.name || "",
jobName: job.Name,
action: action
});
const response: DataTransferJobType = await armRequest({ let updateFn = null;
host: configContext.ARM_ENDPOINT, path, method: "POST", apiVersion: COPY_JOB_API_VERSION switch (action.toLowerCase()) {
}); case CopyJobActions.pause:
updateFn = pause;
break;
case CopyJobActions.resume:
updateFn = resume;
break;
case CopyJobActions.cancel:
updateFn = cancel;
break;
case CopyJobActions.complete:
updateFn = complete;
break;
default:
throw new Error(`Unsupported action: ${action}`);
}
const { subscriptionId, resourceGroup, accountName } = getAccountDetailsFromResourceId(userContext.databaseAccount?.id || "");
const response = await updateFn?.(subscriptionId, resourceGroup, accountName, job.Name);
return response; return response;
} catch (error) { } catch (error) {
const errorMessage = JSON.stringify((error as CopyJobError).message || error.content || error); const errorMessage = JSON.stringify((error as CopyJobError).message || error.content || error);

View File

@@ -97,8 +97,8 @@ export default {
Actions: { Actions: {
pause: "Pause", pause: "Pause",
resume: "Resume", resume: "Resume",
stop: "Stop", cancel: "Cancel",
cutover: "Cutover", complete: "Complete",
viewDetails: "View Details", viewDetails: "View Details",
}, },
Status: { Status: {

View File

@@ -3,6 +3,7 @@ import React, { useCallback } from "react";
import { assignRole } from "../../../../../Utils/arm/RbacUtils"; import { assignRole } from "../../../../../Utils/arm/RbacUtils";
import ContainerCopyMessages from "../../../ContainerCopyMessages"; import ContainerCopyMessages from "../../../ContainerCopyMessages";
import { useCopyJobContext } from "../../../Context/CopyJobContext"; import { useCopyJobContext } from "../../../Context/CopyJobContext";
import { getAccountDetailsFromResourceId } from "../../../CopyJobUtils";
import InfoTooltip from "../Components/InfoTooltip"; import InfoTooltip from "../Components/InfoTooltip";
import PopoverMessage from "../Components/PopoverContainer"; import PopoverMessage from "../Components/PopoverContainer";
import { PermissionSectionConfig } from "./hooks/usePermissionsSection"; import { PermissionSectionConfig } from "./hooks/usePermissionsSection";
@@ -19,12 +20,19 @@ const AddReadPermissionToDefaultIdentity: React.FC<AddManagedIdentityProps> = ()
const handleAddReadPermission = useCallback(async () => { const handleAddReadPermission = useCallback(async () => {
const { source, target } = copyJobState; const { source, target } = copyJobState;
const selectedSourceAccount = source?.account;
try { try {
const {
subscriptionId: sourceSubscriptionId,
resourceGroup: sourceResourceGroup,
accountName: sourceAccountName
} = getAccountDetailsFromResourceId(selectedSourceAccount?.id);
setLoading(true); setLoading(true);
const assignedRole = await assignRole( const assignedRole = await assignRole(
source?.subscription?.subscriptionId, sourceSubscriptionId,
source?.account?.resourceGroup, sourceResourceGroup,
source?.account?.name, sourceAccountName,
target?.account?.identity?.principalId!, target?.account?.identity?.principalId!,
); );
if (assignedRole) { if (assignedRole) {

View File

@@ -3,7 +3,7 @@ import React, { useCallback, useState } from "react";
import { fetchDatabaseAccount } from "Utils/arm/databaseAccountUtils"; import { fetchDatabaseAccount } from "Utils/arm/databaseAccountUtils";
import ContainerCopyMessages from "../../../ContainerCopyMessages"; import ContainerCopyMessages from "../../../ContainerCopyMessages";
import { useCopyJobContext } from "../../../Context/CopyJobContext"; import { useCopyJobContext } from "../../../Context/CopyJobContext";
import { buildResourceLink } from "../../../CopyJobUtils"; import { buildResourceLink, getAccountDetailsFromResourceId } from "../../../CopyJobUtils";
import { PermissionSectionConfig } from "./hooks/usePermissionsSection"; import { PermissionSectionConfig } from "./hooks/usePermissionsSection";
import useWindowOpenMonitor from "./hooks/useWindowOpenMonitor"; import useWindowOpenMonitor from "./hooks/useWindowOpenMonitor";
@@ -16,17 +16,19 @@ const PointInTimeRestore: React.FC<AddManagedIdentityProps> = () => {
const onWindowClosed = useCallback(async () => { const onWindowClosed = useCallback(async () => {
try { try {
const selectedSourceAccount = source?.account;
const {
subscriptionId: sourceSubscriptionId,
resourceGroup: sourceResourceGroup,
accountName: sourceAccountName
} = getAccountDetailsFromResourceId(selectedSourceAccount?.id);
setLoading(true); setLoading(true);
const account = await fetchDatabaseAccount( const account = await fetchDatabaseAccount(
source?.subscription?.subscriptionId, sourceSubscriptionId,
source?.account?.resourceGroup, sourceResourceGroup,
source?.account?.name sourceAccountName
); );
/* account.properties = {
backupPolicy: {
type: "Continuous"
}
} */
if (account) { if (account) {
setCopyJobState((prevState) => ({ setCopyJobState((prevState) => ({
...prevState, ...prevState,

View File

@@ -1,6 +1,7 @@
import { DatabaseAccount } from "Contracts/DataModels"; import { DatabaseAccount } from "Contracts/DataModels";
import { useCallback, useState } from "react"; import { useCallback, useState } from "react";
import { useCopyJobContext } from "../../../../Context/CopyJobContext"; import { useCopyJobContext } from "../../../../Context/CopyJobContext";
import { getAccountDetailsFromResourceId } from "../../../../CopyJobUtils";
interface UseManagedIdentityUpdaterParams { interface UseManagedIdentityUpdaterParams {
updateIdentityFn: ( updateIdentityFn: (
@@ -24,11 +25,17 @@ const useManagedIdentity = (
const handleAddSystemIdentity = useCallback(async (): Promise<void> => { const handleAddSystemIdentity = useCallback(async (): Promise<void> => {
try { try {
setLoading(true); setLoading(true);
const { target } = copyJobState; const selectedTargetAccount = copyJobState?.target?.account;
const {
subscriptionId: targetSubscriptionId,
resourceGroup: targetResourceGroup,
accountName: targetAccountName
} = getAccountDetailsFromResourceId(selectedTargetAccount?.id);
const updatedAccount = await updateIdentityFn( const updatedAccount = await updateIdentityFn(
target.subscriptionId, targetSubscriptionId,
target.account?.resourceGroup, targetResourceGroup,
target.account?.name targetAccountName
); );
if (updatedAccount) { if (updatedAccount) {
setCopyJobState((prevState) => ({ setCopyJobState((prevState) => ({

View File

@@ -5,6 +5,7 @@ import {
RoleDefinitionType RoleDefinitionType
} from "../../../../../../Utils/arm/RbacUtils"; } from "../../../../../../Utils/arm/RbacUtils";
import ContainerCopyMessages from "../../../../ContainerCopyMessages"; import ContainerCopyMessages from "../../../../ContainerCopyMessages";
import { getAccountDetailsFromResourceId } from "../../../../CopyJobUtils";
import { import {
BackupPolicyType, BackupPolicyType,
CopyJobMigrationType, CopyJobMigrationType,
@@ -68,10 +69,17 @@ const PERMISSION_SECTIONS_CONFIG: PermissionSectionConfig[] = [
disabled: true, disabled: true,
validate: async (state: CopyJobContextState) => { validate: async (state: CopyJobContextState) => {
const principalId = state?.target?.account?.identity?.principalId; const principalId = state?.target?.account?.identity?.principalId;
const selectedSourceAccount = state?.source?.account;
const {
subscriptionId: sourceSubscriptionId,
resourceGroup: sourceResourceGroup,
accountName: sourceAccountName
} = getAccountDetailsFromResourceId(selectedSourceAccount?.id);
const rolesAssigned = await fetchRoleAssignments( const rolesAssigned = await fetchRoleAssignments(
state.source?.subscription?.subscriptionId, sourceSubscriptionId,
state.source?.account?.resourceGroup, sourceResourceGroup,
state.source?.account?.name, sourceAccountName,
principalId principalId
); );

View File

@@ -34,7 +34,7 @@ export enum CopyJobStatusType {
export enum CopyJobActions { export enum CopyJobActions {
pause = "pause", pause = "pause",
stop = "cancel",
resume = "resume", resume = "resume",
cutover = "complete" cancel = "cancel",
complete = "complete",
} }

View File

@@ -23,9 +23,9 @@ const CopyJobActionMenu: React.FC<CopyJobActionMenuProps> = ({ job, handleClick
onClick: () => handleClick(job, CopyJobActions.pause) onClick: () => handleClick(job, CopyJobActions.pause)
}, },
{ {
key: CopyJobActions.stop, key: CopyJobActions.cancel,
text: ContainerCopyMessages.MonitorJobs.Actions.stop, text: ContainerCopyMessages.MonitorJobs.Actions.cancel,
onClick: () => handleClick(job, CopyJobActions.stop) onClick: () => handleClick(job, CopyJobActions.cancel)
}, },
{ {
key: CopyJobActions.resume, key: CopyJobActions.resume,
@@ -50,9 +50,9 @@ const CopyJobActionMenu: React.FC<CopyJobActionMenuProps> = ({ job, handleClick
const filteredItems = baseItems.filter(item => item.key !== CopyJobActions.resume); const filteredItems = baseItems.filter(item => item.key !== CopyJobActions.resume);
if (job.Mode === CopyJobMigrationType.Online) { if (job.Mode === CopyJobMigrationType.Online) {
filteredItems.push({ filteredItems.push({
key: CopyJobActions.cutover, key: CopyJobActions.complete,
text: ContainerCopyMessages.MonitorJobs.Actions.cutover, text: ContainerCopyMessages.MonitorJobs.Actions.complete,
onClick: () => handleClick(job, CopyJobActions.cutover) onClick: () => handleClick(job, CopyJobActions.complete)
}); });
} }
return filteredItems; return filteredItems;

View File

@@ -3,13 +3,13 @@
Run "npm run generateARMClients" to regenerate Run "npm run generateARMClients" to regenerate
Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs
Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2023-11-15-preview/dataTransferService.json Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/DocumentDB/preview/2025-05-01-preview/dataTransferService.json
*/ */
import { configContext } from "../../../../ConfigContext"; import { configContext } from "../../../../ConfigContext";
import { armRequest } from "../../request"; import { armRequest } from "../../request";
import * as Types from "./types"; import * as Types from "./types";
const apiVersion = "2023-11-15-preview"; const apiVersion = "2025-05-01-preview";
/* Creates a Data Transfer Job. */ /* Creates a Data Transfer Job. */
export async function create( export async function create(
@@ -67,12 +67,24 @@ export async function cancel(
return armRequest({ host: configContext.ARM_ENDPOINT, path, method: "POST", apiVersion }); return armRequest({ host: configContext.ARM_ENDPOINT, path, method: "POST", apiVersion });
} }
/* Completes a Data Transfer Online Job. */
export async function complete(
subscriptionId: string,
resourceGroupName: string,
accountName: string,
jobName: string,
): Promise<Types.DataTransferJobGetResults> {
const path = `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}/dataTransferJobs/${jobName}/complete`;
return armRequest({ host: configContext.ARM_ENDPOINT, path, method: "POST", apiVersion });
}
/* Get a list of Data Transfer jobs. */ /* Get a list of Data Transfer jobs. */
export async function listByDatabaseAccount( export async function listByDatabaseAccount(
subscriptionId: string, subscriptionId: string,
resourceGroupName: string, resourceGroupName: string,
accountName: string, accountName: string,
signal?: AbortSignal
): Promise<Types.DataTransferJobFeedResults> { ): Promise<Types.DataTransferJobFeedResults> {
const path = `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}/dataTransferJobs`; const path = `/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/${accountName}/dataTransferJobs`;
return armRequest({ host: configContext.ARM_ENDPOINT, path, method: "GET", apiVersion }); return armRequest({ host: configContext.ARM_ENDPOINT, path, method: "GET", apiVersion, signal });
} }

View File

@@ -3,99 +3,112 @@
Run "npm run generateARMClients" to regenerate Run "npm run generateARMClients" to regenerate
Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs Edting this file directly should be done with extreme caution as not to diverge from ARM REST specs
Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/2023-11-15-preview/dataTransferService.json Generated from: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/DocumentDB/preview/2025-05-01-preview/dataTransferService.json
*/ */
/* Base class for all DataTransfer source/sink */ /* Base class for all DataTransfer source/sink */
export interface DataTransferDataSourceSink { export interface DataTransferDataSourceSink {
/* undocumented */ /* undocumented */
component: "CosmosDBCassandra" | "CosmosDBMongo" | "CosmosDBSql" | "AzureBlobStorage"; component: "CosmosDBCassandra" | "CosmosDBMongo" | "CosmosDBMongoVCore" | "CosmosDBSql" | "AzureBlobStorage";
} }
/* A base CosmosDB data source/sink */ /* A base CosmosDB data source/sink */
export type BaseCosmosDataTransferDataSourceSink = DataTransferDataSourceSink & { export type BaseCosmosDataTransferDataSourceSink = DataTransferDataSourceSink & {
/* undocumented */ /* undocumented */
remoteAccountName?: string; remoteAccountName?: string;
}; };
/* A CosmosDB Cassandra API data source/sink */ /* A CosmosDB Cassandra API data source/sink */
export type CosmosCassandraDataTransferDataSourceSink = BaseCosmosDataTransferDataSourceSink & { export type CosmosCassandraDataTransferDataSourceSink = BaseCosmosDataTransferDataSourceSink & {
/* undocumented */ /* undocumented */
keyspaceName: string; keyspaceName: string;
/* undocumented */ /* undocumented */
tableName: string; tableName: string;
}; };
/* A CosmosDB Mongo API data source/sink */ /* A CosmosDB Mongo API data source/sink */
export type CosmosMongoDataTransferDataSourceSink = BaseCosmosDataTransferDataSourceSink & { export type CosmosMongoDataTransferDataSourceSink = BaseCosmosDataTransferDataSourceSink & {
/* undocumented */ /* undocumented */
databaseName: string; databaseName: string;
/* undocumented */ /* undocumented */
collectionName: string; collectionName: string;
}; };
/* A CosmosDB Mongo vCore API data source/sink */
export type CosmosMongoVCoreDataTransferDataSourceSink = DataTransferDataSourceSink & {
/* undocumented */
databaseName: string;
/* undocumented */
collectionName: string;
/* undocumented */
hostName?: string;
/* undocumented */
connectionStringKeyVaultUri?: string;
};
/* A CosmosDB No Sql API data source/sink */ /* A CosmosDB No Sql API data source/sink */
export type CosmosSqlDataTransferDataSourceSink = BaseCosmosDataTransferDataSourceSink & { export type CosmosSqlDataTransferDataSourceSink = BaseCosmosDataTransferDataSourceSink & {
/* undocumented */ /* undocumented */
databaseName: string; databaseName: string;
/* undocumented */ /* undocumented */
containerName: string; containerName: string;
}; };
/* An Azure Blob Storage data source/sink */ /* An Azure Blob Storage data source/sink */
export type AzureBlobDataTransferDataSourceSink = DataTransferDataSourceSink & { export type AzureBlobDataTransferDataSourceSink = DataTransferDataSourceSink & {
/* undocumented */ /* undocumented */
containerName: string; containerName: string;
/* undocumented */ /* undocumented */
endpointUrl?: string; endpointUrl?: string;
}; };
/* The properties of a DataTransfer Job */ /* The properties of a DataTransfer Job */
export interface DataTransferJobProperties { export interface DataTransferJobProperties {
/* Job Name */ /* Job Name */
readonly jobName?: string; readonly jobName?: string;
/* Source DataStore details */ /* Source DataStore details */
source: DataTransferDataSourceSink; source: DataTransferDataSourceSink;
/* Destination DataStore details */ /* Destination DataStore details */
destination: DataTransferDataSourceSink; destination: DataTransferDataSourceSink;
/* Job Status */ /* Job Status */
readonly status?: string; readonly status?: string;
/* Processed Count. */ /* Processed Count. */
readonly processedCount?: number; readonly processedCount?: number
/* Total Count. */ /* Total Count. */
readonly totalCount?: number; readonly totalCount?: number;
/* Last Updated Time (ISO-8601 format). */ /* Last Updated Time (ISO-8601 format). */
readonly lastUpdatedUtcTime?: string; readonly lastUpdatedUtcTime?: string;
/* Worker count */ /* Worker count */
workerCount?: number; workerCount?: number;
/* Error response for Faulted job */ /* Error response for Faulted job */
readonly error?: unknown; readonly error?: unknown;
/* Total Duration of Job */ /* Total Duration of Job */
readonly duration?: string; readonly duration?: string
/* Mode of job execution */ /* Mode of job execution */
mode?: "Offline" | "Online"; mode?: "Offline" | "Online";
} }
/* Parameters to create Data Transfer Job */ /* Parameters to create Data Transfer Job */
export type CreateJobRequest = unknown & { export type CreateJobRequest = unknown & {
/* Data Transfer Create Job Properties */ /* Data Transfer Create Job Properties */
properties: DataTransferJobProperties; properties: DataTransferJobProperties;
}; };
/* A Cosmos DB Data Transfer Job */ /* A Cosmos DB Data Transfer Job */
export type DataTransferJobGetResults = unknown & { export type DataTransferJobGetResults = unknown & {
/* undocumented */ /* undocumented */
properties?: DataTransferJobProperties; properties?: DataTransferJobProperties;
}; };
/* The List operation response, that contains the Data Transfer jobs and their properties. */ /* The List operation response, that contains the Data Transfer jobs and their properties. */
export interface DataTransferJobFeedResults { export interface DataTransferJobFeedResults {
/* List of Data Transfer jobs and their properties. */ /* List of Data Transfer jobs and their properties. */
readonly value?: DataTransferJobGetResults[]; readonly value?: DataTransferJobGetResults[];
/* URL to get the next set of Data Transfer job list results if there are any. */ /* URL to get the next set of Data Transfer job list results if there are any. */
readonly nextLink?: string; readonly nextLink?: string;
} }

View File

@@ -21,9 +21,9 @@ const version = "2025-05-01-preview";
"cosmos" | "managedCassandra" | "mongorbac" | "notebook" | "privateEndpointConnection" | "privateLinkResources" | "cosmos" | "managedCassandra" | "mongorbac" | "notebook" | "privateEndpointConnection" | "privateLinkResources" |
"rbac" | "restorable" | "services" | "dataTransferService" "rbac" | "restorable" | "services" | "dataTransferService"
*/ */
const githubResourceName = "cosmos-db"; const githubResourceName = "dataTransferService";
const deResourceName = "cosmos"; const deResourceName = "dataTransferService";
const schemaURL = `https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/preview/${version}/${githubResourceName}.json`; const schemaURL = `https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/cosmos-db/resource-manager/Microsoft.DocumentDB/DocumentDB/preview/${version}/${githubResourceName}.json`;
const outputDir = path.join(__dirname, `../../src/Utils/arm/generatedClients/${deResourceName}`); const outputDir = path.join(__dirname, `../../src/Utils/arm/generatedClients/${deResourceName}`);
// Array of strings to use for eventual output // Array of strings to use for eventual output