Uwev2/src/inc/user.mjs
2020-02-20 18:01:09 +01:00

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;
}
};