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({
|
let subscriber = await this.subscriberService.findOne({
|
||||||
foreign_id: foreignId,
|
foreign_id: foreignId,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!subscriber) {
|
if (!subscriber) {
|
||||||
const subscriberData = await handler.getSubscriberData(event);
|
const subscriberData = await handler.getSubscriberData(event);
|
||||||
subscriberData.channel = event.getChannelData();
|
subscriberData.channel = event.getChannelData();
|
||||||
@ -262,6 +263,25 @@ export class ChatService {
|
|||||||
if (!subscriber) {
|
if (!subscriber) {
|
||||||
throw new Error('Unable to create a new 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);
|
event.setSender(subscriber);
|
||||||
// Exec lastvisit hook
|
// Exec lastvisit hook
|
||||||
@ -269,21 +289,6 @@ export class ChatService {
|
|||||||
|
|
||||||
this.websocketGateway.broadcastSubscriberUpdate(subscriber);
|
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
|
// Set the subscriber object
|
||||||
event.setSender(subscriber!);
|
event.setSender(subscriber!);
|
||||||
|
|
||||||
|
@ -178,11 +178,11 @@ describe('SubscriberService', () => {
|
|||||||
|
|
||||||
const fakeAttachment = { id: '9'.repeat(24) } as Attachment;
|
const fakeAttachment = { id: '9'.repeat(24) } as Attachment;
|
||||||
jest.spyOn(attachmentService, 'store').mockResolvedValue(fakeAttachment);
|
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).toHaveBeenCalledTimes(1);
|
||||||
expect(attachmentService.store).toHaveBeenCalledWith(
|
expect(attachmentService.store).toHaveBeenCalledWith(
|
||||||
@ -198,9 +198,7 @@ describe('SubscriberService', () => {
|
|||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(updateOneSpy).toHaveBeenCalledWith(subscriber.id, {
|
expect(result.avatar).toBe(fakeAttachment.id);
|
||||||
avatar: fakeAttachment.id,
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should propagate an error from AttachmentService and leave the subscriber unchanged', async () => {
|
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
|
* @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 { file, type, size } = avatar;
|
||||||
const extension = mime.extension(type);
|
const extension = mime.extension(type);
|
||||||
|
|
||||||
@ -170,7 +173,7 @@ export class SubscriberService extends BaseService<
|
|||||||
createdBy: subscriberId,
|
createdBy: subscriberId,
|
||||||
});
|
});
|
||||||
|
|
||||||
await this.updateOne(subscriberId, {
|
return await this.updateOne(subscriberId, {
|
||||||
avatar: attachment.id,
|
avatar: attachment.id,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user