diff --git a/alcs-frontend/src/app/features/board/dialogs/card-dialog/card-dialog.component.ts b/alcs-frontend/src/app/features/board/dialogs/card-dialog/card-dialog.component.ts index 2c0e31f4fc..7121eec811 100644 --- a/alcs-frontend/src/app/features/board/dialogs/card-dialog/card-dialog.component.ts +++ b/alcs-frontend/src/app/features/board/dialogs/card-dialog/card-dialog.component.ts @@ -80,7 +80,7 @@ export class CardDialogComponent implements OnInit, OnDestroy { filterAssigneeList(term: string, item: AssigneeDto) { const termLower = term.toLocaleLowerCase(); return ( - item.email.toLocaleLowerCase().indexOf(termLower) > -1 || + (item.email && item.email.toLocaleLowerCase().indexOf(termLower) > -1) || item.prettyName.toLocaleLowerCase().indexOf(termLower) > -1 ); } diff --git a/alcs-frontend/src/app/features/home/subtask/subtask-table/subtask-table.component.ts b/alcs-frontend/src/app/features/home/subtask/subtask-table/subtask-table.component.ts index 8b7b59ffc0..f16cfe3fc5 100644 --- a/alcs-frontend/src/app/features/home/subtask/subtask-table/subtask-table.component.ts +++ b/alcs-frontend/src/app/features/home/subtask/subtask-table/subtask-table.component.ts @@ -58,7 +58,7 @@ export class SubtaskTableComponent { filterAssigneeList(term: string, item: AssigneeDto) { const termLower = term.toLocaleLowerCase(); return ( - item.email.toLocaleLowerCase().indexOf(termLower) > -1 || + (item.email && item.email.toLocaleLowerCase().indexOf(termLower) > -1) || item.prettyName.toLocaleLowerCase().indexOf(termLower) > -1 ); } diff --git a/alcs-frontend/src/app/services/user/user.dto.ts b/alcs-frontend/src/app/services/user/user.dto.ts index e5ea623f4d..810ecd8d72 100644 --- a/alcs-frontend/src/app/services/user/user.dto.ts +++ b/alcs-frontend/src/app/services/user/user.dto.ts @@ -23,7 +23,7 @@ export interface AssigneeDto { uuid: string; initials?: string; name: string; - email: string; + email?: string; mentionLabel: string; clientRoles: ROLES[]; prettyName: string; diff --git a/services/apps/alcs/src/common/authorization/authorization.service.spec.ts b/services/apps/alcs/src/common/authorization/authorization.service.spec.ts index 331db5ef25..c58633332b 100644 --- a/services/apps/alcs/src/common/authorization/authorization.service.spec.ts +++ b/services/apps/alcs/src/common/authorization/authorization.service.spec.ts @@ -49,6 +49,7 @@ describe('AuthorizationService', () => { clientRoles: [], bceidGuid: '', displayName: '', + email: 'test@example.com', identityProvider: 'idir', uuid: 'user-uuid', } as Partial as User); diff --git a/services/apps/alcs/src/common/authorization/authorization.service.ts b/services/apps/alcs/src/common/authorization/authorization.service.ts index 9363f06cfd..1f435a5d78 100644 --- a/services/apps/alcs/src/common/authorization/authorization.service.ts +++ b/services/apps/alcs/src/common/authorization/authorization.service.ts @@ -195,11 +195,8 @@ export class AuthorizationService { this.mapUserFromTokenToCreateDto(payload), ); - if (user.clientRoles.length === 0 && !isPortal) { - await this.userService.sendNewUserRequestEmail( - user.email, - user.bceidGuid ?? user.displayName, - ); + if (user.clientRoles.length === 0 && !isPortal && user.email !== undefined) { + await this.userService.sendNewUserRequestEmail(user.email, user.bceidGuid ?? user.displayName); } } } diff --git a/services/apps/alcs/src/providers/typeorm/migrations/1741219585820-make_user_email_nullable.ts b/services/apps/alcs/src/providers/typeorm/migrations/1741219585820-make_user_email_nullable.ts new file mode 100644 index 0000000000..8a4c95863b --- /dev/null +++ b/services/apps/alcs/src/providers/typeorm/migrations/1741219585820-make_user_email_nullable.ts @@ -0,0 +1,14 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class MakeUserEmailNullable1741219585820 implements MigrationInterface { + name = 'MakeUserEmailNullable1741219585820' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "alcs"."user" ALTER COLUMN "email" DROP NOT NULL`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "alcs"."user" ALTER COLUMN "email" SET NOT NULL`); + } + +} diff --git a/services/apps/alcs/src/user/user.dto.ts b/services/apps/alcs/src/user/user.dto.ts index f856ba31cb..c281457e5e 100644 --- a/services/apps/alcs/src/user/user.dto.ts +++ b/services/apps/alcs/src/user/user.dto.ts @@ -49,7 +49,7 @@ export class UserDto extends UpdateUserDto { } export class CreateUserDto { - email: string; + email?: string; name?: string; displayName: string; givenName?: string; @@ -79,7 +79,7 @@ export class AssigneeDto { mentionLabel: string; @AutoMap() - email: string; + email?: string; @AutoMap() clientRoles: string[]; diff --git a/services/apps/alcs/src/user/user.entity.ts b/services/apps/alcs/src/user/user.entity.ts index 65ccaf1d56..2c3d515e41 100644 --- a/services/apps/alcs/src/user/user.entity.ts +++ b/services/apps/alcs/src/user/user.entity.ts @@ -21,8 +21,8 @@ export class User extends Base { } @AutoMap() - @Column() - email: string; + @Column({ nullable: true }) + email?: string; @AutoMap() @Column()