Skip to content

Commit 79ada17

Browse files
authored
feat: Updated search parameter for Credentials and Verification api (#1403)
* wip Signed-off-by: Sujit <[email protected]> * fix/credentials list filter update Signed-off-by: Sujit <[email protected]> * fix/verification filters updated Signed-off-by: Sujit <[email protected]> * fix/sonar qube comment Signed-off-by: Sujit <[email protected]> * fix/sonar qube comment Signed-off-by: Sujit <[email protected]> * fix/sonar comments Signed-off-by: Sujit <[email protected]> * fix/pr comments Signed-off-by: Sujit <[email protected]> * fix/pr comments Signed-off-by: Sujit <[email protected]> * fix/pr comments Signed-off-by: Sujit <[email protected]> --------- Signed-off-by: Sujit <[email protected]>
1 parent d4c1523 commit 79ada17

File tree

4 files changed

+156
-46
lines changed

4 files changed

+156
-46
lines changed
Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,29 @@
11
export enum SortFields {
2-
CREATED_DATE_TIME = 'createDateTime',
3-
SCHEMA_ID = 'schemaId',
4-
CONNECTION_ID = 'connectionId',
5-
STATE = 'state'
6-
}
2+
CREATED_DATE_TIME = 'createDateTime',
3+
SCHEMA_ID = 'schemaId',
4+
CONNECTION_ID = 'connectionId',
5+
STATE = 'state'
6+
}
7+
8+
export enum IssueCredentials {
9+
proposalSent = 'proposal-sent',
10+
proposalReceived = 'proposal-received',
11+
offerSent = 'offer-sent',
12+
offerReceived = 'offer-received',
13+
declined = 'decliend',
14+
requestSent = 'request-sent',
15+
requestReceived = 'request-received',
16+
credentialIssued = 'credential-issued',
17+
credentialReceived = 'credential-received',
18+
done = 'done',
19+
abandoned = 'abandoned'
20+
}
21+
22+
export enum IssuedCredentialStatus {
23+
offerSent = 'Offered',
24+
done = 'Accepted',
25+
abandoned = 'Declined',
26+
received = 'Pending',
27+
proposalReceived = 'Proposal Received',
28+
credIssued = 'Credential Issued'
29+
}

apps/issuance/src/issuance.repository.ts

Lines changed: 61 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
org_agents,
2020
organisation,
2121
platform_config,
22+
Prisma,
2223
schema
2324
} from '@prisma/client';
2425

@@ -28,6 +29,7 @@ import { IIssuedCredentialSearchParams } from 'apps/api-gateway/src/issuance/int
2829
import { IUserRequest } from '@credebl/user-request/user-request.interface';
2930
import { PrismaService } from '@credebl/prisma-service';
3031
import { ResponseMessages } from '@credebl/common/response-messages';
32+
import { IssueCredentials, IssuedCredentialStatus } from '../enum/issuance.enum';
3133

3234
@Injectable()
3335
export class IssuanceRepository {
@@ -127,19 +129,66 @@ export class IssuanceRepository {
127129
}[];
128130
}> {
129131
try {
130-
const issuedCredentialsList = await this.prisma.credentials.findMany({
132+
const schemas = await this.prisma.schema.findMany({
131133
where: {
132-
orgId,
133-
...(schemaIds?.length ? { schemaId: { in: schemaIds } } : {}),
134-
...(!schemaIds?.length && issuedCredentialsSearchCriteria.search
135-
? {
136-
OR: [
137-
{ connectionId: { contains: issuedCredentialsSearchCriteria.search, mode: 'insensitive' } },
138-
{ schemaId: { contains: issuedCredentialsSearchCriteria.search, mode: 'insensitive' } }
139-
]
140-
}
141-
: {})
134+
name: { contains: issuedCredentialsSearchCriteria.search, mode: 'insensitive' }
142135
},
136+
select: { schemaLedgerId: true }
137+
});
138+
139+
const schemaIdsMatched = schemas.map((s) => s.schemaLedgerId);
140+
let stateInfo = null;
141+
switch (issuedCredentialsSearchCriteria.search.toLowerCase()) {
142+
case IssuedCredentialStatus.offerSent.toLowerCase():
143+
stateInfo = IssueCredentials.offerSent;
144+
break;
145+
146+
case IssuedCredentialStatus.done.toLowerCase():
147+
stateInfo = IssueCredentials.done;
148+
break;
149+
150+
case IssuedCredentialStatus.abandoned.toLowerCase():
151+
stateInfo = IssueCredentials.abandoned;
152+
break;
153+
154+
case IssuedCredentialStatus.received.toLowerCase():
155+
stateInfo = IssueCredentials.requestReceived;
156+
break;
157+
158+
case IssuedCredentialStatus.proposalReceived.toLowerCase():
159+
stateInfo = IssueCredentials.proposalReceived;
160+
break;
161+
162+
case IssuedCredentialStatus.credIssued.toLowerCase():
163+
stateInfo = IssueCredentials.offerSent;
164+
break;
165+
166+
default:
167+
stateInfo = null;
168+
}
169+
170+
const issuanceWhereClause: Prisma.credentialsWhereInput = {
171+
orgId,
172+
...(schemaIds?.length ? { schemaId: { in: schemaIds } } : {}),
173+
...(!schemaIds?.length && issuedCredentialsSearchCriteria.search
174+
? {
175+
OR: [
176+
{ connectionId: { contains: issuedCredentialsSearchCriteria.search, mode: 'insensitive' } },
177+
{ schemaId: { contains: issuedCredentialsSearchCriteria.search, mode: 'insensitive' } },
178+
{ schemaId: { in: schemaIdsMatched } },
179+
{
180+
connections: {
181+
theirLabel: { contains: issuedCredentialsSearchCriteria.search, mode: 'insensitive' }
182+
}
183+
},
184+
{ state: { contains: stateInfo ?? issuedCredentialsSearchCriteria.search, mode: 'insensitive' } }
185+
]
186+
}
187+
: {})
188+
};
189+
190+
const issuedCredentialsList = await this.prisma.credentials.findMany({
191+
where: issuanceWhereClause,
143192
select: {
144193
credentialExchangeId: true,
145194
createDateTime: true,
@@ -162,18 +211,7 @@ export class IssuanceRepository {
162211
skip: (issuedCredentialsSearchCriteria.pageNumber - 1) * issuedCredentialsSearchCriteria.pageSize
163212
});
164213
const issuedCredentialsCount = await this.prisma.credentials.count({
165-
where: {
166-
orgId,
167-
...(schemaIds?.length ? { schemaId: { in: schemaIds } } : {}),
168-
...(!schemaIds?.length && issuedCredentialsSearchCriteria.search
169-
? {
170-
OR: [
171-
{ connectionId: { contains: issuedCredentialsSearchCriteria.search, mode: 'insensitive' } },
172-
{ schemaId: { contains: issuedCredentialsSearchCriteria.search, mode: 'insensitive' } }
173-
]
174-
}
175-
: {})
176-
}
214+
where: issuanceWhereClause
177215
});
178216

179217
return { issuedCredentialsCount, issuedCredentialsList };

apps/verification/src/interfaces/verification.interface.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,3 +278,23 @@ export interface IEmailResponse {
278278
outOfBandRecordId: string;
279279
proofRecordThId: string;
280280
}
281+
282+
export enum ProofRequest {
283+
presentationReceived = 'presentation-received',
284+
offerReceived = 'offer-received',
285+
declined = 'decliend',
286+
requestSent = 'request-sent',
287+
requestReceived = 'request-received',
288+
credentialIssued = 'credential-issued',
289+
credentialReceived = 'credential-received',
290+
done = 'done',
291+
abandoned = 'abandoned'
292+
}
293+
294+
export enum ProofRequestState {
295+
requestSent = 'Requested',
296+
requestReceived = 'Received',
297+
done = 'Verified',
298+
abandoned = 'Declined',
299+
presentationReceived = 'Presentation Received'
300+
}

apps/verification/src/repositories/verification.repository.ts

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1-
import { IEmailResponse, IProofPresentation, IProofRequestSearchCriteria } from '../interfaces/verification.interface';
1+
import {
2+
IEmailResponse,
3+
IProofPresentation,
4+
IProofRequestSearchCriteria,
5+
ProofRequest,
6+
ProofRequestState
7+
} from '../interfaces/verification.interface';
28
import { IProofPresentationsListCount, IVerificationRecords } from '@credebl/common/interfaces/verification.interface';
39
import { Injectable, Logger, NotFoundException } from '@nestjs/common';
410
// eslint-disable-next-line camelcase
5-
import { agent_invitations, org_agents, organisation, platform_config, presentations } from '@prisma/client';
11+
import { agent_invitations, org_agents, organisation, platform_config, presentations, Prisma } from '@prisma/client';
612

713
import { CommonService } from '@credebl/common';
814
import { IUserRequest } from '@credebl/user-request/user-request.interface';
@@ -87,15 +93,45 @@ export class VerificationRepository {
8793
proofRequestsSearchCriteria: IProofRequestSearchCriteria
8894
): Promise<IProofPresentationsListCount> {
8995
try {
96+
let verificationStateInfo = null;
97+
98+
switch (proofRequestsSearchCriteria.search.toLowerCase()) {
99+
case ProofRequestState.requestSent.toLowerCase():
100+
verificationStateInfo = ProofRequest.requestSent;
101+
break;
102+
case ProofRequestState.requestReceived.toLowerCase():
103+
verificationStateInfo = ProofRequest.requestReceived;
104+
break;
105+
case ProofRequestState.done.toLowerCase():
106+
verificationStateInfo = ProofRequest.done;
107+
break;
108+
case ProofRequestState.abandoned.toLowerCase():
109+
verificationStateInfo = ProofRequest.abandoned;
110+
break;
111+
case ProofRequestState.presentationReceived.toLowerCase():
112+
verificationStateInfo = ProofRequest.presentationReceived;
113+
break;
114+
default:
115+
verificationStateInfo = null;
116+
}
117+
118+
const whereClause: Prisma.presentationsWhereInput = {
119+
orgId,
120+
OR: [
121+
{ connectionId: { contains: proofRequestsSearchCriteria.search, mode: 'insensitive' } },
122+
{ presentationId: { contains: proofRequestsSearchCriteria.search, mode: 'insensitive' } },
123+
{ emailId: { contains: proofRequestsSearchCriteria.search, mode: 'insensitive' } },
124+
{
125+
connections: {
126+
theirLabel: { contains: proofRequestsSearchCriteria.search, mode: 'insensitive' }
127+
}
128+
},
129+
{ state: { contains: verificationStateInfo ?? proofRequestsSearchCriteria.search, mode: 'insensitive' } }
130+
]
131+
};
132+
90133
const proofRequestsList = await this.prisma.presentations.findMany({
91-
where: {
92-
orgId,
93-
OR: [
94-
{ connectionId: { contains: proofRequestsSearchCriteria.search, mode: 'insensitive' } },
95-
{ state: { contains: proofRequestsSearchCriteria.search, mode: 'insensitive' } },
96-
{ presentationId: { contains: proofRequestsSearchCriteria.search, mode: 'insensitive' } }
97-
]
98-
},
134+
where: whereClause,
99135
select: {
100136
createDateTime: true,
101137
createdBy: true,
@@ -122,14 +158,7 @@ export class VerificationRepository {
122158
});
123159

124160
const proofRequestsCount = await this.prisma.presentations.count({
125-
where: {
126-
orgId,
127-
OR: [
128-
{ connectionId: { contains: proofRequestsSearchCriteria.search, mode: 'insensitive' } },
129-
{ state: { contains: proofRequestsSearchCriteria.search, mode: 'insensitive' } },
130-
{ presentationId: { contains: proofRequestsSearchCriteria.search, mode: 'insensitive' } }
131-
]
132-
}
161+
where: whereClause
133162
});
134163

135164
return { proofRequestsCount, proofRequestsList };

0 commit comments

Comments
 (0)