Skip to content
This repository was archived by the owner on Jan 27, 2022. It is now read-only.

Commit 0ac1504

Browse files
iscottb122Iain Scott
authored andcommitted
Remove Id setter from ValueObjectDocument.
1 parent 734edcb commit 0ac1504

3 files changed

Lines changed: 13 additions & 17 deletions

File tree

src/Winton.DomainModelling.DocumentDb/ValueObjectDocument.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,25 @@ namespace Winton.DomainModelling.DocumentDb
99
internal sealed class ValueObjectDocument<TValueObject>
1010
where TValueObject : struct, IEquatable<TValueObject>
1111
{
12-
public ValueObjectDocument(TValueObject valueObject)
12+
[JsonConstructor]
13+
private ValueObjectDocument(TValueObject valueObject, string id)
1314
{
1415
ValueObject = valueObject;
16+
Id = id;
1517
}
1618

1719
[JsonProperty(PropertyName = "id")]
18-
public string Id { get; set; }
20+
public string Id { get; }
1921

2022
public string Type => GetDocumentType();
2123

2224
public TValueObject ValueObject { get; }
2325

26+
public static ValueObjectDocument<TValueObject> Create(TValueObject valueObject)
27+
{
28+
return new ValueObjectDocument<TValueObject>(valueObject, null);
29+
}
30+
2431
public static string GetDocumentType()
2532
{
2633
return typeof(TValueObject).Name;

src/Winton.DomainModelling.DocumentDb/ValueObjectFacade.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public async Task Create<TValueObject>(TValueObject valueObject)
6161

6262
if (document == null)
6363
{
64-
document = new ValueObjectDocument<TValueObject>(valueObject);
64+
document = ValueObjectDocument<TValueObject>.Create(valueObject);
6565

6666
await _documentClient.CreateDocumentAsync(GetUri(), document);
6767
}

test/Winton.DomainModelling.DocumentDb.Tests/ValueObjectDocumentTests.cs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -58,24 +58,13 @@ public sealed class Id : ValueObjectDocumentTests
5858
private void ShouldDefaultToNull()
5959
{
6060
var valueObject = new TestValueObject("A");
61-
var document = new ValueObjectDocument<TestValueObject>(valueObject);
61+
ValueObjectDocument<TestValueObject> document = ValueObjectDocument<TestValueObject>.Create(valueObject);
6262

6363
string id = document.Id;
6464

6565
id.Should().BeNull();
6666
}
6767

68-
[Fact]
69-
private void ShouldReturnSetId()
70-
{
71-
var valueObject = new TestValueObject("A");
72-
var document = new ValueObjectDocument<TestValueObject>(valueObject) { Id = "1" };
73-
74-
string id = document.Id;
75-
76-
id.Should().Be("1");
77-
}
78-
7968
[Fact]
8069
private void ShouldSerializePropertyNameAsLowercase()
8170
{
@@ -91,7 +80,7 @@ public sealed class Type : EntityDocumentTests
9180
private void ShouldReturnEntityType()
9281
{
9382
var valueObject = new TestValueObject("A");
94-
var document = new ValueObjectDocument<TestValueObject>(valueObject);
83+
ValueObjectDocument<TestValueObject> document = ValueObjectDocument<TestValueObject>.Create(valueObject);
9584

9685
string type = document.Type;
9786

@@ -105,7 +94,7 @@ public sealed class ValueObject : ValueObjectDocumentTests
10594
private void ShouldReturnValueObject()
10695
{
10796
var expected = new TestValueObject("A");
108-
var document = new ValueObjectDocument<TestValueObject>(expected);
97+
ValueObjectDocument<TestValueObject> document = ValueObjectDocument<TestValueObject>.Create(expected);
10998

11099
TestValueObject valueObject = document.ValueObject;
111100

0 commit comments

Comments
 (0)