Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#214-json-bbdd #216

Open
wants to merge 5 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions staff/borja-garcia/json-bbdd/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/node_modules/
pnpm-lock.yaml
../social-app/
../.prettierrc
1 change: 1 addition & 0 deletions staff/borja-garcia/json-bbdd/database/users.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"users":[{"id":0,"name":"Limón","birth_date":"1985-01-04","phone":"+34 111111111","email":"[email protected]","password":"12345678"},{"id":1,"name":"Borja","birth_date":"1995-08-30","phone":"+34 987654321","email":"[email protected]","password":"12345678"},{"id":2,"name":"Pepito","birth_date":"1995-08-30","phone":"+34 987654321","email":"[email protected]","password":"12345678"},{"id":3,"name":"Rafa","birth_date":"1983-02-07","phone":"+34 123456789","email":"[email protected]","password":"12345678"},{"id":4,"name":"Rafa","birth_date":"1983-02-07","phone":"+34 123456789","email":"[email protected]","password":"12345678"},{"id":5,"name":"ventu","birth_date":"2000-01-02","phone":"+34 987654321","email":"[email protected]","password":"123456789"}]}
14 changes: 14 additions & 0 deletions staff/borja-garcia/json-bbdd/errors/credentials.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
function CredentialsError(message) {
const instance = new Error(message);
Object.setPrototypeOf(instance, Object.getPrototypeOf(this));
if (Error.captureStackTrace) {
Error.captureStackTrace(instance, CredentialsError);
}
return instance
}

CredentialsError.prototype = Object.create(Error.prototype);

CredentialsError.prototype.name = "CredentialsError";

module.exports = CredentialsError;
14 changes: 14 additions & 0 deletions staff/borja-garcia/json-bbdd/errors/email-not-valid.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
function EmailNotValidError(message) {
const instance = new Error(message);
Object.setPrototypeOf(instance, Object.getPrototypeOf(this));
if (Error.captureStackTrace) {
Error.captureStackTrace(instance, EmailNotValidError);
}
return instance;
}

EmailNotValidError.prototype = Object.create(Error.prototype);

EmailNotValidError.prototype.name = "EmailNotValidError";

module.exports = EmailNotValidError;
10 changes: 10 additions & 0 deletions staff/borja-garcia/json-bbdd/errors/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const CredentialsError = require("./credentials.js");
const EmailNotValidError = require("./email-not-valid.js");
const NotFoundError = require("./not-found.js");
const NotAnIntegerError = require("./not-an-integer.js");
module.exports = {
CredentialsError,
EmailNotValidError,
NotAnIntegerError,
NotFoundError,
};
14 changes: 14 additions & 0 deletions staff/borja-garcia/json-bbdd/errors/not-an-integer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
function NotAnIntegerError(message) {
const instance = new Error(message);
Object.setPrototypeOf(instance, Object.getPrototypeOf(this));
if (Error.captureStackTrace) {
Error.captureStackTrace(instance, NotAnIntegerError);
}
return instance;
}

NotAnIntegerError.prototype = Object.create(Error.prototype);

NotAnIntegerError.prototype.name = "NotAnIntegerError";

module.exports = NotAnIntegerError;
15 changes: 15 additions & 0 deletions staff/borja-garcia/json-bbdd/errors/not-found.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
function NotFoundError(message) {
const instance = new Error(message);
Object.setPrototypeOf(instance, Object.getPrototypeOf(this));

if (Error.captureStackTrace) {
Error.captureStackTrace(instance, NotFoundError);
}
return instance;
}

NotFoundError.prototype = Object.create(Error.prototype);

NotFoundError.prototype.name = "NotFoundError";

module.exports = NotFoundError;
43 changes: 43 additions & 0 deletions staff/borja-garcia/json-bbdd/interface/create-user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
const readline = require("readline");
const { users } = require("../scripts");

const r1 = readline.createInterface(process.stdin, process.stdout);

const template = [
["¿Cuál es tu nombre?", "name"],
["¿Cuál es tu fecha de nacimiento?", "birthDate"],
["¿Cuál es tu teléfono?", "phone"],
["¿Cuál es tu email?", "email"],
["¿Cuál es tu contraseña?", "password"],
];
let tupple = [...template];

const user = {};

function prompt(tupple) {
r1.question(tupple[0][0], function (answer) {
user[tupple[0][1]] = answer;
tupple.shift();
if (tupple.length > 0) {
prompt(tupple);
} else {
users.createOne(user, (err, id) => {
if (err) {
console.error("Error al crear el usuario:", err.message);
} else {
console.table({ id });
r1.question("¿Quieres agregar un nuevo usuario? (yes/no)", function (answer) {
if (answer === "yes") {
tupple = [...template];
prompt(tupple);
} else {
r1.close();
}
});
}
});
}
});
}

prompt(tupple);
44 changes: 44 additions & 0 deletions staff/borja-garcia/json-bbdd/interface/delete-user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
const readline = require("readline");
const { users } = require("../scripts");

const rl = readline.createInterface(process.stdin, process.stdout);

rl.question(
"Por favor, introduce el id del usuario que quieres eliminar",
function (_id) {
const id = Number(_id);

if (
typeof id !== "number" ||
id < 0 ||
id === NaN ||
id === Infinity ||
!Number.isInteger(id)
) {
console.log("Introduce un número válido");
return rl.close();
}
rl.question(
"Introduce la contraseña del usuario a eliminar",
function (password) {
rl.question(
"Estás seguro de eliminar el usuario? (yes/no)",
function (answer) {
if (!answer === "yes") return rl.close();

users.deleteOne(id, password, (err, response) => {
if (err) throw err;
if (response)
console.log("El usuario se ha eliminado correctamente");
else
console.log(
"No se ha podido eliminar correctamente el usuario"
);
rl.close();
});
}
);
}
);
}
);
29 changes: 29 additions & 0 deletions staff/borja-garcia/json-bbdd/interface/edit-user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
const readline = require('readline');
const {users} = require('../scripts');

const rl = readline.createInterface(process.stdin, process.stdout);

const template =[
["Cuál es tu nuevo nombre?", "name"],
["Cuál es tu nueva fecha de nacimiento?", "birthDate"],
["Cuál es tu nuevo teléfono?", "phone"],
];
let tupple = [...template];

const user ={};

function prompt(tupple, id) {
rl.question(tupple[0][0], function (answer){
user[tupple[0][1]] = answer === '' ? null : answer;
tupple.shift();
if (tupple.length > 0) prompt(tupple, id);
else {
users.updateById(id, user);
rl.close();
}
});
}

rl.question('¿Cuál es el ID del usuario que quieres editar=', (id) => {
prompt(tupple, Number(id));
});
21 changes: 21 additions & 0 deletions staff/borja-garcia/json-bbdd/interface/list-users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
const readline = require("readline");
const { users } = require("../scripts");

const rl = readline.createInterface(process.stdin, process.stdout);

rl.question("Cuál es el rango que deseas ver? (ej: 5-8)", function (answer) {
let min = Number(answer.split("-")[0]),
max = Number(answer.split("-")[1]);

if (min > max) {
console.log("Él mínimo no puede ser mayor al máximo");
return rl.close();
}

users.readAll((err, listUsers) => {
if (err) throw err;
const showList = listUsers.slice(min, max + 1);
console.table(showList);
rl.close();
});
});
28 changes: 28 additions & 0 deletions staff/borja-garcia/json-bbdd/interface/show-user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
const readline = require("readline");
const { users } = require("../scripts");

const rl = readline.createInterface(process.stdin, process.stdout);

rl.question(
"Por favor, introduce el id del usuario que quieres ver",
function (_id) {
const id = Number(_id);

if (
typeof id !== "number" ||
id < 0 ||
id === NaN ||
id === Infinity ||
!Number.isInteger(id)
) {
console.log("Introduce un número válido");
return rl.close();
}

users.readOne(id, (err, user) => {
if (err) throw err;
console.table(user);
rl.close();
});
}
);
25 changes: 25 additions & 0 deletions staff/borja-garcia/json-bbdd/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"name": "json-bbdd",
"version": "0.0.0",
"description": "",
"main": "",
"scripts": {
"create-user": "node ./interface/create-user.js",
"delete-user": "node ./interface/delete-user.js",
"edit-user": "node ./interface/edit-user.js",
"list-users": "node ./interface/list-users.js",
"show-user": "node ./interface/show-user.js",
"test": "mocha ./test/users",
"test-inspect": "mocha --inspect-brk ./test/users"
},
"keywords": [],
"author": "Borja García",
"license": "ISC",


"devDependencies": {
"mocha": "10.7.3",
"chai": "4.5.0"
},
"dependencies": {}
}
3 changes: 3 additions & 0 deletions staff/borja-garcia/json-bbdd/scripts/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
const users = require('./users');

module.exports = {users};
37 changes: 37 additions & 0 deletions staff/borja-garcia/json-bbdd/scripts/users/create-one.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
const fs = require("fs");
const path = require("path");
const readAll = require("./read-all.js");
const { EmailNotValidError } = require("../../errors");

function createOne(data, callback) {
const { name, birthDate, phone, email, password } = data;
const emailRegexp = new RegExp(
/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
);
if (!emailRegexp.test(email))
throw new EmailNotValidError("Email is not valid");
readAll((err, users) => {
if (err) return callback(err);
const isEmailDuplicated = users.some((user) => user.email === email);
if (isEmailDuplicated) return callback(new Error("Email already in use"));
const id = users[users.length - 1].id + 1;
users.push({
id,
name,
birth_date: birthDate,
phone,
email,
password,
});
fs.writeFile(
path.join(__dirname, "../../database/users.json"),
JSON.stringify({ users: users }),
"utf-8",
(err) => {
if (err) return callback(err);
callback(null, id);
}
);
});
}
module.exports = createOne;
24 changes: 24 additions & 0 deletions staff/borja-garcia/json-bbdd/scripts/users/delete-one.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const fs = require("fs");
const path = require("path");
const readAll = require("./read-all.js");
const { NotFoundError, CredentialsError } = require("../../errors");
function deleteOne(id, password, callback) {
readAll((err, users) => {
if (err) throw err;
const user = users?.filter((_user) => _user.id === id)[0];
if (!user) return callback(new NotFoundError("User not found"));
if (!(user.password === password))
return callback(new CredentialsError("Password doesn't match"));
const newUsers = users.filter((_user) => !(_user.id === id));
fs.writeFile(
path.join(__dirname, "../../database/users.json"),
JSON.stringify({ users: newUsers }),
"utf-8",
(err) => {
if (err) return callback(err);
callback(null, true);
}
);
});
}
module.exports = deleteOne;
13 changes: 13 additions & 0 deletions staff/borja-garcia/json-bbdd/scripts/users/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const createOne = require("./create-one.js");
const deleteOne = require("./delete-one.js");
const readAll = require("./read-all.js");
const readOne = require("./read-one.js");
const updateById = require("./update-by-id.js");

module.exports = {
createOne,
deleteOne,
readAll,
readOne,
updateById,
};
14 changes: 14 additions & 0 deletions staff/borja-garcia/json-bbdd/scripts/users/read-all.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
const fs = require("fs");
const path = require("path");
function readAll(callback) {
fs.readFile(
path.join(__dirname, "../../database/users.json"),
"utf-8",
(err, _data) => {
if (err) return callback(err);
const data = JSON.parse(_data);
callback(null, data.users);
}
);
}
module.exports = readAll;
Loading