Skip to content

Commit 7adc44e

Browse files
committed
fix(achievements): ensure consistent most recent record selection across roles
- Add created_at column to instructor_access and user_access permissions - Improve client-side record selection using explicit sort instead of reduce - Remove debug console.log statements for cleaner code - Ensures instructors and admins see the same achievement record status When multiple achievement records exist for a user, the frontend now consistently selects the most recent record based on created_at timestamp using deterministic sorting, regardless of user role.
1 parent 290261b commit 7adc44e

File tree

2 files changed

+7
-20
lines changed

2 files changed

+7
-20
lines changed

backend/metadata/databases/default/tables/public_AchievementRecord.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ select_permissions:
4949
- achievementOptionId
5050
- courseId
5151
- coverImageUrl
52+
- created_at
5253
- csvResults
5354
- description
5455
- documentationUrl

frontend-nx/apps/edu-hub/components/pages/ManageCourseContent/CourseParticipationsTab/index.tsx

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -165,40 +165,26 @@ const ParticipationList: FC<IPropsParticipationList> = ({ course, qResult }) =>
165165
];
166166

167167
const participationEnrollments: ExtendedEnrollment[] = [...(course.CourseEnrollments || [])]
168-
.filter((enrollment) => {
169-
console.log('enrollment.status', enrollment.status);
170-
console.log('enrollment.userId', enrollment.userId);
171-
console.log('enrollment.courseId', enrollment.courseId);
172-
return enrollment.status === 'CONFIRMED';
173-
})
168+
.filter((enrollment) => enrollment.status === 'CONFIRMED')
174169
.sort((a, b) => a.User.lastName.localeCompare(b.User.lastName))
175170
.map((enrollment) => {
176171
// get all records for this enrollment, with additional filtering by courseId
177172
const allRecords = course.AchievementOptionCourses.flatMap((courseOption) => {
178-
console.log('courseOption', courseOption);
179173
return courseOption.AchievementOption.AchievementRecords.filter((record) => {
180-
console.log('record.courseId', record.courseId);
181-
console.log('course.id', course.id);
182174
return (
183-
record.AchievementRecordAuthors.some((author) => {
184-
console.log('author.userId', author.userId);
185-
console.log('enrollment.User.id', enrollment.User.id);
186-
return author.userId === enrollment.User.id;
187-
}) && record.courseId === course.id
175+
record.AchievementRecordAuthors.some((author) => author.userId === enrollment.User.id) &&
176+
record.courseId === course.id
188177
);
189178
});
190179
});
191180

192-
// find most recent record for this enrollment
181+
// find most recent record for this enrollment based on created_at timestamp
182+
// sort by created_at descending and take the first one to ensure consistency
193183
const mostRecentRecord =
194184
allRecords.length > 0
195-
? allRecords.reduce((prevRecord, currRecord) =>
196-
new Date(currRecord.created_at) > new Date(prevRecord.created_at) ? currRecord : prevRecord
197-
)
185+
? allRecords.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime())[0]
198186
: null;
199187

200-
console.log('mostRecentRecord', mostRecentRecord);
201-
202188
// return a new object that combines the enrollment and its most recent record
203189
return {
204190
...enrollment,

0 commit comments

Comments
 (0)