import { DynamoDbWrapper } from '../dynamo-db-wrapper';
/**
 * Request class for the TransactWriteItems operation. Write up to 10 items to one or many tables in a transaction.
 */
export class TransactWriteRequest {
    constructor() {
        this.dynamoDBWrapper = new DynamoDbWrapper();
        this.params = {
            TransactItems: [],
        };
    }
    returnConsumedCapacity(level) {
        this.params.ReturnConsumedCapacity = level;
        return this;
    }
    /**
     * return item collection metrics.
     */
    returnItemCollectionMetrics(returnItemCollectionMetrics) {
        this.params.ReturnItemCollectionMetrics = returnItemCollectionMetrics;
        return this;
    }
    transact(...writeOperations) {
        if (!writeOperations || writeOperations.length === 0) {
            throw new Error('at least one transaction operation must be added');
        }
        if (this.params.TransactItems.length + writeOperations.length > 10) {
            throw new Error(`Each transaction can include up to 10 unique items, including conditions.\
       Given operations count: ${this.params.TransactItems.length + writeOperations.length}`);
        }
        this.params.TransactItems.push(...writeOperations.map(wo => wo.transactItem));
        return this;
    }
    /**
     * execute the request and return the full reponse.
     */
    execFullResponse() {
        return this.dynamoDBWrapper.transactWriteItems(this.params);
    }
    /**
     * execute the request.
     */
    exec() {
        return this.dynamoDBWrapper.transactWriteItems(this.params)
            .then(response => { return; });
    }
}
//# sourceMappingURL=transact-write.request.js.map