mirror of
https://github.com/hexastack/hexabot
synced 2025-06-26 18:27:28 +00:00
fix: avatar update rate
This commit is contained in:
parent
c56f176d85
commit
33f6483e2e
@ -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!);
|
||||
|
||||
|
@ -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 () => {
|
||||
|
@ -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,
|
||||
});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user