Skip to content

Commit 6f35a6d

Browse files
committed
fix: only fetch carers of current participant
1 parent 0112768 commit 6f35a6d

File tree

7 files changed

+31
-18
lines changed

7 files changed

+31
-18
lines changed

apps/backend/src/defaults/carers/carers.controller.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { Body, Controller, Delete, Get, Param, Patch, Post } from "@nestjs/common";
2-
import { ApiOperation, ApiTags, ApiUnprocessableEntityResponse } from "@nestjs/swagger";
1+
import { Body, Controller, Delete, Get, Param, Patch, Post, Query } from "@nestjs/common";
2+
import { ApiOperation, ApiQuery, ApiTags, ApiUnprocessableEntityResponse } from "@nestjs/swagger";
33
import { CarersService } from "./carers.service";
44
import { CarerCreationDto, CarerMutationDto, CarerResponseDto } from "./carer.dto";
55
import { ErrorResponseDto } from "../../common/dto/error.dto";
@@ -19,9 +19,10 @@ export class CarersController {
1919
}
2020

2121
@Get()
22+
@ApiQuery({ name: "participantId", required: false, type: Number })
2223
@ApiOperation({ summary: "Get all carers" })
23-
index(): Promise<CarerResponseDto[]> {
24-
return this.carersService.findAll();
24+
index(@Query("participantId") participantId?: number): Promise<CarerResponseDto[]> {
25+
return this.carersService.findAll(participantId);
2526
}
2627

2728
@Get(":id")

apps/backend/src/defaults/carers/carers.service.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export class CarersService {
1414

1515
async create(carerCreationDto: CarerCreationDto) {
1616
const carer = new Carer();
17-
carer.assign(carerCreationDto);
17+
carer.assign(carerCreationDto, { em: this.em });
1818

1919
try {
2020
await this.em.persist(carer).flush();
@@ -28,8 +28,12 @@ export class CarersService {
2828
return carer.toObject();
2929
}
3030

31-
async findAll() {
32-
return (await this.carerRepository.findAll()).map((carer) => carer.toObject());
31+
async findAll(participantId?: number) {
32+
return (
33+
await this.carerRepository.findAll({
34+
where: participantId ? { $or: [{ participant: null }, { participant: participantId }] } : { participant: null },
35+
})
36+
).map((carer) => carer.toObject());
3337
}
3438

3539
async findOne(id: number) {

apps/backend/src/research/questionnaires/questionnaires.service.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export class QuestionnairesService {
2525
throw e;
2626
}
2727

28-
return (await questionnaire.populate(["entries", "entries.carer", "entries.entryLanguages.language"])).toObject();
28+
return (await questionnaire.populate(["entries", "entries.carer", "entries.entryLanguages.language", "participant"])).toObject();
2929
}
3030

3131
async findAll() {
@@ -34,7 +34,9 @@ export class QuestionnairesService {
3434

3535
async findOne(id: number) {
3636
return (
37-
await this.questionnaireRepository.findOneOrFail(id, { populate: ["entries", "entries.carer", "entries.entryLanguages.language"] })
37+
await this.questionnaireRepository.findOneOrFail(id, {
38+
populate: ["entries", "entries.carer", "entries.entryLanguages.language", "participant"],
39+
})
3840
).toObject();
3941
}
4042

@@ -44,7 +46,7 @@ export class QuestionnairesService {
4446

4547
async update(id: number, questionnaireMutationDto: QuestionnaireMutationDto) {
4648
const questionnaire = await this.questionnaireRepository.findOneOrFail(id, {
47-
populate: ["entries", "entries.carer", "entries.entryLanguages.language"],
49+
populate: ["entries", "entries.carer", "entries.entryLanguages.language", "participant"],
4850
});
4951
questionnaire.assign(questionnaireMutationDto);
5052

apps/frontend/src/api.gen.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1306,7 +1306,9 @@ export interface operations {
13061306
};
13071307
CarersController_index: {
13081308
parameters: {
1309-
query?: never;
1309+
query?: {
1310+
participantId?: number;
1311+
};
13101312
header?: never;
13111313
path?: never;
13121314
cookie?: never;
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { $api } from "../stores/api";
1+
import { components } from "../api.gen";
22
import { EntitySelect, EntitySelectProps } from "./EntitySelect";
33

4-
type CarerSelectProps = EntitySelectProps;
5-
6-
export function CarerSelect({ value, onChange, onAddNew, ...rest }: CarerSelectProps) {
7-
const { data } = $api.useQuery("get", "/carers");
4+
type CarerSelectProps = EntitySelectProps & {
5+
data: components["schemas"]["CarerDto"][];
6+
};
87

8+
export function CarerSelect({ value, onChange, onAddNew, data, ...rest }: CarerSelectProps) {
99
return <EntitySelect value={value} onChange={onChange} onAddNew={onAddNew} {...rest} data={data} inputKey="name" />;
1010
}

apps/frontend/src/components/questionnaire/calendar/EntryForm.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { useStore } from "@nanostores/react";
55
import { useEffect } from "react";
66
import { CarerSelect } from "../../CarerSelect";
77
import { LanguageSelect } from "../../LanguageSelect";
8+
import { components } from "../../../api.gen";
89

910
export type EntryFormValues = {
1011
carer?: number;
@@ -32,10 +33,11 @@ type EntityFormProps = {
3233
onDelete?: () => void;
3334
onAddCarer: (value: string) => Promise<number>;
3435
entry?: Partial<EntryFormValues>;
36+
carers: components["schemas"]["CarerDto"][];
3537
actionLabel: string;
3638
};
3739

38-
export function EntityForm({ onSave, onDelete, onAddCarer, actionLabel, entry }: EntityFormProps) {
40+
export function EntityForm({ onSave, onDelete, onAddCarer, actionLabel, entry, carers }: EntityFormProps) {
3941
const t = useStore(messages);
4042
const f = useForm<EntryFormValues>({
4143
initialValues: {
@@ -90,7 +92,7 @@ export function EntityForm({ onSave, onDelete, onAddCarer, actionLabel, entry }:
9092
return (
9193
<form onSubmit={f.onSubmit(onSave)}>
9294
<Stack>
93-
<CarerSelect {...f.getInputProps("carer")} onAddNew={onAddCarer} placeholder={t.labelCarer} />
95+
<CarerSelect data={carers} {...f.getInputProps("carer")} onAddNew={onAddCarer} placeholder={t.labelCarer} />
9496

9597
{f.getValues().entryLanguages.map((_, index) => (
9698
// TODO: make key either languageId or name of new language entry

apps/frontend/src/routes/_auth/questionnaire/_questionnaire/$id/entries.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ function QuestionnaireEntries() {
5353
const deleteMutation = $api.useMutation("delete", "/entries/{id}");
5454
const { data: questionnaire, refetch } = $api.useSuspenseQuery("get", "/questionnaires/{id}", { params: { path: { id: p.id } } });
5555

56+
const { data: carers } = $api.useQuery("get", "/carers", { params: { query: { participantId: questionnaire.participant?.id } } });
5657
const createCarerMutation = $api.useMutation("post", "/carers", {
5758
onSuccess() {
5859
c.refetchQueries($api.queryOptions("get", "/carers"));
@@ -126,6 +127,7 @@ function QuestionnaireEntries() {
126127
onSave={handleOnSave}
127128
onDelete={entryUpdatingId ? () => handleDelete(entryUpdatingId) : undefined}
128129
entry={entryDraft}
130+
carers={carers ?? []}
129131
actionLabel={t.addEntityLabel}
130132
/>
131133
</Modal>

0 commit comments

Comments
 (0)