From 83d7ff3f35c55421054d0026f07e5a751644095c Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Thu, 28 Dec 2023 00:44:57 +0530 Subject: [PATCH 1/4] refactor:user exist api Signed-off-by: pranalidhanavade --- apps/user/interfaces/user.interface.ts | 4 ++-- apps/user/src/user.service.ts | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/user/interfaces/user.interface.ts b/apps/user/interfaces/user.interface.ts index e704a16af..0e72a5fe0 100644 --- a/apps/user/interfaces/user.interface.ts +++ b/apps/user/interfaces/user.interface.ts @@ -113,10 +113,10 @@ export interface ISendVerificationEmail { } export interface ICheckUserDetails { - isExist: boolean; + isRegistered: boolean; isEmailVerified?: boolean; isFidoVerified?: boolean; - isSupabase?: boolean; + isAuthenticated?: boolean; } export interface UserCredentials { diff --git a/apps/user/src/user.service.ts b/apps/user/src/user.service.ts index d3c5038a0..cfe82bf9d 100644 --- a/apps/user/src/user.service.ts +++ b/apps/user/src/user.service.ts @@ -468,8 +468,8 @@ export class UserService { const invitations: OrgInvitations[] = await this.updateOrgInvitations(invitationsData['invitations']); invitationsData['invitations'] = invitations; - return invitationsData; + } catch (error) { this.logger.error(`Error in get invitations: ${JSON.stringify(error)}`); throw new RpcException(error.response ? error.response : error); @@ -735,14 +735,14 @@ export class UserService { throw new ConflictException(ResponseMessages.user.error.exists); } else if (null === userDetails) { return { - isExist: false + isRegistered: false }; } else { const userVerificationDetails = { isEmailVerified: userDetails.isEmailVerified, isFidoVerified: userDetails.isFidoVerified, - isSupabase: null !== userDetails.supabaseUserId && undefined !== userDetails.supabaseUserId, - isExist: true + isAuthenticated: null !== userDetails.supabaseUserId && undefined !== userDetails.supabaseUserId, + isRegistered: true }; return userVerificationDetails; } From 9a9ca871b79ba3652ffc7bab05f80fed97f8eb55 Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Thu, 28 Dec 2023 17:19:21 +0530 Subject: [PATCH 2/4] refactor:platform settings api and user credentials api Signed-off-by: pranalidhanavade --- apps/api-gateway/src/user/dto/add-user.dto.ts | 15 +++-- apps/api-gateway/src/user/user.controller.ts | 56 ++++++++++++------- apps/api-gateway/src/user/user.service.ts | 6 +- apps/user/src/user.controller.ts | 17 ++++-- apps/user/src/user.service.ts | 16 +++--- libs/common/src/response-messages/index.ts | 3 +- 6 files changed, 66 insertions(+), 47 deletions(-) diff --git a/apps/api-gateway/src/user/dto/add-user.dto.ts b/apps/api-gateway/src/user/dto/add-user.dto.ts index 05145b8d9..4f9639ed1 100644 --- a/apps/api-gateway/src/user/dto/add-user.dto.ts +++ b/apps/api-gateway/src/user/dto/add-user.dto.ts @@ -13,23 +13,22 @@ export class AddUserDetailsDto { @ApiProperty({ example: 'Alen' }) @IsNotEmpty({ message: 'First name is required' }) - @MinLength(2, { message: 'First name must be at least 2 characters.' }) - @MaxLength(50, { message: 'First name must be at most 50 characters.' }) + @MinLength(2, { message: 'First name must be at least 2 characters' }) + @MaxLength(50, { message: 'First name must be at most 50 characters' }) @IsString({ message: 'First name should be a string' }) firstName: string; @ApiProperty({ example: 'Harvey' }) @IsNotEmpty({ message: 'Last name is required' }) - @MinLength(2, { message: 'Last name must be at least 2 characters.' }) - @MaxLength(50, { message: 'Last name must be at most 50 characters.' }) + @MinLength(2, { message: 'Last name must be at least 2 characters' }) + @MaxLength(50, { message: 'Last name must be at most 50 characters' }) @IsString({ message: 'Last name should be a string' }) lastName: string; @ApiProperty() @Transform(({ value }) => trim(value)) - @IsNotEmpty({ message: 'Password is required.' }) - @IsOptional() - password?: string; + @IsNotEmpty({ message: 'Password is required' }) + password: string; @ApiProperty({ example: 'false' }) @IsOptional() @@ -40,7 +39,7 @@ export class AddUserDetailsDto { export class AddPasskeyDetails { @ApiProperty() @Transform(({ value }) => trim(value)) - @IsNotEmpty({ message: 'Password is required.' }) + @IsNotEmpty({ message: 'Password is required' }) password: string; } diff --git a/apps/api-gateway/src/user/user.controller.ts b/apps/api-gateway/src/user/user.controller.ts index 6d7a69dd5..07bc23201 100644 --- a/apps/api-gateway/src/user/user.controller.ts +++ b/apps/api-gateway/src/user/user.controller.ts @@ -29,7 +29,7 @@ import { UnauthorizedErrorDto } from '../dtos/unauthorized-error.dto'; import { ForbiddenErrorDto } from '../dtos/forbidden-error.dto'; import { Response } from 'express'; import { CommonService } from '@credebl/common'; -import IResponseType from '@credebl/common/interfaces/response.interface'; +import IResponse from '@credebl/common/interfaces/response.interface'; import { ResponseMessages } from '@credebl/common/response-messages'; import { user } from '@prisma/client'; import { AuthGuard } from '@nestjs/passport'; @@ -94,7 +94,7 @@ export class UserController { @Res() res: Response ): Promise { const users = await this.userService.get(getAllUsersDto); - const finalResponse: IResponseType = { + const finalResponse: IResponse = { statusCode: HttpStatus.OK, message: ResponseMessages.user.success.fetchUsers, data: users.response @@ -117,7 +117,7 @@ export class UserController { async getPublicProfile(@Param('username') username: string, @Res() res: Response): Promise { const userData = await this.userService.getPublicProfile(username); - const finalResponse: IResponseType = { + const finalResponse: IResponse = { statusCode: HttpStatus.OK, message: ResponseMessages.user.success.fetchProfile, data: userData.response @@ -136,7 +136,7 @@ export class UserController { async getProfile(@User() reqUser: user, @Res() res: Response): Promise { const userData = await this.userService.getProfile(reqUser.id); - const finalResponse: IResponseType = { + const finalResponse: IResponse = { statusCode: HttpStatus.OK, message: ResponseMessages.user.success.fetchProfile, data: userData @@ -145,6 +145,9 @@ export class UserController { return res.status(HttpStatus.OK).json(finalResponse); } + /** + * @returns platform and ecosystem settings + */ @Get('/platform-settings') @ApiOperation({ summary: 'Get all platform and ecosystem settings', @@ -159,7 +162,7 @@ export class UserController { const finalResponse = { statusCode: HttpStatus.OK, message: ResponseMessages.user.success.fetchPlatformSettings, - data: settings.response + data: settings }; return res.status(HttpStatus.OK).json(finalResponse); @@ -180,7 +183,7 @@ export class UserController { ): Promise { const userDetails = await this.userService.getUserActivities(reqUser.id, limit); - const finalResponse: IResponseType = { + const finalResponse: IResponse = { statusCode: HttpStatus.OK, message: ResponseMessages.user.success.userActivity, data: userDetails @@ -231,7 +234,7 @@ export class UserController { getAllInvitationsDto ); - const finalResponse: IResponseType = { + const finalResponse: IResponse = { statusCode: HttpStatus.OK, message: ResponseMessages.user.success.fetchInvitations, data: invitations.response @@ -250,7 +253,7 @@ export class UserController { async checkUserExist(@Param() emailParam: EmailValidator, @Res() res: Response): Promise { const userDetails = await this.userService.checkUserExist(emailParam.email); - const finalResponse: IResponseType = { + const finalResponse: IResponse = { statusCode: HttpStatus.OK, message: ResponseMessages.user.success.checkEmail, data: userDetails @@ -258,17 +261,20 @@ export class UserController { return res.status(HttpStatus.OK).json(finalResponse); } - + /** + * @param credentialId + * @returns User credentials + */ @Get('/user-credentials/:credentialId') @ApiOperation({ summary: 'Get user credentials by Id', description: 'Get user credentials by Id' }) - @ApiResponse({ status: 200, description: 'Success', type: ApiResponseDto }) + @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) async getUserCredentialsById(@Param('credentialId') credentialId: string, @Res() res: Response): Promise { const getUserCrdentialsById = await this.userService.getUserCredentialsById(credentialId); - const finalResponse: IResponseType = { + const finalResponse: IResponse = { statusCode: HttpStatus.OK, message: ResponseMessages.user.success.userCredentials, - data: getUserCrdentialsById.response + data: getUserCrdentialsById }; return res.status(HttpStatus.OK).json(finalResponse); } @@ -296,33 +302,36 @@ export class UserController { acceptRejectInvitation.invitationId = invitationId; const invitationRes = await this.userService.acceptRejectInvitaion(acceptRejectInvitation, reqUser.id); - const finalResponse: IResponseType = { + const finalResponse: IResponse = { statusCode: HttpStatus.CREATED, message: invitationRes.response }; return res.status(HttpStatus.CREATED).json(finalResponse); } - + /** + * @Body shareUserCredentials + * @returns User certificate url + */ @Post('/certificate') @ApiOperation({ summary: 'Share user certificate', description: 'Share user certificate' }) - @ApiResponse({ status: 200, description: 'Success', type: ApiResponseDto }) + @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) async shareUserCertificate( @Body() shareUserCredentials: CreateUserCertificateDto, @Res() res: Response - ): Promise { + ): Promise { const schemaIdParts = shareUserCredentials.schemaId.split(':'); // eslint-disable-next-line prefer-destructuring const title = schemaIdParts[2]; const imageBuffer = await this.userService.shareUserCertificate(shareUserCredentials); - const finalResponse: IResponseType = { + const finalResponse: IResponse = { statusCode: HttpStatus.CREATED, - message: 'Certificate url generated successfully', + message: ResponseMessages.user.success.shareUserCertificate, label: title, - data: imageBuffer.response + data: imageBuffer }; return res.status(HttpStatus.CREATED).json(finalResponse); } @@ -344,7 +353,7 @@ export class UserController { updateUserProfileDto.id = userId; await this.userService.updateUserProfile(updateUserProfileDto); - const finalResponse: IResponseType = { + const finalResponse: IResponse = { statusCode: HttpStatus.OK, message: ResponseMessages.user.success.update }; @@ -370,6 +379,11 @@ export class UserController { return res.status(HttpStatus.OK).json(finalResponse); } + /** + * @Body platformSettings + * @returns platform and ecosystem settings updated status + */ + @Put('/platform-settings') @ApiOperation({ summary: 'Update platform and ecosystem settings', @@ -386,7 +400,7 @@ export class UserController { const finalResponse = { statusCode: HttpStatus.OK, - message: result.response + message: result }; return res.status(HttpStatus.OK).json(finalResponse); diff --git a/apps/api-gateway/src/user/user.service.ts b/apps/api-gateway/src/user/user.service.ts index 221c7d8d4..2859de6f9 100644 --- a/apps/api-gateway/src/user/user.service.ts +++ b/apps/api-gateway/src/user/user.service.ts @@ -63,7 +63,7 @@ export class UserService extends BaseService { shareUserCredentials: CreateUserCertificateDto ): Promise<{ response: Buffer }> { const payload = { shareUserCredentials}; - return this.sendNats(this.serviceProxy, 'share-user-certificate', payload); + return this.sendNatsMessage(this.serviceProxy, 'share-user-certificate', payload); } async get( @@ -91,10 +91,10 @@ export class UserService extends BaseService { async updatePlatformSettings(platformSettings: UpdatePlatformSettingsDto): Promise<{ response: string }> { const payload = { platformSettings }; - return this.sendNats(this.serviceProxy, 'update-platform-settings', payload); + return this.sendNatsMessage(this.serviceProxy, 'update-platform-settings', payload); } async getPlatformSettings(): Promise<{ response: object }> { - return this.sendNats(this.serviceProxy, 'fetch-platform-settings', ''); + return this.sendNatsMessage(this.serviceProxy, 'fetch-platform-settings', ''); } } diff --git a/apps/user/src/user.controller.ts b/apps/user/src/user.controller.ts index 001995d69..59579ac01 100644 --- a/apps/user/src/user.controller.ts +++ b/apps/user/src/user.controller.ts @@ -68,8 +68,10 @@ export class UserController { async findUserByEmail(payload: { email }): Promise { return this.userService.findUserByEmail(payload); } - - + /** + * @param credentialId + * @returns User credentials + */ @MessagePattern({ cmd: 'get-user-credentials-by-id' }) async getUserCredentialsById(payload: { credentialId }): Promise { return this.userService.getUserCredentialsById(payload); @@ -94,9 +96,8 @@ export class UserController { } /** - * * @param payload - * @returns Share user certificate + * @returns User certificate url */ @MessagePattern({ cmd: 'share-user-certificate' }) async shareUserCertificate(payload: { @@ -152,12 +153,16 @@ export class UserController { async addPasskey(payload: { userEmail: string, userInfo: AddPasskeyDetails }): Promise { return this.userService.addPasskey(payload.userEmail, payload.userInfo); } - + /** + * @returns platform and ecosystem settings updated status + */ @MessagePattern({ cmd: 'update-platform-settings' }) async updatePlatformSettings(payload: { platformSettings: PlatformSettings }): Promise { return this.userService.updatePlatformSettings(payload.platformSettings); } - + /** + * @returns platform and ecosystem settings + */ @MessagePattern({ cmd: 'fetch-platform-settings' }) async getPlatformEcosystemSettings(): Promise { return this.userService.getPlatformEcosystemSettings(); diff --git a/apps/user/src/user.service.ts b/apps/user/src/user.service.ts index cfe82bf9d..b81c64ed8 100644 --- a/apps/user/src/user.service.ts +++ b/apps/user/src/user.service.ts @@ -457,6 +457,7 @@ export class UserService { if (!userData) { throw new NotFoundException(ResponseMessages.user.error.notFound); } + const invitationsData = await this.getOrgInvitations( userData.email, @@ -464,10 +465,11 @@ export class UserService { payload.pageNumber, payload.pageSize, payload.search - ); - - const invitations: OrgInvitations[] = await this.updateOrgInvitations(invitationsData['invitations']); - invitationsData['invitations'] = invitations; + ); + + const invitations: OrgInvitations[] = await this.updateOrgInvitations(invitationsData['invitations']); + invitationsData['invitations'] = invitations; + return invitationsData; } catch (error) { @@ -510,6 +512,8 @@ export class UserService { } async updateOrgInvitations(invitations: OrgInvitations[]): Promise { + + const updatedInvitations = []; for (const invitation of invitations) { @@ -546,10 +550,6 @@ export class UserService { } } - /** - * - * @returns - */ async shareUserCertificate(shareUserCertificate: ShareUserCertificate): Promise { const attributeArray = []; diff --git a/libs/common/src/response-messages/index.ts b/libs/common/src/response-messages/index.ts index 404ef907a..a3600669a 100644 --- a/libs/common/src/response-messages/index.ts +++ b/libs/common/src/response-messages/index.ts @@ -18,7 +18,8 @@ export const ResponseMessages = { userCredentials: 'User credentials fetched successfully', platformEcosystemettings: 'Platform and ecosystem settings updated', fetchPlatformSettings: 'Platform settings fetched', - signUpUser:'User created successfully' + signUpUser:'User created successfully', + shareUserCertificate:'Certificate url generated successfully' }, error: { exists: 'User already exists', From f549285ff4a4e3612dade21e11eb86e0b882aa07 Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Thu, 28 Dec 2023 17:48:44 +0530 Subject: [PATCH 3/4] refactor:check user exist api flags Signed-off-by: pranalidhanavade --- apps/user/interfaces/user.interface.ts | 2 +- apps/user/src/user.service.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/user/interfaces/user.interface.ts b/apps/user/interfaces/user.interface.ts index 0e72a5fe0..5198953b7 100644 --- a/apps/user/interfaces/user.interface.ts +++ b/apps/user/interfaces/user.interface.ts @@ -113,7 +113,7 @@ export interface ISendVerificationEmail { } export interface ICheckUserDetails { - isRegistered: boolean; + isRegistrationCompleted: boolean; isEmailVerified?: boolean; isFidoVerified?: boolean; isAuthenticated?: boolean; diff --git a/apps/user/src/user.service.ts b/apps/user/src/user.service.ts index b81c64ed8..324bb890b 100644 --- a/apps/user/src/user.service.ts +++ b/apps/user/src/user.service.ts @@ -735,14 +735,14 @@ export class UserService { throw new ConflictException(ResponseMessages.user.error.exists); } else if (null === userDetails) { return { - isRegistered: false + isRegistrationCompleted: false }; } else { const userVerificationDetails = { isEmailVerified: userDetails.isEmailVerified, isFidoVerified: userDetails.isFidoVerified, isAuthenticated: null !== userDetails.supabaseUserId && undefined !== userDetails.supabaseUserId, - isRegistered: true + isRegistrationCompleted: true }; return userVerificationDetails; } From a3e14a9342908d769b1632c1d015333ad455d465 Mon Sep 17 00:00:00 2001 From: pranalidhanavade Date: Thu, 28 Dec 2023 20:08:47 +0530 Subject: [PATCH 4/4] refactor:get organization invitations api Signed-off-by: pranalidhanavade --- apps/api-gateway/src/user/user.controller.ts | 9 +++-- apps/api-gateway/src/user/user.service.ts | 5 +-- apps/user/interfaces/user.interface.ts | 35 +++++--------------- apps/user/repositories/user.repository.ts | 4 +-- apps/user/src/user.controller.ts | 13 +++++--- apps/user/src/user.service.ts | 19 +++++------ libs/common/src/interfaces/user.interface.ts | 25 +++++++++++++- libs/common/src/response-messages/index.ts | 2 +- 8 files changed, 61 insertions(+), 51 deletions(-) diff --git a/apps/api-gateway/src/user/user.controller.ts b/apps/api-gateway/src/user/user.controller.ts index 07bc23201..c754681ee 100644 --- a/apps/api-gateway/src/user/user.controller.ts +++ b/apps/api-gateway/src/user/user.controller.ts @@ -191,6 +191,9 @@ export class UserController { return res.status(HttpStatus.OK).json(finalResponse); } + /** + * @returns Organization invitation data + */ @Get('/org-invitations') @ApiOperation({ @@ -223,7 +226,7 @@ export class UserController { @Query() getAllInvitationsDto: GetAllInvitationsDto, @User() reqUser: user, @Res() res: Response - ): Promise { + ): Promise { if (!Object.values(Invitation).includes(getAllInvitationsDto.status)) { throw new BadRequestException(ResponseMessages.user.error.invalidInvitationStatus); } @@ -237,7 +240,7 @@ export class UserController { const finalResponse: IResponse = { statusCode: HttpStatus.OK, message: ResponseMessages.user.success.fetchInvitations, - data: invitations.response + data: invitations }; return res.status(HttpStatus.OK).json(finalResponse); @@ -310,7 +313,7 @@ export class UserController { } /** * @Body shareUserCredentials - * @returns User certificate url + * @returns User certificate URL */ @Post('/certificate') @ApiOperation({ diff --git a/apps/api-gateway/src/user/user.service.ts b/apps/api-gateway/src/user/user.service.ts index 2859de6f9..75dbee98a 100644 --- a/apps/api-gateway/src/user/user.service.ts +++ b/apps/api-gateway/src/user/user.service.ts @@ -11,6 +11,7 @@ import { UpdatePlatformSettingsDto } from './dto/update-platform-settings.dto'; import { CreateUserCertificateDto } from './dto/share-certificate.dto'; import { IUsersProfile, ICheckUserDetails } from 'apps/user/interfaces/user.interface'; import { IUsersActivity } from 'libs/user-activity/interface'; +import { IUserInvitations } from '@credebl/common/interfaces/user.interface'; @Injectable() export class UserService extends BaseService { @@ -45,10 +46,10 @@ export class UserService extends BaseService { } - async invitations(id: string, status: string, getAllInvitationsDto: GetAllInvitationsDto): Promise<{ response: object }> { + async invitations(id: string, status: string, getAllInvitationsDto: GetAllInvitationsDto): Promise { const { pageNumber, pageSize, search } = getAllInvitationsDto; const payload = { id, status, pageNumber, pageSize, search }; - return this.sendNats(this.serviceProxy, 'get-org-invitations', payload); + return this.sendNatsMessage(this.serviceProxy, 'get-org-invitations', payload); } async acceptRejectInvitaion( diff --git a/apps/user/interfaces/user.interface.ts b/apps/user/interfaces/user.interface.ts index 5198953b7..9e2c420de 100644 --- a/apps/user/interfaces/user.interface.ts +++ b/apps/user/interfaces/user.interface.ts @@ -1,27 +1,3 @@ -export interface UserInvitations { - totalPages:number; - userInvitationsData:UserInvitationsData[]; -} -export interface UserInvitationsData { - orgRoles: OrgRole[]; - status: string; - id: string; - orgId: string; - organisation: Organisation; - userId: string; -} -export interface OrgRole { - id: string; - name: string; - description: string; -} - -export interface Organisation { - id: string; - name: string; - logoUrl: string; -} - export interface IUsersProfile { id: string; username?: string; @@ -113,13 +89,13 @@ export interface ISendVerificationEmail { } export interface ICheckUserDetails { - isRegistrationCompleted: boolean; + isExist: boolean; isEmailVerified?: boolean; isFidoVerified?: boolean; - isAuthenticated?: boolean; + isSupabase?: boolean; } - export interface UserCredentials { + export interface IUserCredentials { id: string; imageUrl?: string; credentialId?: string; @@ -150,6 +126,11 @@ export interface ISendVerificationEmail { orgRole: OrgRole; organisation: Organization } + interface OrgRole { + id: string; + name: string; + description: string; + } interface Organization { id: string, diff --git a/apps/user/repositories/user.repository.ts b/apps/user/repositories/user.repository.ts index 6dbb300cd..940dd67e5 100644 --- a/apps/user/repositories/user.repository.ts +++ b/apps/user/repositories/user.repository.ts @@ -6,7 +6,7 @@ import { PlatformSettings, ShareUserCertificate, UpdateUserProfile, - UserCredentials, + IUserCredentials, ISendVerificationEmail, IUsersProfile, IUserInformation, @@ -110,7 +110,7 @@ export class UserRepository { * @param id * @returns User profile data */ - async getUserCredentialsById(credentialId: string): Promise { + async getUserCredentialsById(credentialId: string): Promise { return this.prisma.user_credentials.findUnique({ where: { credentialId diff --git a/apps/user/src/user.controller.ts b/apps/user/src/user.controller.ts index 59579ac01..b3ff31f22 100644 --- a/apps/user/src/user.controller.ts +++ b/apps/user/src/user.controller.ts @@ -1,4 +1,4 @@ -import { AddPasskeyDetails, ICheckUserDetails, PlatformSettings, ShareUserCertificate, UpdateUserProfile, UserCredentials, IUsersProfile, UserInvitations, IUserInformation, IUserSignIn} from '../interfaces/user.interface'; +import { AddPasskeyDetails, ICheckUserDetails, PlatformSettings, ShareUserCertificate, UpdateUserProfile, IUserCredentials, IUsersProfile, IUserInformation, IUserSignIn} from '../interfaces/user.interface'; import {IOrgUsers, Payload} from '../interfaces/user.interface'; import { AcceptRejectInvitationDto } from '../dtos/accept-reject-invitation.dto'; @@ -8,7 +8,7 @@ import { UserService } from './user.service'; import { VerifyEmailTokenDto } from '../dtos/verify-email.dto'; import { user } from '@prisma/client'; import { IUsersActivity } from 'libs/user-activity/interface'; -import { ISendVerificationEmail, ISignInUser, IVerifyUserEmail } from '@credebl/common/interfaces/user.interface'; +import { ISendVerificationEmail, ISignInUser, IVerifyUserEmail, IUserInvitations } from '@credebl/common/interfaces/user.interface'; @Controller() export class UserController { @@ -73,12 +73,15 @@ export class UserController { * @returns User credentials */ @MessagePattern({ cmd: 'get-user-credentials-by-id' }) - async getUserCredentialsById(payload: { credentialId }): Promise { + async getUserCredentialsById(payload: { credentialId }): Promise { return this.userService.getUserCredentialsById(payload); } + /** + * @returns Organization invitation data + */ @MessagePattern({ cmd: 'get-org-invitations' }) - async invitations(payload: { id; status; pageNumber; pageSize; search; }): Promise { + async invitations(payload: { id; status; pageNumber; pageSize; search; }): Promise { return this.userService.invitations(payload); } @@ -97,7 +100,7 @@ export class UserController { /** * @param payload - * @returns User certificate url + * @returns User certificate URL */ @MessagePattern({ cmd: 'share-user-certificate' }) async shareUserCertificate(payload: { diff --git a/apps/user/src/user.service.ts b/apps/user/src/user.service.ts index 324bb890b..97c17b3cc 100644 --- a/apps/user/src/user.service.ts +++ b/apps/user/src/user.service.ts @@ -35,10 +35,9 @@ import { ShareUserCertificate, IOrgUsers, UpdateUserProfile, - UserCredentials, + IUserCredentials, IUserInformation, - IUsersProfile, - UserInvitations + IUsersProfile } from '../interfaces/user.interface'; import { AcceptRejectInvitationDto } from '../dtos/accept-reject-invitation.dto'; import { UserActivityService } from '@credebl/user-activity'; @@ -55,7 +54,7 @@ import { AwsService } from '@credebl/aws'; import puppeteer from 'puppeteer'; import { WorldRecordTemplate } from '../templates/world-record-template'; import { IUsersActivity } from 'libs/user-activity/interface'; -import { ISendVerificationEmail, ISignInUser, IVerifyUserEmail } from '@credebl/common/interfaces/user.interface'; +import { ISendVerificationEmail, ISignInUser, IVerifyUserEmail, IUserInvitations } from '@credebl/common/interfaces/user.interface'; @Injectable() export class UserService { @@ -402,7 +401,7 @@ export class UserService { } } - async getUserCredentialsById(payload: { credentialId }): Promise { + async getUserCredentialsById(payload: { credentialId }): Promise { try { const userCredentials = await this.userRepository.getUserCredentialsById(payload.credentialId); if (!userCredentials) { @@ -451,7 +450,7 @@ export class UserService { } } - async invitations(payload: { id; status; pageNumber; pageSize; search }): Promise { + async invitations(payload: { id; status; pageNumber; pageSize; search }): Promise { try { const userData = await this.userRepository.getUserById(payload.id); if (!userData) { @@ -484,7 +483,7 @@ export class UserService { pageNumber: number, pageSize: number, search = '' - ): Promise { + ): Promise { const pattern = { cmd: 'fetch-user-invitations' }; const payload = { email, @@ -735,14 +734,14 @@ export class UserService { throw new ConflictException(ResponseMessages.user.error.exists); } else if (null === userDetails) { return { - isRegistrationCompleted: false + isExist: false }; } else { const userVerificationDetails = { isEmailVerified: userDetails.isEmailVerified, isFidoVerified: userDetails.isFidoVerified, - isAuthenticated: null !== userDetails.supabaseUserId && undefined !== userDetails.supabaseUserId, - isRegistrationCompleted: true + isSupabase: null !== userDetails.supabaseUserId && undefined !== userDetails.supabaseUserId, + isExist: true }; return userVerificationDetails; } diff --git a/libs/common/src/interfaces/user.interface.ts b/libs/common/src/interfaces/user.interface.ts index 695b76747..6bcf7a6ea 100644 --- a/libs/common/src/interfaces/user.interface.ts +++ b/libs/common/src/interfaces/user.interface.ts @@ -13,4 +13,27 @@ export interface ISignInUser { email: string; username?: string; } - \ No newline at end of file + + export interface IUserInvitations { + totalPages:number; + userInvitationsData:IUserInvitationsData[]; + } + export interface IUserInvitationsData { + orgRoles: IOrgRole[]; + status: string; + id: string; + orgId: string; + organisation: IOrganisation; + userId: string; + } + export interface IOrgRole { + id: string; + name: string; + description: string; + } + + export interface IOrganisation { + id: string; + name: string; + logoUrl: string; + } \ No newline at end of file diff --git a/libs/common/src/response-messages/index.ts b/libs/common/src/response-messages/index.ts index 8741bdf67..73dcf6746 100644 --- a/libs/common/src/response-messages/index.ts +++ b/libs/common/src/response-messages/index.ts @@ -19,7 +19,7 @@ export const ResponseMessages = { platformEcosystemettings: 'Platform and ecosystem settings updated', fetchPlatformSettings: 'Platform settings fetched', signUpUser:'User created successfully', - shareUserCertificate:'Certificate url generated successfully' + shareUserCertificate:'Certificate URL generated successfully' }, error: { exists: 'User already exists',