@@ -13,10 +13,7 @@ module.exports = createCoreController(
1313 */
1414 async find ( ctx ) {
1515 const user = ctx . state ?. user ;
16-
17- if ( ! user ) {
18- return ctx . unauthorized ( "You must be logged in" ) ;
19- }
16+ if ( ! user ) return ctx . unauthorized ( "You must be logged in" ) ;
2017
2118 const { query } = ctx ;
2219 const roleName = user ?. role ?. type ;
@@ -28,72 +25,85 @@ module.exports = createCoreController(
2825 }
2926
3027 let filters = query . filters || { } ;
31-
3228 if ( roleName === "mentor" ) {
33- filters = {
34- ...filters ,
35- mentor : { id : { $eq : user . id } } ,
36- } ;
29+ filters = { ...filters , mentor : { id : { $eq : user . id } } } ;
3730 } else if ( roleName === "authenticated" ) {
38- filters = {
39- ...filters ,
40- user : { id : { $eq : user . id } } ,
41- } ;
31+ filters = { ...filters , user : { id : { $eq : user . id } } } ;
4232 }
4333
4434 const entities = await strapi . entityService . findMany (
4535 "api::mentorship-request.mentorship-request" ,
4636 {
4737 ...query ,
4838 filters,
49- populate : [ "user" , "mentor" , "user.domains" , "user.dimensions" ] ,
39+ populate : [
40+ "user" ,
41+ "mentor" ,
42+ "user.domains" ,
43+ "user.dimensions" ,
44+ "user.reports" ,
45+ ] ,
5046 sort : [ { createdAt : "desc" } ] ,
5147 }
5248 ) ;
5349
50+ // Sanitize first (to respect Strapi’s policies)
5451 const sanitizedEntities = await this . sanitizeOutput ( entities , ctx ) ;
55- return sanitizedEntities ;
52+
53+ // Add `lastReport` field based on user.reports
54+ const withLastReport = sanitizedEntities . map ( ( entity ) => {
55+ const reports = entity . user ?. reports || [ ] ;
56+ const lastReportAt = reports . length
57+ ? reports [ reports . length - 1 ]
58+ : null ;
59+
60+ return {
61+ ...entity ,
62+ lastReportAt : lastReportAt ? lastReport . createdAt : null ,
63+ } ;
64+ } ) ;
65+
66+ return withLastReport ;
5667 } ,
5768
5869 /**
5970 * Find one mentorship request with role-based access
6071 */
6172 async findOne ( ctx ) {
6273 const user = ctx . state . user ;
63- if ( ! user ) {
64- return ctx . unauthorized ( "You must be logged in" ) ;
65- }
74+ if ( ! user ) return ctx . unauthorized ( "You must be logged in" ) ;
6675
6776 const roleName = user . role ?. name ?. toLowerCase ( ) ;
68- // deny all other roles
6977 if ( ! [ "mentor" , "authenticated" , "fdsc" ] . includes ( roleName ) ) {
7078 return ctx . forbidden (
7179 "You do not have permission to access mentorship requests"
7280 ) ;
7381 }
74- const { id } = ctx . params ;
7582
83+ const { id } = ctx . params ;
7684 const entity = await strapi . entityService . findOne (
7785 "api::mentorship-request.mentorship-request" ,
7886 id ,
7987 {
80- populate : [ "mentor" , "user" ] ,
88+ populate : [ "mentor" , "user" , "user.reports" ] ,
8189 }
8290 ) ;
8391
84- if ( ! entity ) {
85- return ctx . notFound ( "Mentorship request not found" ) ;
86- }
92+ if ( ! entity ) return ctx . notFound ( "Mentorship request not found" ) ;
8793
88- if ( roleName === "mentor" && entity . mentor ?. id !== user . id ) {
94+ if ( roleName === "mentor" && entity . mentor ?. id !== user . id )
8995 return ctx . notFound ( "Mentorship request not found" ) ;
90- }
91-
92- if ( roleName === "authenticated" && entity . user ?. id !== user . id ) {
96+ if ( roleName === "authenticated" && entity . user ?. id !== user . id )
9397 return ctx . notFound ( "Mentorship request not found" ) ;
94- }
9598
96- return this . sanitizeOutput ( entity , ctx ) ;
99+ const sanitizedEntity = await this . sanitizeOutput ( entity , ctx ) ;
100+ const reports = sanitizedEntity . user ?. reports || [ ] ;
101+ const lastReportAt = reports . length ? reports [ reports . length - 1 ] : null ;
102+
103+ return {
104+ ...sanitizedEntity ,
105+ lastReportAt : lastReportAt ? lastReport . createdAt : null ,
106+ } ;
97107 } ,
98108 } )
99109) ;
0 commit comments