diff --git a/prisma/migrations/20250216074419_update_user_schema/migration.sql b/prisma/migrations/20250216074419_update_user_schema/migration.sql new file mode 100644 index 00000000..5df91c42 --- /dev/null +++ b/prisma/migrations/20250216074419_update_user_schema/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "User" ADD COLUMN "hasCompletedAssessment" BOOLEAN NOT NULL DEFAULT false; diff --git a/prisma/schema/user.prisma b/prisma/schema/user.prisma index 601dedea..e28774b3 100644 --- a/prisma/schema/user.prisma +++ b/prisma/schema/user.prisma @@ -24,6 +24,7 @@ model User { countryCode String? timezone String? comment String? + hasCompletedAssessment Boolean @default(false) refreshToken String[] createdAt DateTime @default(now()) @db.Timestamptz() diff --git a/src/global/selects/users.select.ts b/src/global/selects/users.select.ts index 4bdd8237..ce263b94 100644 --- a/src/global/selects/users.select.ts +++ b/src/global/selects/users.select.ts @@ -88,6 +88,8 @@ export const privateUserDetailSelect = { }, }, email: true, + emailVerified: true, + hasCompletedAssessment: true, countryCode: true, timezone: true, voyageTeamMembers: { @@ -117,6 +119,16 @@ export const privateUserDetailSelect = { }, }, }, + soloProjects: { + select: { + id: true, + status: { + select: { + status: true, + }, + }, + }, + }, }; export const publicUserDetailSelect = { diff --git a/src/users/entities/user.entity.ts b/src/users/entities/user.entity.ts index 34a78d4c..afabfdbb 100644 --- a/src/users/entities/user.entity.ts +++ b/src/users/entities/user.entity.ts @@ -24,6 +24,9 @@ export class UserEntity implements User { @ApiProperty() avatar: string; + @ApiProperty() + hasCompletedAssessment: boolean; + @ApiProperty() githubId: string; diff --git a/src/users/users.service.spec.ts b/src/users/users.service.spec.ts index b3106485..5a8a5aab 100644 --- a/src/users/users.service.spec.ts +++ b/src/users/users.service.spec.ts @@ -25,6 +25,7 @@ describe("UsersService", () => { emailVerified: true, firstName: "Jessica", lastName: "Williamson", + hasCompletedAssessment: true, avatar: "https://gravatar.com/avatar/3bfaef00e02a22f99e17c66e7a9fdd31?s=400&d=robohash&r=x", timezone: "Australia/Melbourne", countryCode: "AU", @@ -197,6 +198,14 @@ describe("UsersService", () => { }, }, ], + soloProjects: [ + { + id: 1, + status: { + status: "Passed", + }, + }, + ], }; const mockSprintCheckIns = [ { @@ -239,6 +248,12 @@ describe("UsersService", () => { }, }, ], + soloProjects: [ + { + id: 1, + status: "Passed", + }, + ], }; prismaMock.user.findUnique.mockResolvedValue(mockUser); prismaMock.formResponseCheckin.findMany.mockResolvedValue( diff --git a/src/users/users.service.ts b/src/users/users.service.ts index 42164811..23fc0f7c 100644 --- a/src/users/users.service.ts +++ b/src/users/users.service.ts @@ -123,6 +123,10 @@ export class UsersService { }; } }), + soloProjects: user.soloProjects.map((soloProject) => ({ + id: soloProject.id, + status: soloProject.status?.status, + })), }; return this.formatUser(updatedUser);