Skip to content

Commit b5f6cdd

Browse files
committed
2 parents 75bbe0f + b9dd809 commit b5f6cdd

File tree

10 files changed

+19
-190
lines changed

10 files changed

+19
-190
lines changed

src/queries/failed-imports/render.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const renderFailedLinkings = (failedImports: ViewModel['failedImports']) =>
99
RA.map(
1010
item =>
1111
html`<li>
12-
<b>${item.memberNumber}</b> -- ${sanitizeString(item.email)}
12+
<b>${item.memberNumber}</b> ${sanitizeString(item.email)}
1313
</li>`
1414
),
1515
joinHtml,
Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
11
import {pipe} from 'fp-ts/lib/function';
2-
import {Dependencies} from '../../dependencies';
32
import * as TE from 'fp-ts/TaskEither';
43
import {FailureWithStatus} from '../../types/failure-with-status';
54
import {User} from '../../types/user';
65
import {ViewModel} from './view-model';
7-
import {readModels} from '../../read-models';
6+
import {SharedReadModel} from '../../read-models/shared-state';
87

98
export const constructViewModel =
10-
(deps: Dependencies) =>
9+
(sharedReadModel: SharedReadModel) =>
1110
(user: User): TE.TaskEither<FailureWithStatus, ViewModel> =>
1211
pipe(
13-
deps.getAllEvents(),
14-
TE.map(events => ({
15-
members: [
16-
...readModels.members.getAllDetailsAsActor(user)(events).values(),
17-
],
12+
TE.right(sharedReadModel.members.getAll()),
13+
TE.map(members => ({
14+
members,
1815
user,
1916
}))
2017
);

src/queries/members/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {safe, toLoggedInContent} from '../../types/html';
88
export const members: Query = deps => user =>
99
pipe(
1010
user,
11-
constructViewModel(deps),
11+
constructViewModel(deps.sharedReadModel),
1212
TE.map(render),
1313
TE.map(toLoggedInContent(safe('Members')))
1414
);

src/read-models/members/get-all.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
import * as RA from 'fp-ts/ReadonlyArray';
22
import {DomainEvent, isEventOfType, Actor, User} from '../../types';
33
import {pipe} from 'fp-ts/lib/function';
4-
import {MultipleMembers} from './return-types';
5-
import {replayState} from '../shared-state';
6-
import {redactDetailsForActor} from '../shared-state/member/redact';
74

85
export const getAll = (
96
events: ReadonlyArray<DomainEvent>
@@ -17,22 +14,10 @@ export const getAll = (
1714
}))
1815
);
1916

20-
export const getAllDetails = (
21-
events: ReadonlyArray<DomainEvent>
22-
): MultipleMembers => pipe(events, replayState, state => state.members);
23-
2417
export const liftActorOrUser = (actorOrUser: Actor | User) =>
2518
Actor.is(actorOrUser)
2619
? actorOrUser
2720
: {
2821
tag: 'user' as const,
2922
user: actorOrUser,
3023
};
31-
32-
export const getAllDetailsAsActor =
33-
(actorOrUser: Actor | User) => (events: ReadonlyArray<DomainEvent>) =>
34-
pipe(
35-
events,
36-
getAllDetails,
37-
redactDetailsForActor(liftActorOrUser(actorOrUser))
38-
);
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1+
import * as RA from 'fp-ts/ReadonlyArray';
12
import {pipe} from 'fp-ts/lib/function';
23
import {DomainEvent} from '../../types';
3-
import {replayState} from '../shared-state';
44
import {FailedLinking} from './failed-linking';
5+
import {isEventOfType} from '../../types';
56

67
export const getFailedImports = (
78
events: ReadonlyArray<DomainEvent>
89
): ReadonlyArray<FailedLinking> =>
910
pipe(
1011
events,
11-
replayState,
12-
state => state.failedImports,
13-
failedImports => Array.from(failedImports.values())
12+
RA.filter(
13+
isEventOfType('LinkingMemberNumberToAnAlreadyUsedEmailAttempted')
14+
),
15+
RA.map(({memberNumber, email}) => ({memberNumber, email}))
1416
);

src/read-models/members/index.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
import {getAll, getAllDetails, getAllDetailsAsActor} from './get-all';
1+
import {getAll} from './get-all';
22
import {lookupByEmail} from './lookup-by-email';
33
import {getFailedImports} from './get-failed-imports';
44

55
export const members = {
66
lookupByEmail,
77
getAll,
8-
getAllDetails,
9-
getAllDetailsAsActor,
108
getFailedImports,
119
};
1210

src/read-models/shared-state/async-refresh.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ import {pipe} from 'fp-ts/lib/function';
55
import {DomainEvent} from '../../types';
66
import * as TE from 'fp-ts/TaskEither';
77

8+
function payloadToString(payload: unknown): string {
9+
return JSON.stringify(payload);
10+
}
11+
812
export const asyncRefresh = (
913
eventStoreDb: Client,
1014
updateState: (event: DomainEvent) => void
@@ -15,7 +19,7 @@ export const asyncRefresh = (
1519
getAllEvents(eventStoreDb)(),
1620
TE.getOrElse(failure => {
1721
throw new Error(
18-
`unexpected Left from getAllEvents: ${failure.message}`
22+
`unexpected Left from getAllEvents: ${failure.message} ${payloadToString(failure.payload)}`
1923
);
2024
})
2125
)();

src/read-models/shared-state/deprecated-replay.ts

Lines changed: 0 additions & 108 deletions
This file was deleted.

src/read-models/shared-state/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ import {Dependencies} from '../../dependencies';
2424
import {dumpCurrentState, SharedDatabaseDump} from './debug/dump';
2525
import {getAllTroubleTicketFull} from './troubletickets/get';
2626

27-
export {replayState} from './deprecated-replay';
28-
2927
export type SharedReadModel = {
3028
db: BetterSQLite3Database;
3129
_underlyingReadModelDb: Database.Database; // This is exposed only to allow debug serialisation of the db.

src/read-models/shared-state/state.ts

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,6 @@ import {EmailAddress, GravatarHash} from '../../types';
33
import * as O from 'fp-ts/Option';
44
import {blob, integer, sqliteTable, text} from 'drizzle-orm/sqlite-core';
55

6-
type TrainedOn = {
7-
id: Equipment['id'];
8-
trainedAt: Date;
9-
};
10-
116
export const membersTable = sqliteTable('members', {
127
memberNumber: integer('memberNumber').notNull().primaryKey(),
138
emailAddress: text('emailAddress').notNull().$type<EmailAddress>(),
@@ -203,45 +198,3 @@ export const createTables = [
203198
createTrainingQuizTable,
204199
createTroubleTicketResponsesTable,
205200
];
206-
207-
type Member = {
208-
trainedOn: ReadonlyArray<TrainedOn>;
209-
memberNumber: number;
210-
emailAddress: EmailAddress;
211-
prevEmails: ReadonlyArray<EmailAddress>;
212-
name: O.Option<string>;
213-
formOfAddress: O.Option<string>;
214-
agreementSigned: O.Option<Date>;
215-
isSuperUser: boolean;
216-
gravatarHash: GravatarHash;
217-
};
218-
219-
type Area = {
220-
id: string;
221-
owners: Set<number>;
222-
};
223-
224-
type Equipment = {
225-
id: string;
226-
name: string;
227-
areaId: Area['id'];
228-
};
229-
230-
type FailedLinking = {
231-
memberNumber: number;
232-
email: string;
233-
};
234-
235-
export type State = {
236-
members: Map<Member['memberNumber'], Member>;
237-
areas: Map<Area['id'], Area>;
238-
equipment: Map<Equipment['id'], Equipment>;
239-
failedImports: Set<FailedLinking>;
240-
};
241-
242-
export const emptyState = (): State => ({
243-
members: new Map(),
244-
areas: new Map(),
245-
equipment: new Map(),
246-
failedImports: new Set(),
247-
});

0 commit comments

Comments
 (0)