-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
MeetingFee.cs
89 lines (72 loc) · 2.63 KB
/
MeetingFee.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
using System;
using CompanyName.MyMeetings.BuildingBlocks.Domain;
using CompanyName.MyMeetings.Modules.Payments.Domain.MeetingFees.Events;
using CompanyName.MyMeetings.Modules.Payments.Domain.Payers;
using CompanyName.MyMeetings.Modules.Payments.Domain.SeedWork;
namespace CompanyName.MyMeetings.Modules.Payments.Domain.MeetingFees
{
public class MeetingFee : AggregateRoot
{
private PayerId _payerId;
private MeetingId _meetingId;
private MoneyValue _fee;
private MeetingFeeStatus _status;
protected override void Apply(IDomainEvent @event)
{
this.When((dynamic)@event);
}
private MeetingFee()
{
}
public static MeetingFee Create(
PayerId payerId,
MeetingId meetingId,
MoneyValue fee)
{
var meetingFee = new MeetingFee();
var meetingFeeCreated = new MeetingFeeCreatedDomainEvent(
Guid.NewGuid(),
payerId.Value,
meetingId.Value,
fee.Value,
fee.Currency,
MeetingFeeStatus.WaitingForPayment.Code);
meetingFee.Apply(meetingFeeCreated);
meetingFee.AddDomainEvent(meetingFeeCreated);
return meetingFee;
}
public void MarkAsPaid()
{
var @event =
new MeetingFeePaidDomainEvent(
this.Id,
MeetingFeeStatus.Paid.Code);
this.Apply(@event);
this.AddDomainEvent(@event);
}
public MeetingFeeSnapshot GetSnapshot()
{
return new MeetingFeeSnapshot(this.Id, _payerId.Value, _meetingId.Value);
}
private void When(MeetingFeeCreatedDomainEvent meetingFeeCreated)
{
this.Id = meetingFeeCreated.MeetingFeeId;
_payerId = new PayerId(meetingFeeCreated.PayerId);
_meetingId = new MeetingId(meetingFeeCreated.MeetingId);
_fee = MoneyValue.Of(meetingFeeCreated.FeeValue, meetingFeeCreated.FeeCurrency);
_status = MeetingFeeStatus.Of(meetingFeeCreated.Status);
}
private void When(MeetingFeeCanceledDomainEvent meetingFeeCanceled)
{
_status = MeetingFeeStatus.Of(meetingFeeCanceled.Status);
}
private void When(MeetingFeeExpiredDomainEvent meetingFeeExpired)
{
_status = MeetingFeeStatus.Of(meetingFeeExpired.Status);
}
private void When(MeetingFeePaidDomainEvent meetingFeePaid)
{
_status = MeetingFeeStatus.Of(meetingFeePaid.Status);
}
}
}