W5 done
This commit is contained in:
parent
0e2c114a84
commit
2c5995be3f
13 changed files with 632 additions and 0 deletions
90
w5/userdb.js
Normal file
90
w5/userdb.js
Normal 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;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue