From fe41139b9fe64e54f8102c97e5b3af965c89aeb5 Mon Sep 17 00:00:00 2001 From: izakdvlpr Date: Fri, 10 Jul 2026 19:12:19 -0300 Subject: [PATCH] feat: add user progress --- src/modules/user/service/user.service.ts | 33 +++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/modules/user/service/user.service.ts b/src/modules/user/service/user.service.ts index e30d33f..354f5a5 100644 --- a/src/modules/user/service/user.service.ts +++ b/src/modules/user/service/user.service.ts @@ -245,7 +245,38 @@ export class UserService { } }); - return { ...user, progressStats, counts, latestReviewType }; + const progressModels = [ + { type: "movie", model: this.databaseService.movieProgress }, + { type: "tv", model: this.databaseService.tvShowProgress }, + { type: "anime", model: this.databaseService.animeProgress }, + { type: "game", model: this.databaseService.gameProgress }, + { type: "book", model: this.databaseService.bookProgress }, + { type: "manga", model: this.databaseService.mangaProgress }, + ] as const; + + const latestProgresses = await Promise.all( + progressModels.map(({ model }) => + (model as { findFirst: (args: unknown) => Promise<{ updatedAt: Date } | null> }).findFirst({ + where: { userId: user.id }, + orderBy: { updatedAt: "desc" }, + select: { updatedAt: true }, + }), + ), + ); + + let latestProgressType: string | null = null; + let latestProgressDate = 0; + + progressModels.forEach(({ type }, index) => { + const updatedAt = latestProgresses[index]?.updatedAt; + + if (updatedAt && updatedAt.getTime() > latestProgressDate) { + latestProgressDate = updatedAt.getTime(); + latestProgressType = type; + } + }); + + return { ...user, progressStats, counts, latestReviewType, latestProgressType }; } getName(name: string | null | undefined, email: string) {