File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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 ) {
Original file line number Diff line number Diff line change 11import { connection as database } from '../config/database' ;
22
33class 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 ( ) {
You can’t perform that action at this time.
0 commit comments