initial commit
This commit is contained in:
45
table.ts
Normal file
45
table.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
export type Entry = { id: number };
|
||||
|
||||
export class Table<TableEntry extends Entry> {
|
||||
entries: TableEntry[] = [];
|
||||
autoIncrementId: number = 1;
|
||||
|
||||
constructor(private saveCallback: () => Promise<void>) {}
|
||||
|
||||
private generateId(): number {
|
||||
return this.autoIncrementId++;
|
||||
}
|
||||
|
||||
async insert(record: Omit<TableEntry, "id">) {
|
||||
const recordWithId = { ...record, id: this.generateId() } as TableEntry;
|
||||
this.entries.push(recordWithId);
|
||||
await this.saveCallback();
|
||||
return recordWithId;
|
||||
}
|
||||
|
||||
select(predicate: (entry: TableEntry) => boolean): TableEntry[] {
|
||||
return this.entries.filter(predicate);
|
||||
}
|
||||
|
||||
async update(
|
||||
predicate: (entry: TableEntry) => boolean,
|
||||
updateFn: (entry: TableEntry) => void,
|
||||
) {
|
||||
const updated: TableEntry[] = [];
|
||||
this.entries.forEach((record) => {
|
||||
if (predicate(record)) {
|
||||
updateFn(record);
|
||||
updated.push(record);
|
||||
}
|
||||
});
|
||||
await this.saveCallback();
|
||||
return updated;
|
||||
}
|
||||
|
||||
async delete(predicate: (entry: TableEntry) => boolean) {
|
||||
const deletedEntries = this.entries.filter(predicate);
|
||||
this.entries = this.entries.filter((record) => !predicate(record));
|
||||
await this.saveCallback();
|
||||
return deletedEntries;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user