61 lines
1.6 KiB
JavaScript
61 lines
1.6 KiB
JavaScript
import sql from "./sql.mjs";
|
|
|
|
export default new class user {
|
|
constructor() {
|
|
this.user = new Map();
|
|
}
|
|
|
|
async initUser() {
|
|
const users = await sql.query("select * from nxy_users");
|
|
if(users.rowCount === 0)
|
|
return false;
|
|
|
|
users.rows.forEach(user => this.user.set(user.prefix, user));
|
|
return true;
|
|
}
|
|
|
|
async load(prefix) {
|
|
let user = await sql.query("select * from nxy_users where prefix = $1", [ prefix ]);
|
|
if(user.rowCount === 0) {
|
|
await sql.query("insert into nxy_users (prefix) values ($1)", [ prefix ]);
|
|
user = await sql.query("select * from nxy_users where prefix = $1", [ prefix ]);
|
|
this.user.set(prefix, user.rows[0]);
|
|
}
|
|
return user.rows[0];
|
|
}
|
|
|
|
async set(prefix, data) {
|
|
const keys = Object.keys(data);
|
|
const values = keys.map((e, i) => `$${i + 2}`).join(", ");
|
|
let query = `insert into nxy_users (prefix, ${keys.join(", ")}) values ($1, ${values}) on conflict (prefix) do update set `;
|
|
query += keys.map((e, i) => `${e} = $${i + 2}`).join(", ");
|
|
await sql.query(query, [ prefix, ...Object.values(data) ]);
|
|
this.user.delete(prefix);
|
|
this.user.set(prefix, await this.load(prefix));
|
|
return this.user.get(prefix);
|
|
}
|
|
|
|
get(user) {
|
|
if(typeof user === "object") { // regex
|
|
for(let [k, v] of this.user.entries())
|
|
if(user.test(k))
|
|
return v;
|
|
}
|
|
else
|
|
return this.user.get(user);
|
|
return false;
|
|
}
|
|
has(...args) {
|
|
return this.user.has(...args);
|
|
}
|
|
|
|
|
|
forEach(...args) {
|
|
return this.user.forEach(...args);
|
|
}
|
|
get size() {
|
|
return this.user.size;
|
|
}
|
|
|
|
};
|