Skip to content

Commit

Permalink
Mark member trained form
Browse files Browse the repository at this point in the history
  • Loading branch information
Lan2u committed Sep 20, 2024
1 parent c4e6cb1 commit 68c1c31
Show file tree
Hide file tree
Showing 10 changed files with 24 additions and 239 deletions.
29 changes: 18 additions & 11 deletions src/commands/trainers/mark-member-trained-form.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
import {pipe} from 'fp-ts/lib/function';
import * as E from 'fp-ts/Either';
import * as O from 'fp-ts/Option';
import {html, safe, sanitizeString} from '../../types/html';
import {User} from '../../types';
import {Form} from '../../types/form';
import {pageTemplate} from '../../templates';
import {getEquipmentName} from '../equipment/get-equipment-name';
import {getEquipmentIdFromForm} from '../equipment/get-equipment-id-from-form';
import {UUID} from 'io-ts-types';
import {memberInput} from '../../templates/member-input';
import {readModels} from '../../read-models';
import {Member} from '../../read-models/members';
import {Equipment} from '../../read-models/shared-state/return-types';
import {failureWithStatus} from '../../types/failure-with-status';
import {StatusCodes} from 'http-status-codes';

type ViewModel = {
user: User;
equipmentId: UUID;
equipmentName: string;
equipment: Equipment;
members: ReadonlyArray<Member>;
};

Expand All @@ -25,13 +26,13 @@ const renderForm = (viewModel: ViewModel) =>
pipe(
html`
<h1>
Mark a member as trained on ${sanitizeString(viewModel.equipmentName)}
Mark a member as trained on ${sanitizeString(viewModel.equipment.name)}
</h1>
<form action="/equipment/mark-member-trained" method="post">
<input
type="hidden"
name="equipmentId"
value="${viewModel.equipmentId}"
value="${viewModel.equipment.id}"
/>
${memberInput(viewModel.members)}
<button type="submit">Confirm</button>
Expand All @@ -42,14 +43,20 @@ const renderForm = (viewModel: ViewModel) =>

const constructForm: Form<ViewModel>['constructForm'] =
input =>
({events, user}) =>
({events, user, readModel}) =>
pipe(
{user},
E.right,
E.bind('equipmentId', () => getEquipmentIdFromForm(input)),
E.bind('equipmentName', ({equipmentId}) =>
getEquipmentName(events, equipmentId)
),
E.bind('equipment_id', () => getEquipmentIdFromForm(input)),
E.bind('equipment', ({equipment_id}) => {
const equipment = readModel.equipment.get(equipment_id);
if (O.isNone(equipment)) {
return E.left(
failureWithStatus('Unknown equipment', StatusCodes.NOT_FOUND)()
);
}
return E.right(equipment.value);
}),
E.let('members', () => {
const memberDetails = readModels.members.getAllDetails(events);
return [...memberDetails.values()];
Expand Down
2 changes: 1 addition & 1 deletion src/http/form-get.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export const formGet =
events: deps.getAllEvents(),
},
sequenceS(TE.ApplyPar),
TE.let('readModelDb', () => deps.sharedReadModel.db),
TE.let('readModel', () => deps.sharedReadModel),
TE.chainEitherK(form.constructForm({...req.query, ...req.params})),
TE.map(form.renderForm),
TE.matchW(
Expand Down
38 changes: 0 additions & 38 deletions src/read-models/equipment/get-all.ts

This file was deleted.

19 changes: 0 additions & 19 deletions src/read-models/equipment/get-for-area.ts

This file was deleted.

45 changes: 0 additions & 45 deletions src/read-models/equipment/get-trained-on.ts

This file was deleted.

18 changes: 0 additions & 18 deletions src/read-models/equipment/get-training-sheet-id.ts

This file was deleted.

91 changes: 0 additions & 91 deletions src/read-models/equipment/get.ts

This file was deleted.

11 changes: 0 additions & 11 deletions src/read-models/equipment/index.ts

This file was deleted.

2 changes: 1 addition & 1 deletion src/types/form.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ export type Form<T> = {
) => (context: {
user: User;
events: ReadonlyArray<DomainEvent>;
readModelDb: SharedReadModel['db'];
readModel: SharedReadModel;
}) => E.Either<FailureWithStatus, T>;
};
8 changes: 4 additions & 4 deletions tests/training-sheets/process-events.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ const pullNewEquipmentQuizResultsLocal = async (equipment: Equipment) =>
)();

const defaultEquipment = (): Equipment => ({
id: 'ebedee32-49f4-4d36-a350-4fa7848792bf',
id: 'ebedee32-49f4-4d36-a350-4fa7848792bf' as UUID,
name: 'Metal Lathe',
trainers: [],
trainedMembers: [],
Expand Down Expand Up @@ -143,7 +143,7 @@ describe('Training sheets worker', () => {
Partial<EventOfType<'EquipmentTrainingQuizResult'>>
>({
type: 'EquipmentTrainingQuizResult',
equipmentId: defaultEquipment().id as UUID,
equipmentId: defaultEquipment().id,
trainingSheetId: gsheetData.METAL_LATHE.data.spreadsheetId!,
...gsheetData.METAL_LATHE.entries[0],
});
Expand All @@ -156,7 +156,7 @@ describe('Training sheets worker', () => {
EventOfType<'EquipmentTrainingQuizResult'>
>[] = gsheetData.LASER_CUTTER.entries.map(e => ({
type: 'EquipmentTrainingQuizResult',
equipmentId: defaultEquipment().id as UUID,
equipmentId: defaultEquipment().id,
trainingSheetId: gsheetData.LASER_CUTTER.data.spreadsheetId!,
actor: {
tag: 'system',
Expand All @@ -182,7 +182,7 @@ describe('Training sheets worker', () => {
EventOfType<'EquipmentTrainingQuizResult'>
>[] = gsheetData.BAMBU.entries.map(e => ({
type: 'EquipmentTrainingQuizResult',
equipmentId: defaultEquipment().id as UUID,
equipmentId: defaultEquipment().id,
trainingSheetId: gsheetData.BAMBU.data.spreadsheetId!,
actor: {
tag: 'system',
Expand Down

0 comments on commit 68c1c31

Please sign in to comment.