-
Notifications
You must be signed in to change notification settings - Fork 30
/
Copy pathAbstractions.cs
62 lines (51 loc) · 1.72 KB
/
Abstractions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System.Runtime.Serialization;
using MemoryPack;
using Newtonsoft.Json;
namespace Samples.HelloCart;
[DataContract, MemoryPackable]
public partial record Product : IHasId<string>
{
[DataMember] public string Id { get; init; } = "";
[DataMember] public decimal Price { get; init; } = 0;
}
[DataContract, MemoryPackable]
public partial record Cart : IHasId<string>
{
[DataMember] public string Id { get; init; } = "";
[DataMember] public ImmutableDictionary<string, decimal> Items { get; init; } = ImmutableDictionary<string, decimal>.Empty;
}
[DataContract, MemoryPackable]
public partial record EditCommand<TItem> : ICommand<Unit>
where TItem : class, IHasId<string>
{
[DataMember] public string Id { get; init; }
[DataMember] public TItem? Item { get; init; }
public EditCommand(TItem value) : this(value.Id, value) { }
[JsonConstructor, MemoryPackConstructor]
public EditCommand(string id, TItem item)
{
Id = id;
Item = item;
}
public void Deconstruct(out string id, out TItem? item)
{
id = Id;
item = Item;
}
}
public interface IProductService: IComputeService
{
[ComputeMethod]
Task<Product?> Get(string id, CancellationToken cancellationToken = default);
[CommandHandler]
Task Edit(EditCommand<Product> command, CancellationToken cancellationToken = default);
}
public interface ICartService: IComputeService
{
[ComputeMethod]
Task<Cart?> Get(string id, CancellationToken cancellationToken = default);
[ComputeMethod]
Task<decimal> GetTotal(string id, CancellationToken cancellationToken = default);
[CommandHandler]
Task Edit(EditCommand<Cart> command, CancellationToken cancellationToken = default);
}