Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ internal static DistributedTransactionOperationResult FromJson(JsonElement json)
{
DistributedTransactionOperationResult result = JsonSerializer.Deserialize<DistributedTransactionOperationResult>(json, DistributedTransactionOperationResult.CaseInsensitiveOptions);

if (json.TryGetProperty("resourceBody", out JsonElement resourceBody)
if (json.TryGetProperty(DistributedTransactionSerializer.ResourceBody, out JsonElement resourceBody)
&& resourceBody.ValueKind != JsonValueKind.Undefined
&& resourceBody.ValueKind != JsonValueKind.Null)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,20 @@ namespace Microsoft.Azure.Cosmos
/// </summary>
internal static class DistributedTransactionSerializer
{
internal const string Operations = "operations";
internal const string DatabaseName = "databaseName";
internal const string CollectionName = "collectionName";
internal const string Id = "id";
internal const string CollectionResourceId = "collectionResourceId";
internal const string DatabaseResourceId = "databaseResourceId";
internal const string PartitionKey = "partitionKey";
internal const string Index = "index";
internal const string ResourceBody = "resourceBody";
internal const string SessionToken = "sessionToken";
internal const string ETag = "ifMatch";
Comment thread
kushagraThapar marked this conversation as resolved.
internal const string OperationType = "operationType";
internal const string ResourceType = "resourceType";

/// <summary>
/// Serializes a distributed transaction request body to a JSON stream.
/// The body contains only the operations array. Other metadata like idempotencyToken,
Expand All @@ -32,7 +46,7 @@ public static MemoryStream SerializeRequest(IReadOnlyList<DistributedTransaction
jsonWriter.WriteStartObject();

// operations array
jsonWriter.WriteStartArray("operations");
jsonWriter.WriteStartArray(Operations);

foreach (DistributedTransactionOperation operation in operations)
{
Expand All @@ -58,30 +72,30 @@ private static void WriteOperation(Utf8JsonWriter jsonWriter, DistributedTransac
jsonWriter.WriteStartObject();

// databaseName
jsonWriter.WriteString("databaseName", operation.Database);
jsonWriter.WriteString(DatabaseName, operation.Database);

// collectionName
jsonWriter.WriteString("collectionName", operation.Container);
jsonWriter.WriteString(CollectionName, operation.Container);

// id
jsonWriter.WriteString("id", operation.Id);
jsonWriter.WriteString(Id, operation.Id);

// collectionResourceId
if (operation.CollectionResourceId != null)
{
jsonWriter.WriteString("collectionResourceId", operation.CollectionResourceId);
jsonWriter.WriteString(CollectionResourceId, operation.CollectionResourceId);
}

// databaseResourceId
if (operation.DatabaseResourceId != null)
{
jsonWriter.WriteString("databaseResourceId", operation.DatabaseResourceId);
jsonWriter.WriteString(DatabaseResourceId, operation.DatabaseResourceId);
}

// partitionKey
if (operation.PartitionKeyJson != null)
{
jsonWriter.WritePropertyName("partitionKey");
jsonWriter.WritePropertyName(PartitionKey);
jsonWriter.WriteRawValue(operation.PartitionKeyJson, skipInputValidation: true);
}

Expand All @@ -90,32 +104,31 @@ private static void WriteOperation(Utf8JsonWriter jsonWriter, DistributedTransac
{
throw new ArgumentOutOfRangeException(nameof(operation.OperationIndex), "Operation index must be non-negative.");
}
jsonWriter.WriteNumber("index", (uint)operation.OperationIndex);
jsonWriter.WriteNumber(Index, (uint)operation.OperationIndex);

//resourceBody - written as nested JSON object
if (!operation.ResourceBody.IsEmpty)
{
jsonWriter.WritePropertyName("resourceBody");
jsonWriter.WritePropertyName(ResourceBody);
jsonWriter.WriteRawValue(operation.ResourceBody.Span, skipInputValidation: true);
}

// sessionToken
if (operation.SessionToken != null)
{
jsonWriter.WriteString("sessionToken", operation.SessionToken);
jsonWriter.WriteString(SessionToken, operation.SessionToken);
}

// etag
if (operation.ETag != null)
{
jsonWriter.WriteString("etag", operation.ETag);
jsonWriter.WriteString(ETag, operation.ETag);
}

// operationType (string)
jsonWriter.WriteString("operationType", operation.OperationType.ToString());

jsonWriter.WriteString(OperationType, operation.OperationType.ToString());
// resourceType (string)
jsonWriter.WriteString("resourceType", ResourceType.Document.ToString());
jsonWriter.WriteString(ResourceType, Documents.ResourceType.Document.ToString());

jsonWriter.WriteEndObject();
}
Expand Down
Loading
Loading