frpc-desktop/electron/dao/BaseDao.ts

124 lines
2.5 KiB
TypeScript
Raw Normal View History

import Datastore from "nedb";
import path from "path";
2025-02-21 18:30:13 +08:00
import PathUtils from "../utils/PathUtils";
import IdUtils from "../utils/IdUtils";
2025-02-21 18:30:13 +08:00
// interface BaseDaoInterface<T> {
// db: Datastore;
//
// insert(t: T): Promise<T>;
//
// //
// updateById(id: string, t: T): Promise<T>;
//
// //
// // deleteById(id: string): void;
// //
// // findAll(): T[];
//
// findById(id: string): Promise<T>;
// }
2025-02-21 18:30:13 +08:00
class BaseDao<T> {
protected readonly db: Datastore;
constructor(dbName: string) {
const dbFilename = path.join(PathUtils.getAppData(), `${dbName}-v2.db`);
this.db = new Datastore({
autoload: true,
filename: dbFilename
});
// todo log
}
2025-02-21 18:30:13 +08:00
protected genId(): string {
return IdUtils.genUUID();
}
// async insert(t: T): Promise<T> {
// return new Promise<T>((resolve, reject) => {
// resolve(t);
// });
// }
//
insert(t: T): Promise<T> {
return new Promise<T>((resolve, reject) => {
2025-02-21 18:30:13 +08:00
t["_id"] = this.genId();
this.db.insert(t, (err, document) => {
if (err) {
reject(err);
}
resolve(document);
});
});
}
2025-02-21 18:30:13 +08:00
updateById(id: string, t: T): Promise<T> {
return new Promise<T>((resolve, reject) => {
this.db.update(
{ _id: id },
t,
{ upsert: true },
(err, numberOfUpdated, upsert) => {
if (err) {
reject(err);
} else {
t["_id"] = id;
resolve(t);
// this.findById(id)
// .then(data => {
// resolve(t);
// })
// .catch(err2 => {
// reject(err2);
// });
}
}
);
});
}
deleteById(id: string): Promise<void> {
return new Promise<void>((resolve, reject) => {
this.db.remove({ _id: id }, err => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
}
2025-02-21 18:30:13 +08:00
//
// findAll(): T[] {
// return null;
// }
2025-02-21 18:30:13 +08:00
findById(id: string): Promise<T> {
return new Promise<T>((resolve, reject) => {
this.db.findOne({ _id: id }, (err, document) => {
if (err) {
reject(err);
} else {
resolve(document);
}
});
});
}
findAll(): Promise<Array<T>> {
return new Promise<Array<T>>((resolve, reject) => {
this.db.find({}, (err, document) => {
if (err) {
reject(err);
} else {
resolve(document);
}
});
});
}
}
export default BaseDao;