forget me please? event sourcing & the gdpr · read cqrs / event sourcing theory followed a...

135
FORGET ME PLEASE? EVENT SOURCING & THE GDPR Michiel Rook - @michieltcs

Upload: others

Post on 30-Jun-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

FORGET ME PLEASE?EVENT SOURCING & THE GDPR

Michiel Rook - @michieltcs

Page 2: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

DISCLAIMER: I AM NOT A LAWYER

Page 3: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

GDPR

Page 4: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

GENERAL DATA PROTECTION REGULATION

Page 5: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

' Regulation (EU) 2016/679 of the European Parliament and of the Council of 27 April 2016 on the protection of natural persons with regard to the processing of personal data and on the free movement of such data, and repealing Directive 95/46/EC (Data Protection Directive)

-General Data Protection Regulation

Page 6: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

A SHORT HISTORY

Page 7: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

1995

Data Protection Directive

Page 8: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

1995

Data Protection Directive

2012

GDPR proposal

Page 9: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

1995

Data Protection Directive

2012

GDPR proposal

2016

GDPR adopted

Page 10: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

1995

Data Protection Directive

2012

GDPR proposal

2016

GDPR adopted

25 May 2018

GDPR enforceable

Page 11: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

REGULATION

Page 12: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

PROTECTS EU CITIZENS

Page 13: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

DATA PROTECTION ACT

Page 14: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

BROAD & VAGUE

Page 15: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

PRIVACY BY DESIGN

Page 16: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

' The controller shall implement appropriate technical and organisational measures for ensuring that, by default, only personal data which are necessary for each specific purpose of the processing are processed. -GDPR, Article 25

Page 17: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

DATA PROTECTION OFFICER

Page 18: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

SUPERVISORY AUTHORITY

Page 19: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

FINES

Page 20: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

€20 MILLION OR 4% OF ANNUAL TURNOVER

Page 21: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

YOU

Page 22: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

RAISE YOUR HAND

IF YOU HAVE

Page 23: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

read CQRS / Event Sourcing theory

RAISE YOUR HAND

IF YOU HAVE

Page 24: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

read CQRS / Event Sourcing theory

followed a tutorial, built a hobby project

RAISE YOUR HAND

IF YOU HAVE

Page 25: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

read CQRS / Event Sourcing theory

followed a tutorial, built a hobby project

used it in production

RAISE YOUR HAND

IF YOU HAVE

Page 26: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

Axon Framework Spring Boot

Page 27: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

QUICK RECAP CQRS + EVENT SOURCING

Page 28: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

CQRS

Page 29: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

COMMAND QUERY RESPONSIBILITY

SEGREGATION

Page 30: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

STORAGE SIDEVS.

QUERY SIDE

Page 31: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

UI

@michieltcs

Page 32: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

Domain

UI

Command

commands

Aggregates

@michieltcs

Page 33: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

Domain

UI

Command

Repository

Event Store

commands

events

Aggregates

@michieltcs

Page 34: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

Domain

UI

Event Bus

Event Handlers

Command

Repository

Database Database

Event Store

commands

events

events

Aggregates

@michieltcs

Page 35: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

Domain

UI

Event Bus

Event Handlers

Command

Repository

Data Layer

Database Database

Event Store

commands

events

events

queries DTOs

Aggregates

@michieltcs

Page 36: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

EVENT SOURCING

Page 37: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

' Event Sourcing ensures that all changes to application state are stored as a sequence of events.

-Martin Fowler

Page 38: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

ACTIVE RECORD VS. EVENT SOURCING

Account Id Account number Balance1234 12345678 �50,00

... ... ...

Money WithdrawnAccount Id 1234

Amount �50,00

Money DepositedAccount Id 1234

Amount �100,00

Account OpenedAccount Id 1234

Account number 12345678

@michieltcs

Page 39: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

COMMANDS TO EVENTS

Deposit MoneyAccount Id 1234

Amount �100,00

@michieltcs

1 @Value 2 public class DepositMoney { 3 @TargetAggregateIdentifier 4 String accountId; 5 BigDecimal amount; 6 }

Page 40: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

COMMANDS TO EVENTS

Deposit MoneyAccount Id 1234

Amount �100,00command handler

@michieltcs

1 @CommandHandler 2 public void depositMoney(DepositMoney command) { 3 apply(new MoneyDeposited( 4 command.getAccountId(), 5 command.getAmount(), 6 ZonedDateTime.now())); 7 }

Page 41: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

COMMANDS TO EVENTS

Deposit MoneyAccount Id 1234

Amount �100,00

Money DepositedAccount Id 1234

Amount �100,00command handler

@michieltcs

1 @Value 2 public class MoneyDeposited { 3 String accountId; 4 BigDecimal amount; 5 ZonedDateTime timestamp; 6 }

Page 42: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

AGGREGATES

@michieltcs

an Aggregate handles Commands and generates Events based on the current state

Page 43: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

AGGREGATES

@michieltcs

1 class BankAccount { 2 @AggregateIdentifier 3 private String accountId; 4 private String accountNumber; 5 private BigDecimal balance; 6 7 // ... 8 @EventHandler 9 public void accountOpened(AccountOpened event) { 10 this.accountId = event.getAccountId(); 11 this.accountNumber = event.getAccountNumber(); 12 this.balance = BigDecimal.valueOf(0); 13 } 14 15 @EventHandler 16 public void moneyDeposited(MoneyDeposited event) { 17 this.balance = this.balance.add(event.getAmount()); 18 } 19 }

Page 44: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

AGGREGATE STATE

Account number Balance12345678 �0,00

Account number Balance12345678 �100,00

Account number Balance12345678 �50,00

event handler

event handler

event handler

@michieltcs

Money WithdrawnAccount Id 1234

Amount �50,00

Money DepositedAccount Id 1234

Amount �100,00

Account OpenedAccount Id 1234

Account number 12345678

Page 45: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

VALIDATING COMMANDS

@michieltcs

1 @CommandHandler 2 public void withdrawMoney(WithdrawMoney command) throws 3 OverdraftDetectedException { 4 if (balance.compareTo(command.getAmount()) >= 0) { 5 apply(new MoneyWithdrawn( 6 command.getAccountId(), 7 command.getAmount(), 8 ZonedDateTime.now())); 9 } else { 10 throw new OverdraftDetectedException(accountNumber, balance, command. 11 getAmount()); 12 } 13 }

Page 46: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

TESTING AGGREGATES

@michieltcs

1 public class BankAccountTest { 2 private FixtureConfiguration<BankAccount> fixture; 3 4 @Before 5 public void createFixture() { 6 fixture = new AggregateTestFixture<>(BankAccount.class); 7 } 8 9 @Test 10 public void noOverdraftsOnEmptyAccount() { 11 fixture.given(new AccountOpened(ACCOUNT_ID, ACCOUNT_NUMBER)) 12 .when(new WithdrawMoney(ACCOUNT_ID, new BigDecimal(20))) 13 .expectException(OverdraftDetectedException.class); 14 } 15 16 private final static String ACCOUNT_ID = "accountId"; 17 private final static String ACCOUNT_NUMBER = "accountNumber"; 18 }

Page 47: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

EVENT SOURCING& GDPR

Page 48: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

CONSENT

Page 49: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

' Where processing is based on consent, the controller shall be able to demonstrate that the data subject has consented to processing of his or her personal data.

-GDPR, Article 7

Page 50: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

REGISTERING CONSENT

Page 51: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

' ...the request for consent shall be presented in a manner which is clearly distinguishable from the other matters...

-GDPR, Article 7

Page 52: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

REVOKING CONSENT

Page 53: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

' The data subject shall have the right to withdraw his or her consent at any time. ... It shall be as easy to withdraw as to give consent.

-GDPR, Article 7

Page 54: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

WHY USE EVENT SOURCING / CQRS?

Page 55: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

CAPTURE INTENT

Page 56: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

DEMONSTRATING CONSENT

Page 57: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

EVENT LOGAS AUDIT LOG

Page 58: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

NEW READ MODELS

Page 59: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

EASIER DEBUGGING

Page 60: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

EVENT LOG AS AUDIT LOG

@michieltcs

ConsentedToNewsletters

Page 61: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

EVENT LOG AS AUDIT LOG

@michieltcs

ConsentedToNewsletters

ConsentedToDataGathering

Page 62: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

EVENT LOG AS AUDIT LOG

@michieltcs

ConsentedToNewsletters

ConsentedToDataGathering

RevokedConsentToNewsletters

Page 63: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

"RIGHT TO ACCESS"

Page 64: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

' The data subject shall have the right to obtain from the controller confirmation as to whether or not personal data ... are being processed, and ... access to the personal data ...

-GDPR, Article 15

Page 65: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

"RIGHT TO ERASURE"

Page 66: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

' The data subject shall have the right to obtain from the controller the erasure of personal data concerning him or her without undue delay

-GDPR, Article 17

Page 67: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

PERSONALLY IDENTIFIABLE INFORMATION

Page 68: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

' ‘personal data’ means any information relating to an identified or identifiable natural person; an identifiable natural person is one who can be identified, directly or indirectly

-GDPR, Article 4

Page 69: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

GROUNDS

Page 70: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

' .. the personal data are no longer necessary .. the data subject withdraws consent on which the processing is based 

-GDPR, Article 17

Page 71: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

EXCEPTIONS

Page 72: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

' .. to comply with a legal obligation .. for the establishment, exercise or defence of legal claims (*)

-GDPR, Article 17

Page 73: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

UNDUE DELAY

Page 74: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

INFORM 3RD PARTIES

Page 75: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

BACKUPS?

Page 76: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

PROCESSING GDPR ART. 17 REQUESTS

@michieltcs

RightToErasureInvoked

Page 77: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

PROCESSING GDPR ART. 17 REQUESTS

@michieltcs

RightToErasureInvoked

Notify 3rd parties

Page 78: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

PROCESSING GDPR ART. 17 REQUESTS

@michieltcs

RightToErasureInvoked

Remove from read

models

Notify 3rd parties

Page 79: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

PROCESSING GDPR ART. 17 REQUESTS

@michieltcs

RightToErasureInvoked

Remove from event

store

Remove from read

models

Notify 3rd parties

Page 80: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

PROCESSING GDPR ART. 17 REQUESTS

@michieltcs

RightToErasureInvoked

Remove from event

store

?

Remove from read

models

Notify 3rd parties

Page 81: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

IMMUTABLE EVENTS?

Page 82: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

COMPENSATING ACTIONS

Page 83: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

@michieltcs

Ledger EntryAug 14 Inventory �15600,00

Accounts Payable �15600,00

Page 84: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

@michieltcs

Ledger EntryAug 14 Inventory �15600,00

Accounts Payable �15600,00

Ledger EntryAug 14 Inventory �16500,00

Accounts Payable �16500,00

Page 85: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

@michieltcs

Ledger EntryAug 14 Inventory �15600,00

Accounts Payable �15600,00

Ledger EntryAug 14 Inventory �16500,00

Accounts Payable �16500,00

Ledger Correction EntryAug 14 Inventory �900,00

Accounts Payable �900,00

Page 86: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

COMPENSATING ACTIONS

class MoneyWithdrawn { String accountId; BigDecimal amount; }

class WithdrawalRolledBack { String accountId; BigDecimal amount; }

Typo: too much withdrawn!

Page 87: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

COMPENSATING ACTIONS

class AccountOpened { String accountId; String accountNumber; }

class DuplicateAccountClosed { String accountId; }

Duplicate account number!

Page 88: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

GDPR?

Page 89: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

STRATEGIES

Page 90: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

ONLY REMOVE FROM PROJECTION?

Page 91: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

LEGAL DEFENCE?

Page 92: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

' .. adequate, relevant and limited to what is necessary in relation to the purposes for which they are processed (‘data minimisation’)

-GDPR, Article 5

Page 93: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

UPCASTING?

Page 94: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

UPCASTING

Event Store

Event_V1

Upcaster

Event_V2

Event Handler

@michieltcs

Page 95: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

UPCASTING

Event Store

Event_V1

Upcaster

Event_V2

Event Handler

@michieltcs

Event_V2 = f(Event_V1)

Page 96: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

UPCASTING

Event Store

Event_V1

Upcaster

Event_V2

Event Handler

@michieltcs

Event_V2 = f(Event_V1)

Page 97: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

DELETING EVENTS

Page 98: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

DELETING EVENTS

Page 99: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

MODIFYING EVENTS

Page 100: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

MODIFYING EVENTS

Page 101: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

COPY & FILTER

Page 102: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

VERSIONED EVENT STORE

Page 103: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

VERSIONED EVENT STORE

events_v1

[ { "id": "12345678", "type": "AccountOpened", "aggregateType": "Account", "aggregateIdentifier": "1234", "sequenceNumber": 0, "payloadRevision": "1.0", "payload": { ... }, "timestamp": ... ... }, ... ]

@michieltcs

Page 104: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

COPY & REPLACE

Page 105: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

VERSIONED EVENT STORE

Loop over existing events

Apply upcaster

Add queued events

Use new event store

New events Queue

@michieltcs

Page 106: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

VERSIONED EVENT STORE

events_v2

[ { "id": "12345678", "type": "AccountOpened", "aggregateType": "Account", "aggregateIdentifier": "1234", "sequenceNumber": 0, "payloadRevision": "2.0", "payload": { ... }, "timestamp": ... ... }, ... ]

@michieltcs

Page 107: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

STORE PII EXTERNALLY

Page 108: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

STORE PII EXTERNALLY

@michieltcs

1 @Value 2 public class AccountOpened { 3 String accountId; 4 String accountNumber; 5 String name; 6 }

Page 109: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

STORE PII EXTERNALLY

@michieltcs

1 @Value 2 public class AccountOpened { 3 String accountId; 4 }

Page 110: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

STORE PII EXTERNALLY

@michieltcs

AccountOpened External Storage

1 @Value 2 public class AccountOpened { 3 String accountId; 4 }

Account Id Account number Name1234 12345678 John Doe

... ... ...

Page 111: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

STORE PII EXTERNALLY

@michieltcs

AccountOpened External Storage

1 @Value 2 public class AccountOpened { 3 String accountId; 4 }

Account Id Account number Name1234 12345678 ANON

... ... ...

Page 112: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

STORE PII EXTERNALLY

@michieltcs

AccountOpened External Storage

1 @Value 2 public class AccountOpened { 3 String accountId; 4 }

Account Id Account number Name1234 12345678 ANON

... ... ...

Page 113: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

CRYPTO ERASURE

Page 114: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

ENCRYPT EVENTS

Page 115: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

DECRYPT EVENTS

Page 116: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

ENCRYPT FIELD VALUES

Page 117: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

DECRYPT FIELD VALUES

Page 118: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

ENCRYPTING EVENTS

@michieltcs

<org.demo.AccountOpened> <accountId>80f49161</accountId> <accountNumberIban>NL00ABNA012345678</accountNumberIban> <firstName>Foo</firstName> <lastName>Bar</lastName> ... </org.demo.AccountOpened>

Page 119: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

ENCRYPTING EVENTS

@michieltcs

<org.demo.AccountOpened> <accountId>80f49161</accountId> <accountNumberIban>2dqjHkY8Mc8+cek4vs/9hzgkob4J3fZJNIJh2sAXlJ0=</accountNumberIban> <firstName>N5Y27vd0UbKo6FIu5c7QGQ==</firstName> <lastName>OSKrzfuuuayuUNXYS5YUug==</lastName> ... </org.demo.AccountOpened>

Page 120: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

ENCRYPTING EVENTS

Generate event

Find / create

encryption key

Encrypt payload values

Storeevent

@michieltcs

Page 121: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

DECRYPTING EVENTS

Loadevent

Find associatedencryption

key

Decrypt payload values

Processevent

@michieltcs

Page 122: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

SHEDDING THE KEY

Loadevent

Find associatedencryption

key

Decrypt payload values

Processevent

@michieltcs

X

Page 123: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

AXON GDPR MODULE

@michieltcs

1 @Value 2 public class AccountOpened { 3 @DataSubjectId 4 String accountId; 5 6 @PersonalData 7 String accountNumberIban; 8 9 @PersonalData 10 String firstName; 11 12 @PersonalData 13 String lastName; 14 }

Page 124: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

KEY MANAGEMENT

Page 125: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

PERFORMANCE

Page 126: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

RE-ENCRYPT DATA AT REST

Page 127: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

CLOSING WORDS

Page 128: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

GDPR

Page 129: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

CHALLENGES

Page 130: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

FRAMEWORK SUPPORT

Page 131: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

(IM)MUTABILITY

Page 132: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

AUDIT TRAIL

Page 133: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

DEMONSTRATING CONSENT

Page 134: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

FUTURE?

Page 135: FORGET ME PLEASE? EVENT SOURCING & THE GDPR · read CQRS / Event Sourcing theory followed a tutorial, built a hobby project used it in production RAISE YOUR HAND IF YOU HAVE. Axon

THANK YOU!@michieltcs / [email protected]

www.michielrook.nl