add client relation btw user and client

This commit is contained in:
faris Aljohari
2025-03-27 01:55:26 +03:00
parent cbd3f5028b
commit cf8cf08bdc
5 changed files with 27 additions and 13 deletions

View File

@ -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<ClientDto> {
@Column('simple-array')
scopes: string[];
@OneToMany(() => UserEntity, (user) => user.client)
users: UserEntity[];
}

View File

@ -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<UserDto> {
@ -143,6 +144,13 @@ export class UserEntity extends AbstractEntity<UserDto> {
})
@JoinColumn({ name: 'project_uuid' })
public project: ProjectEntity;
@ManyToOne(() => ClientEntity, (client) => client.users, {
nullable: true,
})
@JoinColumn({ name: 'client_uuid' })
public client: ClientEntity;
constructor(partial: Partial<UserEntity>) {
super();
Object.assign(this, partial);

View File

@ -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: {

View File

@ -34,7 +34,10 @@ export class UserAuthService {
private readonly configService: ConfigService,
) {}
async signUp(userSignUpDto: UserSignUpDto): Promise<UserEntity> {
async signUp(
userSignUpDto: UserSignUpDto,
clientUuid?: string,
): Promise<UserEntity> {
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,

View File

@ -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;
}
}