Skip to content

Commit

Permalink
fix policy statistics
Browse files Browse the repository at this point in the history
Signed-off-by: Stepan Kiryakov <[email protected]>
  • Loading branch information
Stepan-Kirjakov committed Oct 16, 2024
1 parent 133ee9f commit 3161c8b
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export class SchemaNode extends TreeNode<SchemaData> {

public static from(schema: Schema, properties: Map<string, string>): SchemaNode {
const id = schema.iri;
const type = schema.entity === 'VC' ? 'root' : 'sub';
const type = (schema.entity === 'VC' || schema.category === 'SYSTEM') ? 'root' : 'sub';
const data = {
iri: schema.iri || '',
name: schema.name || '',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -261,14 +261,23 @@ export class StatisticDefinitionsComponent implements OnInit {
}

public onCreateInstance(item: any): void {
if (item.status !== 'PUBLISHED') {
return;
}
this.router.navigate(['/policy-statistics', item.id, 'assessment']);
}

public onOpenInstances(item: any): void {
if (item.status !== 'PUBLISHED') {
return;
}
this.router.navigate(['/policy-statistics', item.id, 'assessments']);
}

public onDelete(item: any) {
if (item.status === 'PUBLISHED') {
return;
}
const dialogRef = this.dialogService.open(CustomCustomDialogComponent, {
showHeader: false,
width: '640px',
Expand Down
56 changes: 41 additions & 15 deletions guardian-service/src/api/helpers/policy-statistics-helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,60 @@ import { DatabaseServer, PolicyStatistic, SchemaConverterUtils, TopicConfig, Top
import { GenerateUUIDv4, IFormulaData, IOwner, IRuleData, IScoreData, IScoreOption, IStatisticConfig, IVariableData, PolicyType, Schema, SchemaCategory, SchemaHelper, SchemaStatus, TopicType } from '@guardian/interfaces';
import { generateSchemaContext } from './schema-publish-helper.js';

export async function addRelationship(
messageId: string,
relationships: Set<string>
) {
export async function addPrevRelationships(doc: VcDocument, relationships: Set<string>) {
if (doc && doc.relationships) {
for (const id of doc.relationships) {
await addPrevRelationship(id, relationships);
}
}
}

export async function addPrevRelationship(messageId: string, relationships: Set<string>) {
if (!messageId || relationships.has(messageId)) {
return;
}
relationships.add(messageId);
const doc = await DatabaseServer.getStatisticDocument({ messageId });
if (doc && doc.relationships) {
for (const id of doc.relationships) {
await addRelationship(id, relationships);
const doc = await DatabaseServer.getStatisticDocument({ messageId }, {
fields: ['id', 'messageId', 'relationships']
});
await addPrevRelationships(doc, relationships);
}

export async function addNextRelationships(relationships: Set<string>) {
const docs = await DatabaseServer.getStatisticDocuments({
relationships: { $in: Array.from(relationships) }
}, {
fields: ['id', 'messageId', 'relationships']
});
const count = relationships.size;
for (const doc of docs) {
if (doc.messageId) {
relationships.add(doc.messageId);
}
}
if (relationships.size > count) {
await addNextRelationships(relationships);
}
}

export async function findRelationships(
target: VcDocument,
subDocs: VcDocument[],
): Promise<VcDocument[]> {
const relationships = new Set<string>();
relationships.add(target.messageId);
if (target && target.relationships) {
for (const id of target.relationships) {
await addRelationship(id, relationships);
}
if (!target) {
return [];
}
return subDocs.filter((doc) => relationships.has(doc.messageId));

const prevRelationships = new Set<string>();
prevRelationships.add(target.messageId);

const nextRelationships = new Set<string>();
nextRelationships.add(target.messageId);

await addPrevRelationships(target, prevRelationships);
await addNextRelationships(nextRelationships);

return subDocs.filter((doc) => prevRelationships.has(doc.messageId) || nextRelationships.has(doc.messageId));
}

export async function generateSchema(config: PolicyStatistic, owner: IOwner) {
Expand Down
12 changes: 10 additions & 2 deletions guardian-service/src/api/policy-statistics.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -157,15 +157,23 @@ export async function statisticsAPI(logger: PinoLogger): Promise<void> {
if (!(item && (item.creator === owner.creator || item.status === EntityStatus.PUBLISHED))) {
return new MessageError('Item does not exist.');
}

const policyId = item.policyId;
const policy = await DatabaseServer.getPolicyById(policyId);
if (!policy || policy.status !== PolicyType.PUBLISH) {
if (!policy || !policy.topicId || policy.status !== PolicyType.PUBLISH) {
return new MessageError('Item does not exist.');
}

const { schemas, toolSchemas } = await PolicyImportExport.loadAllSchemas(policy);
const systemSchemas = await DatabaseServer.getSchemas({
topicId: policy.topicId,
entity: { $in: [SchemaEntity.MINT_TOKEN, SchemaEntity.MINT_NFTOKEN] }
});

const all = []
.concat(schemas, toolSchemas)
.concat(schemas, toolSchemas, systemSchemas)
.filter((s) => s.status === SchemaStatus.PUBLISHED && s.entity !== 'EVC');

if (item.status === EntityStatus.PUBLISHED) {
const schema = await DatabaseServer.getSchema({ topicId: item.topicId });
return new MessageResponse({
Expand Down

0 comments on commit 3161c8b

Please sign in to comment.