Skip to content

Commit ad4b14c

Browse files
authored
Update mentorship-request.js (#146)
1 parent fd1d759 commit ad4b14c

1 file changed

Lines changed: 40 additions & 30 deletions

File tree

server/src/api/mentorship-request/controllers/mentorship-request.js

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)