chore: code clean-up for GuildSavedMessages

This commit is contained in:
Dragory 2021-10-09 12:03:29 +03:00
parent e5389c0e55
commit 394573318d
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1

View file

@ -203,40 +203,25 @@ export class GuildSavedMessages extends BaseGuildRepository {
.getMany(); .getMany();
} }
async create(data) { async createFromMsg(msg: Message, overrides = {}): Promise<void> {
const isPermanent = this.toBePermanent.has(data.id);
if (isPermanent) {
data.is_permanent = true;
this.toBePermanent.delete(data.id);
}
try {
await this.messages.insert(data);
} catch (e) {
if (e?.code === "ER_DUP_ENTRY") {
console.trace(`Tried to insert duplicate message ID: ${data.id}`);
return;
}
throw e;
}
// perf: save a db lookup and message content decryption by building the entity manually
const inserted = buildEntity(SavedMessage, data);
this.events.emit("create", [inserted]);
this.events.emit(`create:${data.id}`, [inserted]);
}
async createFromMsg(msg: Message, overrides = {}) {
// FIXME: Hotfix // FIXME: Hotfix
if (!msg.channel) { if (!msg.channel) {
return; return;
} }
await this.createFromMessages([msg], overrides);
}
async createFromMessages(messages: Message[], overrides = {}): Promise<void> {
const items = messages.map((msg) => ({ ...this.msgToInsertReadyEntity(msg), ...overrides }));
await this.insertBulk(items);
}
protected msgToInsertReadyEntity(msg: Message): Partial<SavedMessage> {
const savedMessageData = this.msgToSavedMessageData(msg); const savedMessageData = this.msgToSavedMessageData(msg);
const postedAt = moment.utc(msg.createdTimestamp, "x").format("YYYY-MM-DD HH:mm:ss"); const postedAt = moment.utc(msg.createdTimestamp, "x").format("YYYY-MM-DD HH:mm:ss");
const data = { return {
id: msg.id, id: msg.id,
guild_id: (msg.channel as GuildChannel).guild.id, guild_id: (msg.channel as GuildChannel).guild.id,
channel_id: msg.channel.id, channel_id: msg.channel.id,
@ -245,17 +230,27 @@ export class GuildSavedMessages extends BaseGuildRepository {
data: savedMessageData, data: savedMessageData,
posted_at: postedAt, posted_at: postedAt,
}; };
return this.create({ ...data, ...overrides });
} }
async createFromMessages(messages: Message[], overrides = {}) { protected async insertBulk(items: Array<Partial<SavedMessage>>): Promise<void> {
for (const msg of messages) { for (const item of items) {
await this.createFromMsg(msg, overrides); if (this.toBePermanent.has(item.id!)) {
item.is_permanent = true;
this.toBePermanent.delete(item.id!);
}
}
await this.messages.createQueryBuilder().insert().orIgnore().values(items).execute();
for (const item of items) {
// perf: save a db lookup and message content decryption by building the entity manually
const inserted = buildEntity(SavedMessage, item);
this.events.emit("create", [inserted]);
this.events.emit(`create:${item.id}`, [inserted]);
} }
} }
async markAsDeleted(id) { async markAsDeleted(id): Promise<void> {
await this.messages await this.messages
.createQueryBuilder("messages") .createQueryBuilder("messages")
.update() .update()