@@ -2,27 +2,69 @@ import ItemIndividual,
2
2
{ ItemId , ItemIndividualInitializer , ItemIndividualMutator } from "../../types/db/public/ItemIndividual" ;
3
3
import { Category } from "../../types/db/public/ValidCategory" ;
4
4
import { SimpleCrudQueryable } from "../Queryable" ;
5
+ import * as DB from "../../db/DB" ;
5
6
6
7
const simpleCrudQueries :
7
8
SimpleCrudQueryable < ItemIndividual , ItemIndividualInitializer , ItemIndividualMutator , ItemId > = {
8
9
async create ( object : ItemIndividualInitializer ) : Promise < ItemIndividual > {
9
- throw new Error ( "Method not implemented." ) ;
10
+ // Object.keys and Object.values return things in the same order so this is safe
11
+ const keys = Object . keys ( object ) ;
12
+ const values = Object . values ( object ) ;
13
+
14
+ const queryResponse = await DB . query (
15
+ `INSERT INTO item_individual (${ keys . join ( "," ) } )` +
16
+ `VALUES (${ keys . map ( ( prop , i ) => `$${ i + 1 } ` ) . join ( "," ) } )` +
17
+ "RETURNING *" ,
18
+ values
19
+ ) ;
20
+ if ( queryResponse . rows . length === 1 ) {
21
+ return queryResponse . rows [ 0 ] ;
22
+ } else {
23
+ return null ;
24
+ }
10
25
} ,
11
26
12
27
async read ( itemId : ItemId ) : Promise < ItemIndividual > {
13
- throw new Error ( "Method not implemented." ) ;
28
+ const queryResponse = await DB . query (
29
+ "SELECT * FROM item_individual WHERE item_id=$1" ,
30
+ [ itemId ]
31
+ ) ;
32
+ if ( queryResponse . rows . length === 1 ) {
33
+ return queryResponse . rows [ 0 ] ;
34
+ } else {
35
+ return null ;
36
+ }
14
37
} ,
15
38
16
39
async readAll ( ) : Promise < ItemIndividual [ ] > {
17
- throw new Error ( "Method not implemented." ) ;
40
+ const queryResponse = await DB . query ( "SELECT * FROM item_individual" ) ;
41
+ return queryResponse . rows ;
18
42
} ,
19
43
20
44
async update ( itemId : ItemId , mutateObject : ItemIndividualMutator ) : Promise < ItemIndividual > {
21
- throw new Error ( "Method not implemented." ) ;
45
+ if ( Object . keys ( mutateObject ) . length === 0 ) {
46
+ return null ;
47
+ }
48
+
49
+ // Use i+2 for parameter so that $1 is reserved for the item id
50
+ const keys = Object . keys ( mutateObject ) . map ( ( prop , i ) => `${ prop } =$${ i + 2 } ` ) ;
51
+ const queryResponse = await DB . query (
52
+ `UPDATE item_individual SET ${ keys . join ( "," ) } WHERE item_id=$1 RETURNING *` ,
53
+ [ itemId , ...Object . values ( mutateObject ) ]
54
+ ) ;
55
+ if ( queryResponse . rows . length === 1 ) {
56
+ return queryResponse . rows [ 0 ] ;
57
+ } else {
58
+ return null ;
59
+ }
22
60
} ,
23
61
24
62
async delete ( itemId : ItemId ) : Promise < boolean > {
25
- throw new Error ( "Method not implemented." ) ;
63
+ const queryResponse = await DB . query (
64
+ "DELETE FROM item_individual WHERE item_id=$1" ,
65
+ [ itemId ]
66
+ ) ;
67
+ return queryResponse . rowCount === 1 ;
26
68
}
27
69
} ;
28
70
0 commit comments