@@ -31,35 +31,50 @@ export class StatisticsService {
31
31
? Prisma . sql `GROUP BY DATE_TRUNC('WEEK', d.created_at)`
32
32
: Prisma . sql `GROUP BY DATE_TRUNC('DAY', d.created_at)`
33
33
34
- return this . prisma . $queryRaw `
34
+ const result = await this . prisma . $queryRaw `
35
35
SELECT COALESCE(SUM(d.amount), 0)::NUMERIC as sum, COUNT(d.id)::INTEGER as count, ${ date }
36
36
FROM api.donations d
37
37
INNER JOIN api.payments p ON p.id = d.payment_id
38
38
WHERE p.status::text = 'succeeded'
39
39
${ Prisma . sql `AND d.target_vault_id IN ( SELECT id from api.vaults WHERE campaign_id = ${ campaignId } ::uuid)` }
40
40
${ group }
41
41
ORDER BY date ASC `
42
+
43
+ return ( result as GroupedDonationsDto [ ] ) . map ( ( row ) => ( {
44
+ sum : Number ( row . sum ) ,
45
+ count : Number ( row . count ) ,
46
+ date : new Date ( row . date ) ,
47
+ } ) )
42
48
}
43
49
44
50
async listUniqueDonations ( campaignId : string ) : Promise < UniqueDonationsDto [ ] > {
45
- return this . prisma . $queryRaw `
51
+ const result = await this . prisma . $queryRaw `
46
52
SELECT d.amount::INTEGER as amount, COUNT(d.id)::INTEGER AS count
47
53
FROM api.donations d
48
54
INNER JOIN api.payments p ON p.id = d.payment_id
49
55
WHERE p.status::text = 'succeeded'
50
56
${ Prisma . sql `AND d.target_vault_id IN ( SELECT id from api.vaults WHERE campaign_id = ${ campaignId } ::uuid)` }
51
57
GROUP BY d.amount
52
58
ORDER BY amount ASC`
59
+ return ( result as UniqueDonationsDto [ ] ) . map ( ( row ) => ( {
60
+ amount : Number ( row . amount ) ,
61
+ count : Number ( row . count ) ,
62
+ } ) )
53
63
}
54
64
55
65
async listHourlyDonations ( campaignId : string ) : Promise < HourlyDonationsDto [ ] > {
56
- return this . prisma . $queryRaw `
66
+ const result = await this . prisma . $queryRaw `
57
67
SELECT EXTRACT(HOUR from d.created_at)::INTEGER AS hour, COUNT(d.id)::INTEGER AS count
58
68
FROM api.donations d
59
69
INNER JOIN api.payments p ON p.id = d.payment_id
60
70
WHERE p.status::text = 'succeeded'
61
71
${ Prisma . sql `AND d.target_vault_id IN ( SELECT id from api.vaults WHERE campaign_id = ${ campaignId } ::uuid)` }
62
72
GROUP BY hour
63
73
ORDER BY hour ASC`
74
+
75
+ return ( result as HourlyDonationsDto [ ] ) . map ( ( row ) => ( {
76
+ hour : Number ( row . hour ) ,
77
+ count : Number ( row . count ) ,
78
+ } ) )
64
79
}
65
80
}
0 commit comments