Skip to content

Commit

Permalink
Fix construct view model to just error if equipment unknown
Browse files Browse the repository at this point in the history
  • Loading branch information
Lan2u committed Sep 20, 2024
1 parent 5de344b commit eb5d906
Showing 1 changed file with 38 additions and 31 deletions.
69 changes: 38 additions & 31 deletions src/queries/equipment/construct-view-model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,49 +2,56 @@ import {pipe} from 'fp-ts/lib/function';
import {Dependencies} from '../../dependencies';
import * as TE from 'fp-ts/TaskEither';
import * as O from 'fp-ts/Option';
import {readModels} from '../../read-models';
import {
failureWithStatus,
FailureWithStatus,
} from '../../types/failure-with-status';
import {
ViewModel,
} from './view-model';
import {ViewModel} from './view-model';
import {User} from '../../types';
import {DomainEvent} from '../../types/domain-event';
import {Equipment} from '../../read-models/equipment/get';
import {UUID} from 'io-ts-types';
import {Member} from '../../read-models/members';

const isSuperUserOrOwnerOfArea = (
events: ReadonlyArray<DomainEvent>,
areaId: UUID,
memberNumber: number
): boolean =>
readModels.superUsers.is(memberNumber)(events) ||
readModels.areas.isOwner(events)(areaId, memberNumber);

const isSuperUserOrTrainerOfEquipment = (
events: ReadonlyArray<DomainEvent>,
equipment: Equipment,
memberNumber: number
): boolean =>
readModels.superUsers.is(memberNumber)(events) ||
equipment.trainers.includes(memberNumber);
import {StatusCodes} from 'http-status-codes';

export const constructViewModel =
(deps: Dependencies, user: User) =>
(equipmentId: UUID): TE.TaskEither<FailureWithStatus, ViewModel> =>
pipe(
{user},
TE.right,
TE.bind('equipment', () => deps.sharedReadModel.equipment.get(equipmentId)),
TE.let('isSuperUserOrOwnerOfArea', ({events, equipment}) => {

},
O.some(deps.sharedReadModel.members.get(user.memberNumber)) ?
isSuperUserOrOwnerOfArea(events, equipment.areaId, user.memberNumber)
TE.bind('equipment', () => {
const equipment = deps.sharedReadModel.equipment.get(equipmentId);
if (O.isNone(equipment)) {
return TE.left(
failureWithStatus('Unknown equipment', StatusCodes.NOT_FOUND)()
);
}
return TE.right(equipment.value);
}),
TE.let('member', () =>
deps.sharedReadModel.members.get(user.memberNumber)
),
TE.let('isSuperUser', ({member}) =>
O.isNone(member) ? false : member.value.isSuperUser
),
TE.let('isOwner', ({equipment, member}) =>
O.isNone(member)
? false
: member.value.ownerOf.findIndex(
ownerOf => ownerOf.id === equipment.area.id
) !== -1
),
TE.let(
'isTrainer',
({equipment}) =>
equipment.trainers.findIndex(
trainer => trainer.memberNumber === user.memberNumber
) !== -1
),
TE.let(
'isSuperUserOrOwnerOfArea',
({isSuperUser, isOwner}) => isSuperUser || isOwner
),
TE.let('isSuperUserOrTrainerOfArea', ({events, equipment}) =>
isSuperUserOrTrainerOfEquipment(events, equipment, user.memberNumber)
TE.let(
'isSuperUserOrTrainerOfArea',
({isSuperUser, isTrainer}) => isSuperUser || isTrainer
)
);

0 comments on commit eb5d906

Please sign in to comment.