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