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 @@ -8,7 +8,8 @@ import { UserEntity } from '../../user/user.entity.js';
import { UserActionEntity } from '../user-action.entity.js';
import { buildNewConnectionNotFinishedEmailSentAction } from '../utils/build-new-user-action-entity.js';
import { ICheckUsersActionsAndMailingUsers } from './use-cases-interfaces.js';

import PQueue from 'p-queue';
import Sentry from '@sentry/minimal';
@Injectable()
export class CheckUsersActionsAndMailingUsersUseCase implements ICheckUsersActionsAndMailingUsers {
constructor(
Expand All @@ -18,26 +19,30 @@ export class CheckUsersActionsAndMailingUsersUseCase implements ICheckUsersActio
private readonly userRepository: Repository<UserEntity>,
) {}
public async execute(): Promise<Array<string>> {
console.info('Updating actions with mailing started');
const nonFinishedUsersActions = await this.findAllNonFinishedActionsTwoWeeksOld();
const usersWithoutLogs = await this.findUsersWithoutLogs();
const usersFromActions: Array<UserEntity> = nonFinishedUsersActions.map((action: UserActionEntity) => action.user);
const allUsersArray: Array<UserEntity> = usersWithoutLogs.concat(usersFromActions);
const filteredUsers: Array<{ id: string; email: string }> = Array.from(new Set(allUsersArray.map((u) => u.id))).map(
(id) => {
try {
const nonFinishedUsersActions = await this.findAllNonFinishedActionsTwoWeeksOld();
const usersWithoutLogs = await this.findUsersWithoutLogs();
const usersFromActions: Array<UserEntity> = nonFinishedUsersActions.map(
(action: UserActionEntity) => action.user,
);
const allUsersArray: Array<UserEntity> = usersWithoutLogs.concat(usersFromActions);
const filteredUsers: Array<{ id: string; email: string }> = Array.from(
new Set(allUsersArray.map((u) => u.id)),
).map((id) => {
return {
id: id,
email: allUsersArray.find((u) => u.id === id).email,
};
},
);
await Promise.allSettled(
filteredUsers.map(async (u) => {
await this.updateOrCreateActionForUser(u);
}),
);
const userEmails = filteredUsers.map((u) => u.email?.toLowerCase());
return getUniqArrayStrings(userEmails);
});
const queue = new PQueue({ concurrency: 3 });
await Promise.all(filteredUsers.map((u) => queue.add(() => this.updateOrCreateActionForUser(u))));
const userEmails = filteredUsers.map((u) => u.email?.toLowerCase());
return getUniqArrayStrings(userEmails);
} catch (e) {
Sentry.captureException(e);
console.error(e);
return [];
}
}

private async updateOrCreateActionForUser(u: { id: string; email: string }): Promise<void> {
Expand Down