1+ import { connection as database } from '../config/database' ;
2+
3+ class User {
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+
19+ const result = await database . query ( query ) ;
20+ const users = result . rows ;
21+
22+ return users ;
23+ }
24+
25+ async create ( data ) {
26+ const fields = [ ] ;
27+ const values = [ ] ;
28+
29+ Object . keys ( data ) . forEach ( field => {
30+ fields . push ( field ) ;
31+
32+ if ( data [ field ] !== null ) {
33+ if ( Array . isArray ( data [ field ] ) ) {
34+ const newArray = data [ field ] . map ( item => `'${ item } '` ) ;
35+
36+ values . push ( `ARRAY[${ newArray } ]` ) ;
37+ } else
38+ values . push ( `'${ data [ field ] } '` ) ;
39+ } else
40+ values . push ( 'null' ) ;
41+ } ) ;
42+
43+ const query = `INSERT INTO users (${ fields . join ( ', ' ) } ) VALUES (${ values . join ( ', ' ) } ) RETURNING *` ;
44+ const result = await database . query ( query ) ;
45+ const user = result . rows [ 0 ] ;
46+
47+ return user ;
48+ }
49+
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+ } ) ;
70+
71+ await database . query ( query ) ;
72+ return ;
73+ }
74+
75+ async delete ( filters ) {
76+ let query = 'DELETE FROM users' ;
77+
78+ if ( filters )
79+ Object . keys ( filters ) . forEach ( filter => {
80+ query += ` ${ filter . toUpperCase ( ) } ` ;
81+
82+ Object . keys ( filters [ filter ] ) . forEach ( field => {
83+ if ( filters [ filter ] [ field ] !== null )
84+ query += ` ${ field } = '${ filters [ filter ] [ field ] } '` ;
85+ else
86+ query += ` ${ field } = null` ;
87+ } ) ;
88+ } ) ;
89+
90+ await database . query ( query ) ;
91+ return ;
92+ }
93+ }
94+
95+ export default new User ( ) ;
0 commit comments