Skip to content

Instantly share code, notes, and snippets.

@ynwd
Created July 31, 2020 22:23
Show Gist options
  • Save ynwd/e9b598252389d0c5ad1f813afa67f9a8 to your computer and use it in GitHub Desktop.
Save ynwd/e9b598252389d0c5ad1f813afa67f9a8 to your computer and use it in GitHub Desktop.
fdb
// ($lt, $lte, $gt, $gte, $in, $nin, $ne, $exists, $regex)
// $or, $and, $not, $where
function extractValue(object: any) {
const filterArray = [];
for (const key in object) {
filterArray.push(`${key};${object[key]}`);
}
const filterSort = filterArray.sort();
return filterSort.toString();
}
export abstract class Collection<T> {
constructor(name: string) {
this.name = name;
}
private name!: string;
private collection: T[] = [];
create(item: T): Promise<boolean> {
const before = this.collection.length;
const after = this.collection.push(item);
return Promise.resolve(before < after);
}
update(condition: any, item: T): Promise<T> {
const filter = extractValue(condition);
const [data] = this.collection
.map((v, i) => {
return { v, i };
})
.filter((data) => {
return extractValue(data.v).includes(filter);
});
this.collection[data.i] = item;
return Promise.resolve(this.collection[data.i]);
}
delete(condition: any): Promise<T[]> {
const filter = extractValue(condition);
const data = this.collection
.map((v, i) => {
return { v, i };
})
.filter((data) => {
return extractValue(data.v).includes(filter);
});
data.forEach((item) => {
this.collection.splice(item.i, 1);
});
return Promise.resolve(this.collection);
}
findOne(condition: any): Promise<T> {
const filter = extractValue(condition);
const [item] = this.collection.filter((v) => {
return extractValue(v).includes(filter);
});
return Promise.resolve(item);
}
find(condition?: any): Promise<T[]> {
const filter = extractValue(condition);
const item = this.collection.filter((v) => {
return extractValue(v).includes(filter);
});
return Promise.resolve(item);
}
}
interface User {
id?: string;
name: string;
}
class UserCollection extends Collection<User> {}
const db = new UserCollection("user");
console.log('create', await db.create({ id: "0", name: "agus" }));
console.log('create', await db.create({ id: "1", name: "toni" }));
console.log('update',await db.update({ name: "agus", id : "0" }, { name: "budi", id: "0" }));
console.log('findOne',await db.findOne({ id: "0" }));
console.log('findAll',await db.find());
console.log('delete',await db.delete({ id: "0"}));
console.log('findAll',await db.find());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment