@@ -3,7 +3,7 @@ const path = require('path')
3
3
const fs = require ( 'fs' )
4
4
const os = require ( 'os' )
5
5
const errorhandler = require ( 'errorhandler' )
6
- const { extractKey, extractKeysForItems, parseKey, doSearch } = require ( './util' )
6
+ const { extractKey, extractKeysForItems, parseKey, doSearch, parseRawKey } = require ( './util' )
7
7
const { purgeTable } = require ( './actions/purgeTable' )
8
8
const asyncMiddleware = require ( './utils/asyncMiddleware' )
9
9
const bodyParser = require ( 'body-parser' )
@@ -129,6 +129,8 @@ exports.createServer = (dynamodb, docClient) => {
129
129
130
130
const listTables = ( ...args ) => dynamodb . listTables ( ...args ) . promise ( )
131
131
const describeTable = ( ...args ) => dynamodb . describeTable ( ...args ) . promise ( )
132
+ const getRawItem = ( ...args ) => dynamodb . getItem ( ...args ) . promise ( )
133
+ const putRawItem = ( ...args ) => dynamodb . putItem ( ...args ) . promise ( )
132
134
const getItem = ( ...args ) => docClient . get ( ...args ) . promise ( )
133
135
const putItem = ( ...args ) => docClient . put ( ...args ) . promise ( )
134
136
const deleteItem = ( ...args ) => docClient . delete ( ...args ) . promise ( )
@@ -553,7 +555,7 @@ exports.createServer = (dynamodb, docClient) => {
553
555
} )
554
556
} ) )
555
557
556
- app . delete ( '/tables/:TableName/items/:key' , asyncMiddleware ( ( req , res ) => {
558
+ app . delete ( '/tables/:TableName/* items/:key' , asyncMiddleware ( ( req , res ) => {
557
559
const TableName = req . params . TableName
558
560
return describeTable ( { TableName } )
559
561
. then ( result => {
@@ -568,7 +570,7 @@ exports.createServer = (dynamodb, docClient) => {
568
570
} )
569
571
} ) )
570
572
571
- app . get ( '/tables/:TableName/add-item' , asyncMiddleware ( ( req , res ) => {
573
+ function addItemPage ( req , res , isRaw ) {
572
574
const TableName = req . params . TableName
573
575
return describeTable ( { TableName } )
574
576
. then ( result => {
@@ -578,90 +580,136 @@ exports.createServer = (dynamodb, docClient) => {
578
580
const definition = table . AttributeDefinitions . find ( attribute => {
579
581
return attribute . AttributeName === key . AttributeName
580
582
} )
581
- Item [ key . AttributeName ] = definition . AttributeType === 'S' ? '' : 0
583
+
584
+ if ( isRaw ) {
585
+ Item [ key . AttributeName ] = definition . AttributeType === 'S' ? { S : '' } : { 'N' : 0 }
586
+ } else {
587
+ Item [ key . AttributeName ] = definition . AttributeType === 'S' ? '' : 0
588
+ }
582
589
} )
590
+
583
591
res . render ( 'item' , {
584
592
Table : table ,
593
+ isRaw : isRaw ,
585
594
TableName : req . params . TableName ,
586
595
Item : Item ,
587
596
isNew : true
588
597
} )
589
598
} )
599
+ }
600
+
601
+ app . get ( '/tables/:TableName/add-raw-item' , asyncMiddleware ( ( req , res ) => {
602
+ addItemPage ( req , res , true )
590
603
} ) )
591
604
592
- app . get ( '/tables/:TableName/items/:key' , asyncMiddleware ( ( req , res ) => {
605
+ app . get ( '/tables/:TableName/add-item' , asyncMiddleware ( ( req , res ) => {
606
+ addItemPage ( req , res , false )
607
+ } ) )
608
+
609
+ function getItemPage ( req , res , isRaw ) {
593
610
const TableName = req . params . TableName
594
611
return describeTable ( { TableName } )
595
612
. then ( result => {
596
613
const params = {
597
614
TableName,
598
- Key : parseKey ( req . params . key , result . Table )
615
+ Key : ( isRaw ? parseRawKey : parseKey ) ( req . params . key , result . Table )
599
616
}
600
617
601
- return getItem ( params ) . then ( response => {
618
+ return ( isRaw ? getRawItem : getItem ) ( params ) . then ( response => {
602
619
if ( ! response . Item ) {
603
620
return res . status ( 404 ) . send ( 'Not found' )
604
621
}
605
622
res . render ( 'item' , {
606
623
Table : result . Table ,
624
+ isRaw : isRaw ,
607
625
TableName : req . params . TableName ,
608
626
Item : response . Item ,
609
627
isNew : false
610
628
} )
611
629
} )
612
630
} )
631
+ }
632
+
633
+ app . get ( '/tables/:TableName/items/:key' , asyncMiddleware ( ( req , res ) => {
634
+ return getItemPage ( req , res , false )
613
635
} ) )
614
636
615
- app . put (
616
- '/tables/:TableName/add-item' ,
617
- bodyParser . json ( { limit : '500kb' } ) ,
618
- asyncMiddleware ( ( req , res ) => {
619
- const TableName = req . params . TableName
620
- return describeTable ( { TableName } )
621
- . then ( description => {
637
+ app . get ( '/tables/:TableName/raw-items/:key' , asyncMiddleware ( ( req , res ) => {
638
+ return getItemPage ( req , res , true )
639
+ } ) )
640
+
641
+ function createNewItem ( req , res , isRaw ) {
642
+ const TableName = req . params . TableName
643
+ return describeTable ( { TableName } )
644
+ . then ( description => {
645
+ const params = {
646
+ TableName,
647
+ Item : req . body
648
+ }
649
+
650
+ return ( isRaw ? putRawItem : putRawItem ) ( params ) . then ( ( ) => {
651
+ const Key = extractKey ( req . body , description . Table . KeySchema )
622
652
const params = {
623
653
TableName,
624
- Item : req . body
654
+ Key
625
655
}
626
-
627
- return putItem ( params ) . then ( ( ) => {
628
- const Key = extractKey ( req . body , description . Table . KeySchema )
629
- const params = {
630
- TableName,
631
- Key
656
+ return ( isRaw ? getRawItem : getItem ) ( params ) . then ( response => {
657
+ if ( ! response . Item ) {
658
+ return res . status ( 404 ) . send ( 'Not found' )
632
659
}
633
- return getItem ( params ) . then ( response => {
634
- if ( ! response . Item ) {
635
- return res . status ( 404 ) . send ( 'Not found' )
636
- }
637
- return res . json ( Key )
638
- } )
660
+ return res . json ( Key )
639
661
} )
640
662
} )
663
+ } )
664
+ }
665
+
666
+ app . put (
667
+ '/tables/:TableName/add-item' ,
668
+ bodyParser . json ( { limit : '500kb' } ) ,
669
+ asyncMiddleware ( ( req , res ) => {
670
+ createNewItem ( req , res , false )
641
671
} ) )
642
672
643
673
app . put (
644
- '/tables/:TableName/items/:key ' ,
674
+ '/tables/:TableName/add-raw-item ' ,
645
675
bodyParser . json ( { limit : '500kb' } ) ,
646
676
asyncMiddleware ( ( req , res ) => {
647
- const TableName = req . params . TableName
648
- return describeTable ( { TableName } )
649
- . then ( result => {
677
+ createNewItem ( req , res , true )
678
+ } ) )
679
+
680
+ function updateItem ( req , res , isRaw ) {
681
+ const TableName = req . params . TableName
682
+ return describeTable ( { TableName } )
683
+ . then ( result => {
684
+ const params = {
685
+ TableName,
686
+ Item : req . body
687
+ }
688
+
689
+ return ( isRaw ? putRawItem : putItem ) ( params ) . then ( ( ) => {
650
690
const params = {
651
691
TableName,
652
- Item : req . body
692
+ Key : parseRawKey ( req . params . key , result . Table )
653
693
}
654
-
655
- return putItem ( params ) . then ( ( ) => {
656
- const params = {
657
- TableName,
658
- Key : parseKey ( req . params . key , result . Table )
659
- }
660
- return getItem ( params ) . then ( response => {
661
- return res . json ( response . Item )
662
- } )
694
+ return ( isRaw ? getRawItem : getItem ) ( params ) . then ( response => {
695
+ return res . json ( response . Item )
663
696
} )
664
697
} )
698
+ } )
699
+ }
700
+
701
+ app . put (
702
+ '/tables/:TableName/raw-items/:key' ,
703
+ bodyParser . json ( { limit : '500kb' } ) ,
704
+ asyncMiddleware ( ( req , res ) => {
705
+ updateItem ( req , res , true )
706
+ } ) )
707
+
708
+ app . put (
709
+ '/tables/:TableName/items/:key' ,
710
+ bodyParser . json ( { limit : '500kb' } ) ,
711
+ asyncMiddleware ( ( req , res ) => {
712
+ updateItem ( req , res , false )
665
713
} ) )
666
714
667
715
app . use ( ( err , req , res , next ) => {
0 commit comments