From a6d2e46b3d0b869b6b57858c6515acffbdb1c3c4 Mon Sep 17 00:00:00 2001 From: Morgan <33722304+ThyMinimalDev@users.noreply.github.com> Date: Fri, 16 Aug 2024 14:06:53 +0300 Subject: [PATCH] fix: check profiles from user.profiles apiv2 (#16235) --- apps/api/v2/src/ee/me/me.controller.ts | 6 ++++-- .../organizations-event-types.service.ts | 7 +++++-- .../v2/src/modules/users/services/users.service.ts | 14 +++++++++++++- apps/api/v2/src/modules/users/users.repository.ts | 7 +++++++ 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/apps/api/v2/src/ee/me/me.controller.ts b/apps/api/v2/src/ee/me/me.controller.ts index b03583d6e7..2bcea0378b 100644 --- a/apps/api/v2/src/ee/me/me.controller.ts +++ b/apps/api/v2/src/ee/me/me.controller.ts @@ -7,6 +7,7 @@ import { Permissions } from "@/modules/auth/decorators/permissions/permissions.d import { ApiAuthGuard } from "@/modules/auth/guards/api-auth/api-auth.guard"; import { PermissionsGuard } from "@/modules/auth/guards/permissions/permissions.guard"; import { UpdateManagedUserInput } from "@/modules/users/inputs/update-managed-user.input"; +import { UsersService } from "@/modules/users/services/users.service"; import { UserWithProfile, UsersRepository } from "@/modules/users/users.repository"; import { Controller, UseGuards, Get, Patch, Body } from "@nestjs/common"; import { ApiTags as DocsTags } from "@nestjs/swagger"; @@ -23,13 +24,14 @@ import { userSchemaResponse } from "@calcom/platform-types"; export class MeController { constructor( private readonly usersRepository: UsersRepository, - private readonly schedulesService: SchedulesService_2024_04_15 + private readonly schedulesService: SchedulesService_2024_04_15, + private readonly usersService: UsersService ) {} @Get("/") @Permissions([PROFILE_READ]) async getMe(@GetUser() user: UserWithProfile): Promise { - const organization = user?.movedToProfile?.organization; + const organization = this.usersService.getUserMainProfile(user)?.organization; const me = userSchemaResponse.parse( organization ? { diff --git a/apps/api/v2/src/modules/organizations/services/event-types/organizations-event-types.service.ts b/apps/api/v2/src/modules/organizations/services/event-types/organizations-event-types.service.ts index 010be8ed8d..061ebed1de 100644 --- a/apps/api/v2/src/modules/organizations/services/event-types/organizations-event-types.service.ts +++ b/apps/api/v2/src/modules/organizations/services/event-types/organizations-event-types.service.ts @@ -6,6 +6,7 @@ import { OrganizationsTeamsRepository } from "@/modules/organizations/repositori import { InputOrganizationsEventTypesService } from "@/modules/organizations/services/event-types/input.service"; import { OutputOrganizationsEventTypesService } from "@/modules/organizations/services/event-types/output.service"; import { PrismaWriteService } from "@/modules/prisma/prisma-write.service"; +import { UsersService } from "@/modules/users/services/users.service"; import { UserWithProfile } from "@/modules/users/users.repository"; import { Injectable, NotFoundException } from "@nestjs/common"; @@ -25,7 +26,8 @@ export class OrganizationsEventTypesService { private readonly eventTypesRepository: EventTypesRepository_2024_06_14, private readonly outputService: OutputOrganizationsEventTypesService, private readonly membershipsRepository: MembershipsRepository, - private readonly organizationsTeamsRepository: OrganizationsTeamsRepository + private readonly organizationsTeamsRepository: OrganizationsTeamsRepository, + private readonly usersService: UsersService ) {} async createTeamEventType( @@ -93,7 +95,8 @@ export class OrganizationsEventTypesService { async getUserToCreateTeamEvent(user: UserWithProfile, organizationId: number) { const isOrgAdmin = await this.membershipsRepository.isUserOrganizationAdmin(user.id, organizationId); - const profileId = user.movedToProfileId || null; + const profileId = + this.usersService.getUserProfileByOrgId(user, organizationId)?.id || user.movedToProfileId; return { id: user.id, role: user.role, diff --git a/apps/api/v2/src/modules/users/services/users.service.ts b/apps/api/v2/src/modules/users/services/users.service.ts index c8fbb44c6b..8118acb58e 100644 --- a/apps/api/v2/src/modules/users/services/users.service.ts +++ b/apps/api/v2/src/modules/users/services/users.service.ts @@ -1,4 +1,4 @@ -import { UsersRepository } from "@/modules/users/users.repository"; +import { UsersRepository, UserWithProfile } from "@/modules/users/users.repository"; import { Injectable } from "@nestjs/common"; import { User } from "@calcom/prisma/client"; @@ -21,4 +21,16 @@ export class UsersService { return users; } + + getUserMainProfile(user: UserWithProfile) { + return ( + user?.movedToProfile || + user.profiles?.find((p) => p.organizationId === user.organizationId) || + user.profiles?.[0] + ); + } + + getUserProfileByOrgId(user: UserWithProfile, organizationId: number) { + return user.profiles?.find((p) => p.organizationId === organizationId); + } } diff --git a/apps/api/v2/src/modules/users/users.repository.ts b/apps/api/v2/src/modules/users/users.repository.ts index 0303a5117f..b6ee18fa74 100644 --- a/apps/api/v2/src/modules/users/users.repository.ts +++ b/apps/api/v2/src/modules/users/users.repository.ts @@ -7,6 +7,7 @@ import type { Profile, User, Team } from "@prisma/client"; export type UserWithProfile = User & { movedToProfile?: (Profile & { organization: Pick }) | null; + profiles?: (Profile & { organization: Pick })[]; }; @Injectable() @@ -76,6 +77,9 @@ export class UsersRepository { movedToProfile: { include: { organization: { select: { isPlatform: true, name: true, slug: true, id: true } } }, }, + profiles: { + include: { organization: { select: { isPlatform: true, name: true, slug: true, id: true } } }, + }, }, }); } @@ -132,6 +136,9 @@ export class UsersRepository { movedToProfile: { include: { organization: { select: { isPlatform: true, name: true, slug: true, id: true } } }, }, + profiles: { + include: { organization: { select: { isPlatform: true, name: true, slug: true, id: true } } }, + }, }, }); }