@@ -7,6 +7,66 @@ import { PrismaService } from '../common/prisma.service';
77export class ActivityService {
88 constructor ( private readonly prisma : PrismaService ) { }
99
10+ private enrichMetadata ( metadata : Record < string , unknown > , userNamesById : Record < string , string > ) : Record < string , unknown > {
11+ const payerId = typeof metadata . payerId === 'string' ? metadata . payerId : null ;
12+ const receiverId = typeof metadata . receiverId === 'string' ? metadata . receiverId : null ;
13+
14+ return {
15+ ...metadata ,
16+ ...( payerId && userNamesById [ payerId ] ? { payerName : userNamesById [ payerId ] } : { } ) ,
17+ ...( receiverId && userNamesById [ receiverId ] ? { receiverName : userNamesById [ receiverId ] } : { } ) ,
18+ } ;
19+ }
20+
21+ private async mapActivities ( events : Array < {
22+ id : string ;
23+ groupId : string ;
24+ actorUserId : string ;
25+ type : ActivityType ;
26+ entityId : string ;
27+ metadata : Prisma . JsonValue ;
28+ createdAt : Date ;
29+ actor ?: { name : string | null } | null ;
30+ group ?: { name : string | null } | null ;
31+ } > ) : Promise < ActivityDto [ ] > {
32+ const userIds = new Set < string > ( ) ;
33+
34+ events . forEach ( ( event ) => {
35+ userIds . add ( event . actorUserId ) ;
36+ const metadata = event . metadata as Record < string , unknown > ;
37+ if ( typeof metadata . payerId === 'string' ) {
38+ userIds . add ( metadata . payerId ) ;
39+ }
40+ if ( typeof metadata . receiverId === 'string' ) {
41+ userIds . add ( metadata . receiverId ) ;
42+ }
43+ } ) ;
44+
45+ const users = userIds . size
46+ ? await this . prisma . user . findMany ( {
47+ where : { id : { in : [ ...userIds ] } } ,
48+ select : { id : true , name : true } ,
49+ } )
50+ : [ ] ;
51+ const userNamesById = Object . fromEntries ( users . map ( ( user ) => [ user . id , user . name ] ) ) ;
52+
53+ return events . map ( ( event ) => {
54+ const metadata = event . metadata as Record < string , unknown > ;
55+
56+ return {
57+ id : event . id ,
58+ groupId : event . groupId ,
59+ actorUserId : event . actorUserId ,
60+ actorName : userNamesById [ event . actorUserId ] ?? event . actor ?. name ?? undefined ,
61+ groupName : event . group ?. name ?? undefined ,
62+ type : event . type ,
63+ entityId : event . entityId ,
64+ metadata : this . enrichMetadata ( metadata , userNamesById ) ,
65+ createdAt : event . createdAt . toISOString ( ) ,
66+ } ;
67+ } ) ;
68+ }
69+
1070 async log ( params : {
1171 groupId : string ;
1272 actorUserId : string ;
@@ -18,7 +78,7 @@ export class ActivityService {
1878 data : {
1979 groupId : params . groupId ,
2080 actorUserId : params . actorUserId ,
21- type : params . type ,
81+ type : params . type as any ,
2282 entityId : params . entityId ,
2383 metadata : ( params . metadata ?? { } ) as Prisma . InputJsonValue ,
2484 } ,
@@ -38,17 +98,13 @@ export class ActivityService {
3898 orderBy : { createdAt : 'desc' } ,
3999 skip : safeCursor ,
40100 take : safeLimit ,
101+ include : {
102+ actor : { select : { name : true } } ,
103+ group : { select : { name : true } } ,
104+ } ,
41105 } ) ;
42106
43- const items = events . map ( ( event ) => ( {
44- id : event . id ,
45- groupId : event . groupId ,
46- actorUserId : event . actorUserId ,
47- type : event . type ,
48- entityId : event . entityId ,
49- metadata : event . metadata as Record < string , unknown > ,
50- createdAt : event . createdAt . toISOString ( ) ,
51- } ) ) ;
107+ const items = await this . mapActivities ( events ) ;
52108
53109 return {
54110 items,
@@ -75,21 +131,17 @@ export class ActivityService {
75131 orderBy : { createdAt : 'desc' } ,
76132 skip : safeCursor ,
77133 take : safeLimit ,
134+ include : {
135+ actor : { select : { name : true } } ,
136+ group : { select : { name : true } } ,
137+ } ,
78138 } ) ;
79139
80- const items = events . map ( ( event ) => ( {
81- id : event . id ,
82- groupId : event . groupId ,
83- actorUserId : event . actorUserId ,
84- type : event . type ,
85- entityId : event . entityId ,
86- metadata : event . metadata as Record < string , unknown > ,
87- createdAt : event . createdAt . toISOString ( ) ,
88- } ) ) ;
140+ const items = await this . mapActivities ( events ) ;
89141
90142 return {
91143 items,
92144 nextCursor : events . length === safeLimit ? safeCursor + safeLimit : null ,
93145 } ;
94146 }
95- }
147+ }
0 commit comments