-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdao_users.js
163 lines (152 loc) · 6.39 KB
/
dao_users.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
"use strict";
class DAOUsers {
/**
* Inicializa el DAO de usuarios.
*
* @param {Pool} pool Pool de conexiones MySQL. Todas las operaciones
* sobre la BD se realizarán sobre este pool.
*/
constructor(pool) {
this.pool = pool;
}
/**
* Busca en la base de datos la información del usuario que ha insertado el email
*
* @param {string} id Identificador del usuario a buscar
* @param {function} callback Función que recibirá el objeto error y el resultado
*/
getUserData(id, callback) {
this.pool.getConnection((err, connection) => {
if (err) {
callback(err);
return;
}
connection.query("SELECT user_id, email, password, name, gender, dateOfBirth, points, image FROM user WHERE user_id=?", [id], (err, usr) => {
connection.release();
if (err) {
callback(err);
return;
}
if (usr.length === 0) {
callback(null, undefined);
} else {
let edad = null;
let date = null;
/* Fecha nacimiento */
if (usr[0].dateOfBirth != null) {
let moment = require ("moment");
let hoy = moment();
var fechaNacimiento = moment(new Date(usr[0].dateOfBirth));
edad = hoy.diff(fechaNacimiento, "years");
var month = usr[0].dateOfBirth.getMonth() + 1; //months from 1-12
var day = usr[0].dateOfBirth.getDate();
if(day < '10') {
day = `0${day}`;
}
if(month < '10') {
month = `0${month}`;
}
var year = usr[0].dateOfBirth.getFullYear();
date = `${year}-${month}-${day}`;
}
/* ----- */
let obj = { user_id:usr[0].user_id, email: usr[0].email, password: usr[0].password, name: usr[0].name,
gender: usr[0].gender, dateOfBirth: date, points: usr[0].points, image: usr[0].image, age: edad};
callback(null, obj);
}
});
})
}
/**
* Determina si un determinado usuario aparece en la BD con la contraseña
* pasada como parámetro.
*
* Es una operación asíncrona, de modo que se llamará a la función callback
* pasando, por un lado, el objeto Error (si se produce, o null en caso contrario)
* y, por otro lado, un booleano indicando el resultado de la operación
* (true => el usuario existe, false => el usuario no existe o la contraseña es incorrecta)
* En caso de error error, el segundo parámetro de la función callback será indefinido.
*
* @param {string} email Identificador del usuario a buscar
* @param {string} password Contraseña a comprobar
* @param {function} callback Función que recibirá el objeto error y el resultado
*/
isUserCorrect(email, password, callback) {
/* Implementar */
this.pool.getConnection((err, connection) => {
if (err) { callback(err); return; }
connection.query("SELECT user_id, email, password FROM user WHERE email = ? AND password = ?", [email, password],
(err, filas) => {
/* Conecction release se puede poner justo aqui, ya que tenemos la
información de la tabla en filas y no vamos a necesitarlo más */
connection.release();
if (err) { callback(err); return; }
if (filas.length === 0) {
callback(null, -1);
}
else {
callback(null, filas[0].user_id);
}
})
})
}
userExist(email, callback) {
this.pool.getConnection((err, connection) => {
if (err) { callback(err); return; }
connection.query("SELECT email FROM user WHERE email = ?", [email],
(err, filas) => {
/* Conecction release se puede poner justo aqui, ya que tenemos la
información de la tabla en filas y no vamos a necesitarlo más */
connection.release();
if (err) { callback(err); return; }
if (filas.length === 0) {
callback(null, -1);
}
else {
callback(null, filas[0].email);
}
})
})
}
insertUser(email, password, name, gender, date, image, callback) {
this.pool.getConnection((err, connection) => {
if (err) { callback(err); return; }
connection.query("INSERT INTO user (email, password, name, gender, dateOfBirth, image)" +
" VALUES (?, ?, ?, ?, ?, ?)", [email, password, name, gender, date, image],
function (err, resultado) {
if (err) { callback(err); return; }
else {
callback(null, resultado.insertId);
connection.release();
}
})
})
}
modifyUser(id, email, password, name, gender, date, image, callback){
this.pool.getConnection((err, connection) => {
if (err) { callback(err); return; }
connection.query("UPDATE user SET email=?, password=?,name=?,gender=?,dateOfBirth=?,image=? WHERE user_id=?",
[email, password, name, gender, date, image, id],
function (err, resultado) {
if (err) { callback(err); return; }
})
callback(null);
connection.release();
})
}
addUserPoints(id, points, callback) {
this.pool.getConnection((err, connection) => {
if (err) { callback(err); return; }
connection.query("UPDATE user SET points=? WHERE user_id=?",
[points, id],
function (err, resultado) {
if (err) { callback(err); return; }
})
callback(null);
connection.release();
})
}
}
module.exports = {
DAOUsers: DAOUsers
}