Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,17 @@ import {
INVITATION_SERVICE_NAME,
InvitationServiceClient,
InvitationStatus,
InvitationTargetType,
GetEventInvitationsResponse,
} from '@app/common/generated/invitation';
export type EventMember = NonNullable<
ListEventMembersResponse['members']
>[number];

type EventInvitation = NonNullable<
GetEventInvitationsResponse['invitations']
>[number];

@Injectable()
export class FetchConfirmedJurorMembersUseCase {
private eventService: EventServiceClient;
Expand All @@ -45,25 +51,43 @@ export class FetchConfirmedJurorMembersUseCase {
// I'm making changes just 10 hours before the event while studying for my final networking exam.
// The jury members haven't confirmed yet, and we need to assign them to the projects.
// Pure joy :)
async execute(eventId: number): Promise<EventMember[]> {
// const [members, acceptedInvitationUserIds] = await Promise.all([
// this.fetchAllEventMembers(eventId),
// this.fetchAcceptedInvitationUserIds(eventId),
// ]);
const members = await this.fetchAllEventMembers(eventId);

// if (
// !members ||
// members.length === 0 ||
// acceptedInvitationUserIds.size === 0
// ) {
// return [];
// }
if (!members || members.length === 0) {
// async execute(eventId: number): Promise<EventMember[]> {
// // const [members, acceptedInvitationUserIds] = await Promise.all([
// // this.fetchAllEventMembers(eventId),
// // this.fetchAcceptedInvitationUserIds(eventId),
// // ]);
// const members = await this.fetchAllEventMembers(eventId);

// // if (
// // !members ||
// // members.length === 0 ||
// // acceptedInvitationUserIds.size === 0
// // ) {
// // return [];
// // }
// if (!members || members.length === 0) {
// return [];
// }

async execute(eventId: number): Promise<EventMember[]> {
const invitations = await this.fetchAllEventInvitations(eventId);

if (!invitations || invitations.length === 0) {
return [];
}

const uniqueRoleIds = [...new Set(members.map((m) => m.roleId))];
const eventJurorInvitations = invitations.filter(
(invitation) => invitation.targetType === InvitationTargetType.EVENT,
);

if (eventJurorInvitations.length === 0) {
return [];
}

// const uniqueRoleIds = [...new Set(members.map((m) => m.roleId))];
const uniqueRoleIds = [...new Set(
eventJurorInvitations.flatMap((invitation) => invitation.roleIds ?? []),
)];
const jurorRoleIds = await this.resolveJurorRoleIds(uniqueRoleIds);

// const result = members.filter(
Expand All @@ -72,66 +96,114 @@ export class FetchConfirmedJurorMembersUseCase {
// jurorRoleIds.has(member.roleId) &&
// acceptedInvitationUserIds.has(member.userId),
// );
const result = members.filter(
(member) => member.active && jurorRoleIds.has(member.roleId),
);
// const result = members.filter(
// (member) => member.active && jurorRoleIds.has(member.roleId),
// );

return result;
}
const jurorUserIds = [...new Set(
eventJurorInvitations
.filter((invitation) =>
invitation.invitedUserId > 0 &&
invitation.roleIds?.some((roleId) => jurorRoleIds.has(roleId)),
)
.map((invitation) => invitation.invitedUserId),
)];

private async fetchAllEventMembers(eventId: number) {
const pageSize = 50;
let page = 1;
let totalPages = 1;
const members: NonNullable<ListEventMembersResponse['members']> = [];
if (jurorUserIds.length === 0) {
return [];
}

do {
const response = await firstValueFrom(
this.eventService.listEventMembers({
const result = jurorUserIds.map(
(userId) =>
({
userId,
eventId,
page,
limit: pageSize,
}),
);
members.push(...(response.members ?? []));
totalPages = response.meta?.totalPages ?? 1;
page += 1;
} while (page <= totalPages);
roleId: uniqueRoleIds[0] ?? 0,
active: true,
createdAt: '',
updatedAt: '',
}) as EventMember,
);

return members;
return result;
}

private async fetchAcceptedInvitationUserIds(eventId: number) {
private async fetchAllEventInvitations(eventId: number) {
const pageSize = 50;
let page = 1;
let totalPages = 1;
const accepted = new Set<number>();
const invitations: EventInvitation[] = [];

do {
const invitationResponse = await firstValueFrom(
const response = await firstValueFrom(
this.invitationService.getEventInvitations({
eventId,
page,
limit: pageSize,
}),
);

for (const invitation of invitationResponse.invitations ?? []) {
if (
invitation.status === InvitationStatus.ACCEPTED &&
invitation.invitedUserId > 0
) {
accepted.add(invitation.invitedUserId);
}
}

totalPages = invitationResponse.meta?.totalPages ?? 1;
invitations.push(...(response.invitations ?? []));
totalPages = response.meta?.totalPages ?? 1;
page += 1;
} while (page <= totalPages);

return accepted;
return invitations;
}

// private async fetchAllEventMembers(eventId: number) {
// const pageSize = 50;
// let page = 1;
// let totalPages = 1;
// const members: NonNullable<ListEventMembersResponse['members']> = [];

// do {
// const response = await firstValueFrom(
// this.eventService.listEventMembers({
// eventId,
// page,
// limit: pageSize,
// }),
// );
// members.push(...(response.members ?? []));
// totalPages = response.meta?.totalPages ?? 1;
// page += 1;
// } while (page <= totalPages);

// return members;
// }

// private async fetchAcceptedInvitationUserIds(eventId: number) {
// const pageSize = 50;
// let page = 1;
// let totalPages = 1;
// const accepted = new Set<number>();

// do {
// const invitationResponse = await firstValueFrom(
// this.invitationService.getEventInvitations({
// eventId,
// page,
// limit: pageSize,
// }),
// );

// for (const invitation of invitationResponse.invitations ?? []) {
// if (
// invitation.status === InvitationStatus.ACCEPTED &&
// invitation.invitedUserId > 0
// ) {
// accepted.add(invitation.invitedUserId);
// }
// }

// totalPages = invitationResponse.meta?.totalPages ?? 1;
// page += 1;
// } while (page <= totalPages);

// return accepted;
// }

private async resolveJurorRoleIds(roleIds: number[]) {
if (!roleIds || roleIds.length === 0) return new Set<number>();

Expand Down
Loading