diff --git a/libs/common/src/modules/client/entities/client.entity.ts b/libs/common/src/modules/client/entities/client.entity.ts index 81c7a9b..fafcb86 100644 --- a/libs/common/src/modules/client/entities/client.entity.ts +++ b/libs/common/src/modules/client/entities/client.entity.ts @@ -1,6 +1,7 @@ -import { Entity, Column, Unique } from 'typeorm'; +import { Entity, Column, Unique, OneToMany } from 'typeorm'; import { AbstractEntity } from '../../abstract/entities/abstract.entity'; import { ClientDto } from '../dtos'; +import { UserEntity } from '../../user/entities'; @Entity({ name: 'clients' }) @Unique(['clientId']) @@ -39,4 +40,7 @@ export class ClientEntity extends AbstractEntity { @Column('simple-array') scopes: string[]; + + @OneToMany(() => UserEntity, (user) => user.client) + users: UserEntity[]; } diff --git a/libs/common/src/modules/user/entities/user.entity.ts b/libs/common/src/modules/user/entities/user.entity.ts index f5a9d89..e63fddf 100644 --- a/libs/common/src/modules/user/entities/user.entity.ts +++ b/libs/common/src/modules/user/entities/user.entity.ts @@ -29,6 +29,7 @@ import { VisitorPasswordEntity } from '../../visitor-password/entities'; import { InviteUserEntity } from '../../Invite-user/entities'; import { ProjectEntity } from '../../project/entities'; import { SpaceEntity } from '../../space/entities/space.entity'; +import { ClientEntity } from '../../client/entities'; @Entity({ name: 'user' }) export class UserEntity extends AbstractEntity { @@ -143,6 +144,13 @@ export class UserEntity extends AbstractEntity { }) @JoinColumn({ name: 'project_uuid' }) public project: ProjectEntity; + + @ManyToOne(() => ClientEntity, (client) => client.users, { + nullable: true, + }) + @JoinColumn({ name: 'client_uuid' }) + public client: ClientEntity; + constructor(partial: Partial) { super(); Object.assign(this, partial); diff --git a/src/auth/controllers/user-auth.controller.ts b/src/auth/controllers/user-auth.controller.ts index 675c264..4fc86c3 100644 --- a/src/auth/controllers/user-auth.controller.ts +++ b/src/auth/controllers/user-auth.controller.ts @@ -37,8 +37,12 @@ export class UserAuthController { summary: ControllerRoute.AUTHENTICATION.ACTIONS.SIGN_UP_SUMMARY, description: ControllerRoute.AUTHENTICATION.ACTIONS.SIGN_UP_DESCRIPTION, }) - async signUp(@Body() userSignUpDto: UserSignUpDto) { - const signupUser = await this.userAuthService.signUp(userSignUpDto); + async signUp(@Body() userSignUpDto: UserSignUpDto, @Req() req: any) { + const clientUuid = req.client.uuid; + const signupUser = await this.userAuthService.signUp( + userSignUpDto, + clientUuid, + ); return { statusCode: HttpStatus.CREATED, data: { diff --git a/src/auth/services/user-auth.service.ts b/src/auth/services/user-auth.service.ts index e4a6551..eea8285 100644 --- a/src/auth/services/user-auth.service.ts +++ b/src/auth/services/user-auth.service.ts @@ -34,7 +34,10 @@ export class UserAuthService { private readonly configService: ConfigService, ) {} - async signUp(userSignUpDto: UserSignUpDto): Promise { + async signUp( + userSignUpDto: UserSignUpDto, + clientUuid?: string, + ): Promise { const findUser = await this.findUser(userSignUpDto.email); if (findUser) { @@ -63,6 +66,7 @@ export class UserAuthService { hasAcceptedAppAgreement, password: hashedPassword, roleType: { uuid: spaceMemberRole.uuid }, + client: { uuid: clientUuid }, region: regionUuid ? { uuid: regionUuid, diff --git a/src/guards/client.guard.ts b/src/guards/client.guard.ts index c24a04d..f2e7b4e 100644 --- a/src/guards/client.guard.ts +++ b/src/guards/client.guard.ts @@ -20,6 +20,8 @@ export class ClientGuard extends AuthGuard('jwt') { if (!this.validateToken(decoded)) { throw new UnauthorizedException('Invalid token'); } + + request.client = (decoded as jwt.JwtPayload).client; } catch (err) { throw new UnauthorizedException('Invalid token'); } @@ -36,14 +38,6 @@ export class ClientGuard extends AuthGuard('jwt') { } private validateToken(decoded: any): boolean { - if ( - decoded && - decoded.client && - decoded.client.clientId && - decoded.client.uuid - ) { - return true; - } - return false; + return decoded?.client?.clientId && decoded?.client?.uuid; } }