@@ -29,15 +29,25 @@ router.get('/budget/:month', async (req, res) => {
29
29
res . status ( 200 ) . json ( budget ) ;
30
30
} ) ;
31
31
32
- router . get ( '/accounts' , async ( _ , res ) => {
33
- const accounts = await actual . getAccounts ( ) ;
34
- res . status ( 200 ) . json ( accounts ) ;
35
- } ) ;
32
+ router . get (
33
+ '/accounts' ,
34
+ async ( _ , res , next ) => {
35
+ const accounts = await actual . getAccounts ( ) ;
36
+ res . locals . data = accounts ;
37
+ next ( ) ;
38
+ } ,
39
+ formatHandler ,
40
+ ) ;
36
41
37
- router . get ( '/accounts/:accountid' , async ( req , res ) => {
38
- const account = await actual . getAccount ( req . params . accountid ) ;
39
- res . status ( 200 ) . json ( account ) ;
40
- } ) ;
42
+ router . get (
43
+ '/accounts/:accountid' ,
44
+ async ( req , res , next ) => {
45
+ const account = await actual . getAccount ( req . params . accountid ) ;
46
+ res . locals . data = account ;
47
+ next ( ) ;
48
+ } ,
49
+ formatHandler ,
50
+ ) ;
41
51
42
52
router . get (
43
53
'/accounts/:accountid/transactions' ,
@@ -65,13 +75,24 @@ export { router };
65
75
66
76
function jsonToCSV ( data : any ) {
67
77
let csv = '' ;
68
- csv += Object . keys ( data ?. [ 0 ] ) . join ( ',' ) + '\n' ;
69
78
70
- for ( const row of data ) {
71
- csv += Object . values ( row )
79
+ const unpackHeaders = ( x : object ) => Object . keys ( x ) . join ( ',' ) + '\n' ;
80
+ const unpackValues = ( x : object ) =>
81
+ Object . values ( x )
72
82
. map ( ( v ) => JSON . stringify ( v ) )
73
- . join ( ',' ) ;
74
- csv += '\n' ;
83
+ . join ( ',' ) + '\n' ;
84
+
85
+ // object
86
+ if ( ! Array . isArray ( data ) ) {
87
+ csv += unpackHeaders ( data ) ;
88
+ csv += unpackValues ( data ) ;
89
+ return csv ;
90
+ }
91
+
92
+ // array
93
+ csv += unpackHeaders ( data ?. [ 0 ] ) ;
94
+ for ( const row of data ) {
95
+ csv += unpackValues ( row ) ;
75
96
}
76
97
77
98
return csv ;
0 commit comments