Skip to content

Commit 91f12e1

Browse files
committed
Add command to add an email to a member
1 parent 1bf35ae commit 91f12e1

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

src/commands/members/add-email.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import {constructEvent, EmailAddressCodec} from '../../types';
2+
import * as t from 'io-ts';
3+
import * as tt from 'io-ts-types';
4+
import * as O from 'fp-ts/Option';
5+
import {Command} from '../command';
6+
import { isSelfOrPrivileged } from '../is-self-or-privileged';
7+
8+
const codec = t.strict({
9+
memberNumber: tt.NumberFromString,
10+
email: EmailAddressCodec,
11+
});
12+
13+
type AddEmail = t.TypeOf<typeof codec>;
14+
15+
const process: Command<AddEmail>['process'] = input =>
16+
O.some(
17+
constructEvent('MemberEmailAdded')({
18+
memberNumber: input.command.memberNumber,
19+
newEmail: input.command.email,
20+
actor: input.command.actor,
21+
})
22+
);
23+
24+
const resource: Command<AddEmail>['resource'] = input => ({
25+
type: 'MemberDetails',
26+
id: input.memberNumber.toString(),
27+
});
28+
29+
export const addEmail: Command<AddEmail> = {
30+
process,
31+
resource,
32+
decode: codec.decode,
33+
isAuthorized: isSelfOrPrivileged,
34+
};

src/types/domain-event.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,11 @@ const MemberEmailChanged = defineEvent('MemberEmailChanged', {
168168
newEmail: EmailAddressCodec,
169169
});
170170

171+
const MemberEmailAdded = defineEvent('MemberEmailAdded', {
172+
memberNumber: t.number,
173+
newEmail: EmailAddressCodec,
174+
});
175+
171176
const RecurlySubscriptionUpdated = defineEvent('RecurlySubscriptionUpdated', {
172177
email: EmailAddressCodec,
173178
hasActiveSubscription: t.boolean,
@@ -219,6 +224,7 @@ export const events = [
219224
MemberTrainedOnEquipmentBy,
220225
RevokeTrainedOnEquipment,
221226
MemberEmailChanged,
227+
MemberEmailAdded,
222228
EquipmentTrainingQuizMemberNumberUpdated,
223229
EquipmentTrainingQuizEmailUpdated,
224230
TroubleTicketResponseSubmitted,
@@ -250,6 +256,7 @@ export const DomainEvent = t.union([
250256
MemberTrainedOnEquipmentBy.codec,
251257
RevokeTrainedOnEquipment.codec,
252258
MemberEmailChanged.codec,
259+
MemberEmailAdded.codec,
253260
EquipmentTrainingQuizMemberNumberUpdated.codec,
254261
EquipmentTrainingQuizEmailUpdated.codec,
255262
TroubleTicketResponseSubmitted.codec,

0 commit comments

Comments
 (0)