This commit is contained in:
Andrew 2022-02-23 02:37:30 +07:00
parent 0e2c114a84
commit 2c5995be3f
13 changed files with 632 additions and 0 deletions

90
w5/userdb.js Normal file
View file

@ -0,0 +1,90 @@
"use strict";
import { readFileSync, writeFileSync } from "fs";
export class User {
/**
*
* @param {String} login
* @param {String} password
* @param {String} status
*/
constructor(login, password, status) {
this.login = login;
this.password = password;
this.status = status;
}
}
export class UserDB {
/** @type {Map.<String, User>} */
users = new Map();
constructor() {
this.#loadData();
}
#loadData() {
try {
const fileData = readFileSync("users.json", "utf-8");
const usersData = JSON.parse(fileData);
usersData.forEach(user => {
this.users.set(
user["login"],
new User(user["login"], user["password"], user["status"])
);
});
} catch (_) { }
}
saveData() {
const data = JSON.stringify(Array.from(this.users.keys()).map(k => {
const user = this.users.get(k);
return {
login: user.login,
password: user.password,
status: user.status
};
}));
writeFileSync("./users.json", data, { encoding: "utf-8", flag: "w+" });
}
/**
*
* @param {User} login
* @returns Exists user in DB or not
*/
hasUser(login) {
return this.users.has(login);
}
/**
*
* @param {User} user
*/
putUser(user) {
if (this.hasUser(user.login)) {
throw new Error(`User ${user.login} exists!`);
}
this.users.set(user.login, user);
this.saveData();
}
/**
*
* @param {String} login
* @returns User object
*/
getUser(login) {
return this.users.get(login);
}
/**
*
* @returns Users count
*/
getUsersCount() {
return this.users.size;
}
}