Skip to content

Commit f1f3a52

Browse files
author
Victor
committed
feat: add methods to update a user
1 parent df5f5e2 commit f1f3a52

2 files changed

Lines changed: 52 additions & 3 deletions

File tree

src/controllers/UserController.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,21 @@ class UserController {
1717
async update(request, response) {
1818
const { id } = request.params;
1919
const { name, email } = request.body;
20+
let result = await User.find({ where: { id: Number(id) } });
21+
const user = result[0];
22+
23+
if (!user)
24+
return response.status(400).json({ error: 'User not found!' });
25+
26+
result = await User.find({ where: { email } });
27+
const userFoundByEmail = result[0];
28+
29+
if (userFoundByEmail && userFoundByEmail.id !== Number(id))
30+
return response.status(400).json({ error: 'Email already exists!' });
31+
32+
await User.update({ name, email }, { where: { id } });
33+
34+
return response.status(204).send();
2035
}
2136

2237
async delete(request, response) {

src/models/User.js

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,21 @@
11
import { connection as database } from '../config/database';
22

33
class User {
4-
async find() {
5-
const query = 'SELECT * FROM users';
4+
async find(filters) {
5+
let query = 'SELECT * FROM users';
6+
7+
if (filters)
8+
Object.keys(filters).forEach(filter => {
9+
query += ` ${filter}`;
10+
11+
Object.keys(filters[filter]).forEach(field => {
12+
if (filters[filter][field] !== null)
13+
query += ` ${field} = '${filters[filter][field]}'`;
14+
else
15+
query += ` ${field} = null`;
16+
});
17+
});
18+
619
const result = await database.query(query);
720
const users = result.rows;
821

@@ -34,8 +47,29 @@ class User {
3447
return user;
3548
}
3649

37-
async update() {
50+
async update(data, filters) {
51+
const fieldsToUpdate = [];
52+
53+
Object.keys(data).forEach(field => {
54+
fieldsToUpdate.push(`${field} = '${data[field]}'`);
55+
});
56+
57+
let query = `UPDATE users SET ${fieldsToUpdate.join(', ')}`;
58+
59+
if (filters)
60+
Object.keys(filters).forEach(filter => {
61+
query += ` ${filter.toUpperCase()}`;
62+
63+
Object.keys(filters[filter]).forEach(field => {
64+
if (filters[filter][field] !== null)
65+
query += ` ${field} = '${filters[filter][field]}'`;
66+
else
67+
query += ` ${field} = null`;
68+
});
69+
});
3870

71+
await database.query(query);
72+
return;
3973
}
4074

4175
async delete() {

0 commit comments

Comments
 (0)