public async saveDeploymentTask()

in source/packages/services/greengrass2-provisioning/src/deploymentTasks/deploymentTasks.dao.ts [294:391]


    public async saveDeploymentTask(
        task: DeploymentTask,
        saveBatchProgress: boolean
    ): Promise<void> {
        logger.debug(
            `deploymentTasks.dao saveDeploymentTask: in: task:${JSON.stringify(
                task
            )}, saveBatchProgress:${saveBatchProgress}`
        );

        ow(task, ow.object.nonEmpty);
        ow(task.id, ow.string.nonEmpty);
        ow(task.taskStatus, ow.string.nonEmpty);
        for (const d of task.deployments) {
            ow(d, ow.object.nonEmpty);
            ow(d.coreName, ow.string.nonEmpty);
        }

        const params: BatchWriteCommandInput = {
            RequestItems: {
                [process.env.AWS_DYNAMODB_TABLE_NAME]: [],
            },
        };

        const createdAt = task.createdAt ? new Date(task.createdAt).toISOString() : undefined;
        const updatedAt = task.updatedAt ? new Date(task.updatedAt).toISOString() : undefined;

        // main task item
        const taskDbId = createDelimitedAttribute(PkType.DeploymentTask, task.id);
        const taskItem = {
            PutRequest: {
                Item: {
                    pk: taskDbId,
                    sk: taskDbId,
                    siKey1: PkType.DeploymentTask,
                    templateName: task.template.name,
                    templateVersion: task.template.version,
                    targets: task.targets,
                    iotJobConfig: task.iotJobConfig,
                    taskId: task.id,
                    taskStatus: task.taskStatus,
                    statusMessage: task.statusMessage,
                    createdAt: createdAt,
                    updatedAt: updatedAt,
                },
            },
        };
        params.RequestItems[process.env.AWS_DYNAMODB_TABLE_NAME].push(taskItem);

        // batch processing status item
        if (task.batchesTotal > 0 && saveBatchProgress) {
            const batchDbId = createDelimitedAttribute(PkType.DeploymentTask, task.id, 'batches');
            const batchSummaryItem = {
                PutRequest: {
                    Item: {
                        pk: taskDbId,
                        sk: batchDbId,
                        batchesTotal: task.batchesTotal,
                        batchesComplete: task.batchesComplete,
                        createdAt: createdAt,
                        updatedAt: updatedAt,
                    },
                },
            };
            params.RequestItems[process.env.AWS_DYNAMODB_TABLE_NAME].push(batchSummaryItem);
        }

        if ((task.deployments?.length ?? 0) > 0) {
            for (const d of task.deployments) {
                // deployment task detail item
                const coreDbId = createDelimitedAttribute(PkType.CoreDevice, d.coreName);
                const deploymentTaskDetailItem = {
                    PutRequest: {
                        Item: {
                            pk: taskDbId,
                            sk: coreDbId,
                            siKey1: coreDbId, //This is so that we can query deploymnents based on corename
                            name: d.coreName,
                            taskStatus: d.taskStatus,
                            statusMessage: d.statusMessage,
                            createdAt: createdAt,
                            updatedAt: updatedAt,
                        },
                    },
                };
                params.RequestItems[process.env.AWS_DYNAMODB_TABLE_NAME].push(
                    deploymentTaskDetailItem
                );
            }
        }

        const result = await this.dynamoDbUtils.batchWriteAll(params);
        if (this.dynamoDbUtils.hasUnprocessedItems(result)) {
            throw new Error('SAVE_DEPLOYMENT_TASK_FAILED');
        }

        logger.debug(`deploymentTasks.dao saveDeploymentTask: exit:`);
    }