diff --git a/src/app/events/services/events-students-state.service.spec.ts b/src/app/events/services/events-students-state.service.spec.ts index fbe40899d..d8378a71d 100644 --- a/src/app/events/services/events-students-state.service.spec.ts +++ b/src/app/events/services/events-students-state.service.spec.ts @@ -170,7 +170,11 @@ describe("EventsStudentsStateService", () => { "getSummaries", ]); personsServiceMock.getSummaries.and.callFake((ids) => - of(students.filter((s) => ids.includes(s.Id))), + of( + students + .filter((s) => ids.includes(s.Id)) + .map((s) => ({ ...s, Email: null })), + ), ); return personsServiceMock; }, diff --git a/src/app/events/services/events-students-state.service.ts b/src/app/events/services/events-students-state.service.ts index 53e7c851d..0c48ed055 100644 --- a/src/app/events/services/events-students-state.service.ts +++ b/src/app/events/services/events-students-state.service.ts @@ -193,6 +193,7 @@ export class EventsStudentsStateService { eventId, persons, subscriptions, + { emailFallback: true }, ); return decorateCourseStudentsWithCompanies(students, contracts); }), diff --git a/src/app/events/utils/events-students.ts b/src/app/events/utils/events-students.ts index 6df7c1916..4b3d055be 100644 --- a/src/app/events/utils/events-students.ts +++ b/src/app/events/utils/events-students.ts @@ -64,6 +64,7 @@ export function convertPersonsToStudentEntries( eventId: number, persons: ReadonlyArray, subscriptions: ReadonlyArray, + { emailFallback }: { emailFallback?: boolean } = {}, ): StudentEntries { return { eventId: eventId, @@ -74,7 +75,12 @@ export function convertPersonsToStudentEntries( ({ id: person.Id, name: person.FullName, - email: person.DisplayEmail ?? undefined, + email: + // Due to a backend bug where `DisplayEmail` is null for study class + // students, we have to fallback to `Email` as a workaround. + (emailFallback + ? (person.DisplayEmail ?? person.Email) + : person.DisplayEmail) ?? undefined, status: subscriptions.find((s) => s.PersonId === person.Id)?.Status, }) satisfies StudentEntry, ), diff --git a/src/app/shared/models/person.model.ts b/src/app/shared/models/person.model.ts index f1a950f19..10492f629 100644 --- a/src/app/shared/models/person.model.ts +++ b/src/app/shared/models/person.model.ts @@ -43,8 +43,9 @@ const Person = t.type({ const PersonSummary = t.type({ Id: t.number, - DisplayEmail: Option(t.string), FullName: t.string, + DisplayEmail: Option(t.string), + Email: Maybe(t.string), }); type Person = t.TypeOf; diff --git a/src/app/shared/services/persons-rest.service.spec.ts b/src/app/shared/services/persons-rest.service.spec.ts index a11f94f16..a2b2946c1 100644 --- a/src/app/shared/services/persons-rest.service.spec.ts +++ b/src/app/shared/services/persons-rest.service.spec.ts @@ -39,10 +39,11 @@ describe("PersonsRestService", () => { const personSummaries: ReadonlyArray = [ buildPersonSummary(54425), buildPersonSummary(56200), - ].map(({ Id, FullName, DisplayEmail }) => ({ + ].map(({ Id, FullName, DisplayEmail, Email }) => ({ Id, FullName, DisplayEmail, + Email, })); service.getSummaries([54425, 56200]).subscribe((result) => { @@ -51,7 +52,7 @@ describe("PersonsRestService", () => { httpTestingController .expectOne( - "https://eventotest.api/Persons/?filter.Id=;54425;56200&fields=Id,FullName,DisplayEmail", + "https://eventotest.api/Persons/?filter.Id=;54425;56200&fields=Id,FullName,DisplayEmail,Email", ) .flush(personSummaries); }); diff --git a/src/app/shared/services/persons-rest.service.ts b/src/app/shared/services/persons-rest.service.ts index 4549d4a8e..4ca7cfb13 100644 --- a/src/app/shared/services/persons-rest.service.ts +++ b/src/app/shared/services/persons-rest.service.ts @@ -34,7 +34,7 @@ export class PersonsRestService extends RestService { .get(`${this.baseUrl}/`, { params: { "filter.Id": `;${ids.join(";")}`, - fields: ["Id", "FullName", "DisplayEmail"].join(","), + fields: ["Id", "FullName", "DisplayEmail", "Email"].join(","), }, }) .pipe(switchMap(decodeArray(PersonSummary))); diff --git a/src/spec-builders.ts b/src/spec-builders.ts index 456cc07a8..5fa157e5b 100644 --- a/src/spec-builders.ts +++ b/src/spec-builders.ts @@ -266,8 +266,9 @@ export function buildStudent(id: number): Student { export function buildPersonSummary(id: number): PersonSummary { return { Id: id, - DisplayEmail: null, FullName: "Tux", + DisplayEmail: null, + Email: null, }; }