fix: avatar update rate

This commit is contained in:
Mohamed Marrouchi 2025-05-12 19:12:13 +01:00
parent c56f176d85
commit 33f6483e2e
3 changed files with 30 additions and 24 deletions

View File

@ -254,6 +254,7 @@ export class ChatService {
let subscriber = await this.subscriberService.findOne({
foreign_id: foreignId,
});
if (!subscriber) {
const subscriberData = await handler.getSubscriberData(event);
subscriberData.channel = event.getChannelData();
@ -262,6 +263,25 @@ export class ChatService {
if (!subscriber) {
throw new Error('Unable to create a new subscriber');
}
// Retrieve and store the subscriber avatar
// @TODO: We need to handle the avatar update (based on the lastvisit?)
if (handler.getSubscriberAvatar) {
try {
const file = await handler.getSubscriberAvatar(event);
if (file) {
subscriber = await this.subscriberService.storeAvatar(
subscriber.id,
file,
);
}
} catch (err) {
this.logger.error(
`Unable to retrieve avatar for subscriber ${event.getSenderForeignId()}`,
err,
);
}
}
}
event.setSender(subscriber);
// Exec lastvisit hook
@ -269,21 +289,6 @@ export class ChatService {
this.websocketGateway.broadcastSubscriberUpdate(subscriber);
// Retrieve and store the subscriber avatar
if (handler.getSubscriberAvatar) {
try {
const file = await handler.getSubscriberAvatar(event);
if (file) {
await this.subscriberService.storeAvatar(subscriber.id, file);
}
} catch (err) {
this.logger.error(
`Unable to retrieve avatar for subscriber ${event.getSenderForeignId()}`,
err,
);
}
}
// Set the subscriber object
event.setSender(subscriber!);

View File

@ -178,11 +178,11 @@ describe('SubscriberService', () => {
const fakeAttachment = { id: '9'.repeat(24) } as Attachment;
jest.spyOn(attachmentService, 'store').mockResolvedValue(fakeAttachment);
const updateOneSpy = jest
.spyOn(subscriberService, 'updateOne')
.mockResolvedValue(allSubscribers[0]);
await subscriberService.storeAvatar(subscriber.id, avatarPayload);
const result = await subscriberService.storeAvatar(
subscriber.id,
avatarPayload,
);
expect(attachmentService.store).toHaveBeenCalledTimes(1);
expect(attachmentService.store).toHaveBeenCalledWith(
@ -198,9 +198,7 @@ describe('SubscriberService', () => {
}),
);
expect(updateOneSpy).toHaveBeenCalledWith(subscriber.id, {
avatar: fakeAttachment.id,
});
expect(result.avatar).toBe(fakeAttachment.id);
});
it('should propagate an error from AttachmentService and leave the subscriber unchanged', async () => {

View File

@ -156,7 +156,10 @@ export class SubscriberService extends BaseService<
*
* @returns Resolves once the subscriber avatar is stored
*/
async storeAvatar(subscriberId: string, avatar: AttachmentFile) {
async storeAvatar(
subscriberId: string,
avatar: AttachmentFile,
): Promise<Subscriber> {
const { file, type, size } = avatar;
const extension = mime.extension(type);
@ -170,7 +173,7 @@ export class SubscriberService extends BaseService<
createdBy: subscriberId,
});
await this.updateOne(subscriberId, {
return await this.updateOne(subscriberId, {
avatar: attachment.id,
});
}