 1 package buckpal.application.domain.model;
 2
 3 public class Account {
 4
 5   private AccountId id;
 6   private Money baselineBalance;
 7   private ActivityWindow activityWindow;
 8
 9   // Pominięcie konstruktorów i metod typu getter
10
11   public Money calculateBalance() {
12     return Money.add(
13             this.baselineBalance,
14             this.activityWindow.calculateBalance(this.id));
15   }
16
17   public boolean withdraw(Money money, AccountId targetAccountId) {
18     if (!mayWithdraw(money)) {
19       return false;
20     }
21
22     Activity withdrawal = new Activity(
25         this.id,
24         this.id,
25         targetAccountId,
26         LocalDateTime.now(),
27         money);
28     this.activityWindow.addActivity(withdrawal);
29     return true;
30   }
31
32   private boolean mayWithdraw(Money money) {
33     return Money.add(
34         this.calculateBalance(),
35         money.negate())
36         .isPositive();
37   }
38
39   public boolean deposit(Money money, AccountId sourceAccountId) {
40     Activity deposit = new Activity(
41         this.id,
42         sourceAccountId,
43         this.id,
44         LocalDateTime.now(),
45         money);
46     this.activityWindow.addActivity(deposit);
47     return true;
48   }
49 }
