From 20024c1965d66d290fe372dca8fa8888ce395f6b Mon Sep 17 00:00:00 2001 From: Cat++ <69035887+NotGhex@users.noreply.github.com> Date: Sun, 10 Dec 2023 22:10:01 +0800 Subject: [PATCH] fix adapters events --- .../src/classes/BaseDatabaseAdapter.ts | 1 - .../classes/adapters/JsonDatabaseAdapter.ts | 12 ++++++++++ .../adapters/MongodbDatabaseAdapter.ts | 22 +++++++++++++++++-- .../adapters/Sqlite3DatabaseAdapter.ts | 14 ++++++++++++ 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/packages/giveaways/src/classes/BaseDatabaseAdapter.ts b/packages/giveaways/src/classes/BaseDatabaseAdapter.ts index a9a98d8..1b738e5 100644 --- a/packages/giveaways/src/classes/BaseDatabaseAdapter.ts +++ b/packages/giveaways/src/classes/BaseDatabaseAdapter.ts @@ -9,7 +9,6 @@ export interface BaseDatabaseAdapterEvents { giveawayEntryCreate: [entry: IGiveawayEntry]; giveawayEntryUpdate: [oldEntry: IGiveawayEntry, newEntry: IGiveawayEntry]; giveawayEntryDelete: [entry: IGiveawayEntry]; - error: [error: Error]; } export abstract class BaseDatabaseAdapter extends TypedEmitter { diff --git a/packages/giveaways/src/classes/adapters/JsonDatabaseAdapter.ts b/packages/giveaways/src/classes/adapters/JsonDatabaseAdapter.ts index 8619a71..26be7a8 100644 --- a/packages/giveaways/src/classes/adapters/JsonDatabaseAdapter.ts +++ b/packages/giveaways/src/classes/adapters/JsonDatabaseAdapter.ts @@ -90,6 +90,7 @@ export class JsonDatabaseAdapter extends BaseDatabaseAdapter { const giveaway = this.giveaways.find(g => g.id === data.id); if (!giveaway) throw new Error('Unable to create new giveaway! Json file did not save'); + this.emit('giveawayCreate', giveaway); return giveaway; } @@ -106,6 +107,8 @@ export class JsonDatabaseAdapter extends BaseDatabaseAdapter { this._raw.giveaways[giveawayIndex] = newGiveaway; await this.saveJson(); + this.emit('giveawayUpdate', giveaway, newGiveaway); + return JsonDatabaseAdapter.parseGiveaway(newGiveaway); } @@ -124,6 +127,8 @@ export class JsonDatabaseAdapter extends BaseDatabaseAdapter { await this.saveJson(); + giveaways.forEach(g => this.emit('giveawayDelete', g)); + return findFirst ? giveaways[0] : giveaways; } @@ -150,6 +155,8 @@ export class JsonDatabaseAdapter extends BaseDatabaseAdapter { const entry = this.entries.find(e => e.id === data.id); if (!entry) throw new Error('Unable to create new entry! Json file did not save'); + this.emit('giveawayEntryCreate', entry); + return entry; } @@ -166,6 +173,8 @@ export class JsonDatabaseAdapter extends BaseDatabaseAdapter { this._raw.entries[entryIndex] = newEntry; await this.saveJson(); + this.emit('giveawayEntryUpdate', entry, newEntry); + return JsonDatabaseAdapter.parseGiveawayEntry(newEntry); } @@ -181,6 +190,9 @@ export class JsonDatabaseAdapter extends BaseDatabaseAdapter { this._raw.entries = this._raw.entries.filter(e => !entries.some(d => d.id === e.id)); await this.saveJson(); + + entries.forEach(e => this.emit('giveawayEntryDelete', e)); + return findFirst ? entries[0] : entries; } diff --git a/packages/giveaways/src/classes/adapters/MongodbDatabaseAdapter.ts b/packages/giveaways/src/classes/adapters/MongodbDatabaseAdapter.ts index e2e4ef4..b8b7150 100644 --- a/packages/giveaways/src/classes/adapters/MongodbDatabaseAdapter.ts +++ b/packages/giveaways/src/classes/adapters/MongodbDatabaseAdapter.ts @@ -56,14 +56,21 @@ export class MongodbDatabaseAdapter extends BaseDatabaseAdapter { public async createGiveaway(data: IGiveaway): Promise { const newData = await this.giveawaysModel.create(MongodbDatabaseAdapter.parseGiveawayObject(data)); + this.emit('giveawayCreate', data); return MongodbDatabaseAdapter.parseGiveawayDocument(newData); } public async updateGiveaway(giveawayId: string, data: Partial): Promise { + const giveaway = await this.fetchGiveaway(giveawayId); + if (!giveaway) throw new Error(`Unable to update giveaway! Giveaway id not found: ${giveawayId}`); + const updated = await this.giveawaysModel.updateOne({ id: giveawayId }, MongodbDatabaseAdapter.parseGiveawayObject(data)); if (!updated.modifiedCount) throw new Error(`Unable to update giveaway! Giveaway id not found: ${giveawayId}`); - return (await this.fetchGiveaway(giveawayId))!; + const newGiveaway = (await this.fetchGiveaway(giveawayId))!; + this.emit('giveawayUpdate', giveaway, newGiveaway); + + return newGiveaway; } public async deleteGiveaway(giveawayId: string): Promise; @@ -84,6 +91,8 @@ export class MongodbDatabaseAdapter extends BaseDatabaseAdapter { $or: giveaways.map(g => ({ id: g.id })) }); + giveaways.forEach(g => this.emit('giveawayDelete', g)); + return findFirst ? giveaways[0] : giveaways; } @@ -109,14 +118,21 @@ export class MongodbDatabaseAdapter extends BaseDatabaseAdapter { if (!giveaway) throw new Error(`Unable to create new giveaway`); const newData = await this.giveawayEntriesModel.create(MongodbDatabaseAdapter.parseGiveawayEntryObject(data)); + this.emit('giveawayEntryCreate', data); return MongodbDatabaseAdapter.parseGiveawayEntryDocument(newData); } public async updateGiveawayEntry(entryId: string, data: Partial): Promise { + const entry = await this.fetchGiveawayEntry(entryId); + if (!entry) throw new Error(`Unable to update giveaway entry! Entry id not found: ${entryId}`); + const updated = await this.giveawayEntriesModel.updateOne({ id: entryId }, MongodbDatabaseAdapter.parseGiveawayEntryObject(data)); if (!updated.modifiedCount) throw new Error(`Unable to update giveaway entry! Entry id not found: ${entryId}`); - return (await this.fetchGiveawayEntry(entryId))!; + const newEntry = (await this.fetchGiveawayEntry(entryId))!; + this.emit('giveawayEntryUpdate', entry, newEntry); + + return newEntry; } public async deleteGiveawayEntry(giveawayId: string): Promise; @@ -133,6 +149,8 @@ export class MongodbDatabaseAdapter extends BaseDatabaseAdapter { $or: entries.map(e => ({ id: e.id })) }); + entries.forEach(e => this.emit('giveawayEntryDelete', e)); + return findFirst ? entries[0] : entries; } diff --git a/packages/giveaways/src/classes/adapters/Sqlite3DatabaseAdapter.ts b/packages/giveaways/src/classes/adapters/Sqlite3DatabaseAdapter.ts index a28297c..0586b27 100644 --- a/packages/giveaways/src/classes/adapters/Sqlite3DatabaseAdapter.ts +++ b/packages/giveaways/src/classes/adapters/Sqlite3DatabaseAdapter.ts @@ -121,6 +121,9 @@ export class Sqlite3DatabaseAdapter extends BaseDatabaseAdapter { data.endedAt?.toISOString() ?? null, JSON.stringify(data.winnersEntryId) ); + + this.emit('giveawayCreate', data); + return data; } @@ -157,6 +160,8 @@ export class Sqlite3DatabaseAdapter extends BaseDatabaseAdapter { const updated = this.database.prepare(query).run(...values).changes; if (!updated) throw new Error('Unable to update giveaway! No changes found'); + this.emit('giveawayUpdate', giveaway, newGiveaway); + return newGiveaway; } @@ -182,6 +187,8 @@ export class Sqlite3DatabaseAdapter extends BaseDatabaseAdapter { } this.database.prepare(query).run(...values); + giveaways.forEach(g => this.emit('giveawayDelete', g)); + return findFirst ? giveaways[0] : giveaways; } @@ -225,6 +232,9 @@ export class Sqlite3DatabaseAdapter extends BaseDatabaseAdapter { data.userId, data.createdAt.toISOString() ); + + this.emit('giveawayEntryCreate', data); + return data; } @@ -261,6 +271,8 @@ export class Sqlite3DatabaseAdapter extends BaseDatabaseAdapter { const updated = this.database.prepare(query).run(...values).changes; if (!updated) throw new Error('Unable to update entry! No changes found'); + this.emit('giveawayEntryUpdate', entry, newEntry); + return newEntry; } @@ -286,6 +298,8 @@ export class Sqlite3DatabaseAdapter extends BaseDatabaseAdapter { } this.database.prepare(query).run(...values); + entries.forEach(e => this.emit('giveawayEntryDelete', e)); + return findFirst ? entries[0] : entries; }