chore: code clean-up for GuildSavedMessages
This commit is contained in:
parent
e5389c0e55
commit
394573318d
1 changed files with 27 additions and 32 deletions
|
@ -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()
|
||||||
|
|
Loading…
Add table
Reference in a new issue