Skip to content

Commit

Permalink
fix adapters events
Browse files Browse the repository at this point in the history
  • Loading branch information
catplvsplus committed Dec 10, 2023
1 parent 1e62dd0 commit 20024c1
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 3 deletions.
1 change: 0 additions & 1 deletion packages/giveaways/src/classes/BaseDatabaseAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<Events extends BaseDatabaseAdapterEvents = BaseDatabaseAdapterEvents> extends TypedEmitter<Events> {
Expand Down
12 changes: 12 additions & 0 deletions packages/giveaways/src/classes/adapters/JsonDatabaseAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand All @@ -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);
}

Expand All @@ -124,6 +127,8 @@ export class JsonDatabaseAdapter extends BaseDatabaseAdapter {

await this.saveJson();

giveaways.forEach(g => this.emit('giveawayDelete', g));

return findFirst ? giveaways[0] : giveaways;
}

Expand All @@ -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;
}

Expand All @@ -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);
}

Expand All @@ -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;
}

Expand Down
22 changes: 20 additions & 2 deletions packages/giveaways/src/classes/adapters/MongodbDatabaseAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,21 @@ export class MongodbDatabaseAdapter extends BaseDatabaseAdapter {

public async createGiveaway(data: IGiveaway): Promise<IGiveaway> {
const newData = await this.giveawaysModel.create(MongodbDatabaseAdapter.parseGiveawayObject(data));
this.emit('giveawayCreate', data);
return MongodbDatabaseAdapter.parseGiveawayDocument(newData);
}

public async updateGiveaway(giveawayId: string, data: Partial<IGiveaway>): Promise<IGiveaway> {
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<IGiveaway|undefined>;
Expand All @@ -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;
}

Expand All @@ -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<IGiveawayEntry>): Promise<IGiveawayEntry> {
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<IGiveawayEntry|undefined>;
Expand All @@ -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;
}

Expand Down
14 changes: 14 additions & 0 deletions packages/giveaways/src/classes/adapters/Sqlite3DatabaseAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,9 @@ export class Sqlite3DatabaseAdapter extends BaseDatabaseAdapter {
data.endedAt?.toISOString() ?? null,
JSON.stringify(data.winnersEntryId)
);

this.emit('giveawayCreate', data);

return data;
}

Expand Down Expand Up @@ -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;
}

Expand All @@ -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;
}

Expand Down Expand Up @@ -225,6 +232,9 @@ export class Sqlite3DatabaseAdapter extends BaseDatabaseAdapter {
data.userId,
data.createdAt.toISOString()
);

this.emit('giveawayEntryCreate', data);

return data;
}

Expand Down Expand Up @@ -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;
}

Expand All @@ -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;
}

Expand Down

0 comments on commit 20024c1

Please sign in to comment.