@sphereon/ssi-sdk.data-store
Version:
152 lines • 8.15 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PDStore = void 0;
const typeorm_1 = require("typeorm");
const AbstractPDStore_1 = require("./AbstractPDStore");
const debug_1 = __importDefault(require("debug"));
const PresentationDefinitionItemEntity_1 = require("../entities/presentationDefinition/PresentationDefinitionItemEntity");
const MappingUtils_1 = require("../utils/presentationDefinition/MappingUtils");
const debug = (0, debug_1.default)('sphereon:ssi-sdk:pd-store');
class PDStore extends AbstractPDStore_1.AbstractPDStore {
constructor(dbConnection) {
super();
this.getDefinition = (args) => __awaiter(this, void 0, void 0, function* () {
const { itemId } = args !== null && args !== void 0 ? args : {};
const pdRepository = (yield this.dbConnection).getRepository(PresentationDefinitionItemEntity_1.PresentationDefinitionItemEntity);
const result = yield pdRepository.findOne({
where: { id: itemId },
});
if (!result) {
return Promise.reject(Error(`No presentation definition item found for id: ${itemId}`));
}
return (0, MappingUtils_1.presentationDefinitionItemFrom)(result);
});
this.hasDefinition = (args) => __awaiter(this, void 0, void 0, function* () {
const { itemId } = args !== null && args !== void 0 ? args : {};
const pdRepository = (yield this.dbConnection).getRepository(PresentationDefinitionItemEntity_1.PresentationDefinitionItemEntity);
const resultCount = yield pdRepository.count({
where: { id: itemId },
});
return resultCount > 0;
});
this.hasDefinitions = (args) => __awaiter(this, void 0, void 0, function* () {
const { filter } = args;
const pdRepository = (yield this.dbConnection).getRepository(PresentationDefinitionItemEntity_1.PresentationDefinitionItemEntity);
const resultCount = yield pdRepository.count(Object.assign({}, (filter && { where: cleanFilter(filter) })));
return resultCount > 0;
});
this.getDefinitions = (args) => __awaiter(this, void 0, void 0, function* () {
const { filter } = args;
const pdRepository = (yield this.dbConnection).getRepository(PresentationDefinitionItemEntity_1.PresentationDefinitionItemEntity);
const initialResult = yield this.findIds(pdRepository, filter);
const result = yield pdRepository.find({
where: {
id: (0, typeorm_1.In)(initialResult.map((entity) => entity.id)),
},
order: {
version: 'DESC',
},
});
return result.map((entity) => (0, MappingUtils_1.presentationDefinitionItemFrom)(entity));
});
this.addDefinition = (item) => __awaiter(this, void 0, void 0, function* () {
const pdRepository = (yield this.dbConnection).getRepository(PresentationDefinitionItemEntity_1.PresentationDefinitionItemEntity);
const entity = (0, MappingUtils_1.presentationDefinitionEntityItemFrom)(item);
debug('Adding presentation definition entity', item);
const result = yield pdRepository.save(entity, {
transaction: true,
});
return (0, MappingUtils_1.presentationDefinitionItemFrom)(result);
});
this.updateDefinition = (item) => __awaiter(this, void 0, void 0, function* () {
const pdRepository = (yield this.dbConnection).getRepository(PresentationDefinitionItemEntity_1.PresentationDefinitionItemEntity);
const result = yield pdRepository.findOne({
where: { id: item.id },
});
if (!result) {
return Promise.reject(Error(`No presentation definition entity found for id: ${item.id}`));
}
const updatedEntity = Object.assign({}, result);
updatedEntity.tenantId = item.tenantId;
updatedEntity.definitionId = item.definitionId;
updatedEntity.version = item.version;
updatedEntity.name = item.name;
updatedEntity.purpose = item.purpose;
updatedEntity.definitionPayload = JSON.stringify(item.definitionPayload);
debug('Updating presentation definition entity', updatedEntity);
const updateResult = yield pdRepository.save(updatedEntity, {
transaction: true,
});
return (0, MappingUtils_1.presentationDefinitionItemFrom)(updateResult);
});
this.deleteDefinition = (args) => __awaiter(this, void 0, void 0, function* () {
const { itemId } = args;
const pdRepository = (yield this.dbConnection).getRepository(PresentationDefinitionItemEntity_1.PresentationDefinitionItemEntity);
const entity = yield pdRepository.findOne({
where: { id: itemId },
});
if (!entity) {
return Promise.reject(Error(`No presentation definition found with id: ${itemId}`));
}
debug('Deleting presentation definition entity', entity);
yield pdRepository.delete(entity.id);
});
this.deleteDefinitions = (args) => __awaiter(this, void 0, void 0, function* () {
const { filter } = args;
const pdRepository = (yield this.dbConnection).getRepository(PresentationDefinitionItemEntity_1.PresentationDefinitionItemEntity);
const initialResult = yield this.findIds(pdRepository, filter);
const result = yield pdRepository.find({
where: {
id: (0, typeorm_1.In)(initialResult.map((entity) => entity.id)),
},
});
for (const entity of result) {
debug('Deleting presentation definition entity', entity.id);
yield pdRepository.delete(entity.id);
}
return result.length;
});
this.findIds = (pdRepository, filter) => __awaiter(this, void 0, void 0, function* () {
const idFilters = filter === null || filter === void 0 ? void 0 : filter.map((f) => f.id).filter((id) => id !== undefined && id !== null);
if (idFilters && idFilters.length > 0 && idFilters.length === (filter === null || filter === void 0 ? void 0 : filter.length)) {
return yield pdRepository.find({
where: { id: (0, typeorm_1.In)(idFilters) },
});
}
else {
return yield pdRepository.find(Object.assign({}, (filter && { where: cleanFilter(filter) })));
}
});
this.dbConnection = dbConnection;
}
}
exports.PDStore = PDStore;
const cleanFilter = (filter) => {
if (filter === undefined) {
return undefined;
}
return filter.map((item) => {
const cleanedItem = {};
for (const key in item) {
const value = item[key];
if (value !== undefined) {
;
cleanedItem[key] = value;
}
}
return cleanedItem;
});
};
//# sourceMappingURL=PDStore.js.map