This commit is contained in:
parent
f828ca4491
commit
cb51a4136f
167 changed files with 21485 additions and 21212 deletions
|
@ -1,11 +1,12 @@
|
|||
// import { Client } from 'guzzle';
|
||||
// import { Log } from '@adonisjs/core/build/standalone';
|
||||
// import { DoiInterface } from './interfaces/DoiInterface';
|
||||
import DoiClientContract from 'App/Library/Doi/DoiClientContract';
|
||||
import DoiClientException from 'App/Exceptions/DoiClientException';
|
||||
import DoiClientContract from '#app/Library/Doi/DoiClientContract';
|
||||
import DoiClientException from '#app/Exceptions/DoiClientException';
|
||||
import { StatusCodes } from 'http-status-codes';
|
||||
import Logger from '@ioc:Adonis/Core/Logger';
|
||||
import axios, { AxiosResponse } from 'axios';
|
||||
import logger from '@adonisjs/core/services/logger';
|
||||
import { AxiosResponse } from 'axios';
|
||||
import axios from 'axios';
|
||||
|
||||
export class DoiClient implements DoiClientContract {
|
||||
public username: string;
|
||||
|
@ -22,7 +23,7 @@ export class DoiClient implements DoiClientContract {
|
|||
|
||||
if (this.username === '' || this.password === '' || this.serviceUrl === '') {
|
||||
const message = 'issing configuration settings to properly initialize DOI client';
|
||||
Logger.error(message);
|
||||
logger.error(message);
|
||||
throw new DoiClientException(StatusCodes.BAD_REQUEST, message);
|
||||
}
|
||||
}
|
||||
|
@ -49,7 +50,7 @@ export class DoiClient implements DoiClientContract {
|
|||
'Content-Type': 'application/xml;charset=UTF-8',
|
||||
};
|
||||
try {
|
||||
const metadataResponse = await axios.put(`${this.serviceUrl}/metadata/${doiValue}`, xmlMeta, { auth, headers });
|
||||
const metadataResponse = await axios.default.put(`${this.serviceUrl}/metadata/${doiValue}`, xmlMeta, { auth, headers });
|
||||
|
||||
// Response Codes
|
||||
// 201 Created: operation successful
|
||||
|
@ -60,11 +61,11 @@ export class DoiClient implements DoiClientContract {
|
|||
// let test = metadataResponse.data; // 'OK (10.21388/TETHYS.213)'
|
||||
if (metadataResponse.status !== 201) {
|
||||
const message = `Unexpected DataCite MDS response code ${metadataResponse.status}`;
|
||||
Logger.error(message);
|
||||
logger.error(message);
|
||||
throw new DoiClientException(metadataResponse.status, message);
|
||||
}
|
||||
|
||||
const doiResponse = await axios.put(`${this.serviceUrl}/doi/${doiValue}`, `doi=${doiValue}\nurl=${landingPageUrl}`, {
|
||||
const doiResponse = await axios.default.put(`${this.serviceUrl}/doi/${doiValue}`, `doi=${doiValue}\nurl=${landingPageUrl}`, {
|
||||
auth,
|
||||
headers,
|
||||
});
|
||||
|
@ -77,7 +78,7 @@ export class DoiClient implements DoiClientContract {
|
|||
// 412 Precondition failed: metadata must be uploaded first.
|
||||
if (doiResponse.status !== 201) {
|
||||
const message = `Unexpected DataCite MDS response code ${doiResponse.status}`;
|
||||
Logger.error(message);
|
||||
logger.error(message);
|
||||
throw new DoiClientException(doiResponse.status, message);
|
||||
}
|
||||
|
||||
|
@ -85,7 +86,7 @@ export class DoiClient implements DoiClientContract {
|
|||
} catch (error) {
|
||||
// const message = `request for registering DOI failed with ${error.message}`;
|
||||
// Handle the error, log it, or rethrow as needed
|
||||
Logger.error(error.message);
|
||||
logger.error(error.message);
|
||||
throw new DoiClientException(error.response.status, error.response.data);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// import ResumptionToken from './ResumptionToken';
|
||||
import { AxiosResponse } from 'axios';
|
||||
|
||||
export default interface DoiClientContract {
|
||||
username: string;
|
||||
|
@ -6,7 +7,7 @@ export default interface DoiClientContract {
|
|||
serviceUrl: string;
|
||||
// prefix: string;
|
||||
// base_domain: string;
|
||||
registerDoi(doiValue: string, xmlMeta: string, landingPageUrl: string);
|
||||
registerDoi(doiValue: string, xmlMeta: string, landingPageUrl: string): Promise<AxiosResponse<any>>;
|
||||
// get(key: string): Promise<ResumptionToken | null>;
|
||||
// set(token: ResumptionToken): Promise<string>;
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
import ResumptionToken from './ResumptionToken';
|
||||
|
||||
export default interface TokenWorkerContract {
|
||||
ttl: number;
|
||||
isConnected: boolean;
|
||||
connect();
|
||||
close();
|
||||
get(key: string): Promise<ResumptionToken | null>;
|
||||
set(token: ResumptionToken): Promise<string>;
|
||||
}
|
11
app/Library/Oai/TokenWorkerContract.ts
Normal file
11
app/Library/Oai/TokenWorkerContract.ts
Normal file
|
@ -0,0 +1,11 @@
|
|||
import ResumptionToken from './ResumptionToken.js';
|
||||
|
||||
export default abstract class TokenWorkerContract {
|
||||
abstract ttl: number;
|
||||
abstract isConnected: boolean;
|
||||
abstract connect(): void;
|
||||
abstract close(): void;
|
||||
abstract get(key: string): Promise<ResumptionToken | null>;
|
||||
abstract set(token: ResumptionToken): Promise<string>;
|
||||
}
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
import ResumptionToken from './ResumptionToken';
|
||||
import ResumptionToken from './ResumptionToken.js';
|
||||
import { createClient, RedisClientType } from 'redis';
|
||||
import InternalServerErrorException from 'App/Exceptions/InternalServerException';
|
||||
import InternalServerErrorException from '#app/Exceptions/InternalServerException';
|
||||
import { sprintf } from 'sprintf-js';
|
||||
import dayjs from 'dayjs';
|
||||
import TokenWorkerContract from './TokenWorker';
|
||||
import TokenWorkerContract from './TokenWorkerContract.js';
|
||||
|
||||
export default class TokenWorkerService implements TokenWorkerContract {
|
||||
protected filePrefix = 'rs_';
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import { XMLBuilder } from 'xmlbuilder2/lib/interfaces';
|
||||
import { XMLBuilder } from 'xmlbuilder2/lib/interfaces.js';
|
||||
import { create } from 'xmlbuilder2';
|
||||
import Dataset from 'App/Models/Dataset';
|
||||
import Field from './Field';
|
||||
import BaseModel from 'App/Models/BaseModel';
|
||||
import Dataset from '#app/Models/Dataset';
|
||||
import Field from './Field.js';
|
||||
import BaseModel from '#app/Models/BaseModel';
|
||||
import { DateTime } from 'luxon';
|
||||
|
||||
export default class Strategy {
|
||||
|
@ -10,7 +10,7 @@ export default class Strategy {
|
|||
private config;
|
||||
private xml: XMLBuilder;
|
||||
|
||||
constructor(config) {
|
||||
constructor(config: any) {
|
||||
this.version = 1.0;
|
||||
this.config = config;
|
||||
}
|
||||
|
@ -45,11 +45,11 @@ export default class Strategy {
|
|||
|
||||
for (const fieldname of fieldsDiff) {
|
||||
const field = model.getField(fieldname);
|
||||
this.mapField(field, modelNode);
|
||||
this.mapField(field as Field, modelNode);
|
||||
}
|
||||
}
|
||||
|
||||
private mapField(field, modelNode: XMLBuilder) {
|
||||
private mapField(field: Field, modelNode: XMLBuilder) {
|
||||
const modelClass = field.getValueModelClass();
|
||||
let fieldValues = field.getValue();
|
||||
|
||||
|
@ -107,7 +107,7 @@ export default class Strategy {
|
|||
childNode.att('Timezone', zoneName);
|
||||
}
|
||||
|
||||
private mapModelAttributes(myObject, childNode: XMLBuilder) {
|
||||
private mapModelAttributes(myObject: any, childNode: XMLBuilder) {
|
||||
Object.keys(myObject).forEach((prop) => {
|
||||
let value = myObject[prop];
|
||||
// console.log(`${prop}: ${value}`);
|
||||
|
@ -161,7 +161,7 @@ export default class Strategy {
|
|||
return fieldValues?.toString().trim();
|
||||
}
|
||||
|
||||
private createModelNode(model) {
|
||||
private createModelNode(model: Dataset) {
|
||||
const className = 'Rdr_' + model.constructor.name.split('\\').pop(); //Rdr_Dataset
|
||||
// return dom.createElement(className);
|
||||
return this.xml.root().ele(className);
|
||||
|
|
|
@ -1,18 +1,20 @@
|
|||
import Dataset from 'App/Models/Dataset';
|
||||
import Dataset from '#app/Models/Dataset';
|
||||
import { Client } from '@opensearch-project/opensearch';
|
||||
import { create } from 'xmlbuilder2';
|
||||
import { transform } from 'saxon-js';
|
||||
import XmlModel from 'App/Library/XmlModel';
|
||||
import { XMLBuilder } from 'xmlbuilder2/lib/interfaces';
|
||||
import Logger from '@ioc:Adonis/Core/Logger';
|
||||
import SaxonJS from 'saxon-js';
|
||||
import XmlModel from '#app/Library/XmlModel';
|
||||
import { XMLBuilder } from 'xmlbuilder2/lib/interfaces.js';
|
||||
import logger from '@adonisjs/core/services/logger';
|
||||
import { readFileSync } from 'fs';
|
||||
import { DateTime } from 'luxon';
|
||||
// import Config from '@ioc:Adonis/Core/Config';
|
||||
import { getDomain } from 'App/Utils/utility-functions';
|
||||
import { getDomain } from '#app/Utils/utility-functions';
|
||||
|
||||
// const opensearchNode = process.env.OPENSEARCH_HOST || 'localhost';
|
||||
// const client = new Client({ node: `http://${opensearchNode}` }); // replace with your OpenSearch endpoint
|
||||
|
||||
interface XslTParameter {
|
||||
[key: string]: any;
|
||||
}
|
||||
export default {
|
||||
// opensearchNode: process.env.OPENSEARCH_HOST || 'localhost',
|
||||
client: new Client({ node: `http://${process.env.OPENSEARCH_HOST || 'localhost'}` }), // replace with your OpenSearch endpoint
|
||||
|
@ -20,7 +22,7 @@ export default {
|
|||
async getDoiRegisterString(dataset: Dataset): Promise<string | undefined> {
|
||||
try {
|
||||
const proc = readFileSync('public/assets2/doi_datacite.sef.json');
|
||||
const xsltParameter = {};
|
||||
const xsltParameter: XslTParameter = {};
|
||||
let xml = create({ version: '1.0', encoding: 'UTF-8', standalone: true }, '<root></root>');
|
||||
const datasetNode = xml.root().ele('Dataset');
|
||||
await createXmlRecord(dataset, datasetNode);
|
||||
|
@ -50,7 +52,7 @@ export default {
|
|||
|
||||
let xmlOutput; // = xmlString;
|
||||
try {
|
||||
const result = await transform({
|
||||
const result = await SaxonJS.transform({
|
||||
// stylesheetFileName: `${config.TMP_BASE_DIR}/data-quality/rules/iati.sef.json`,
|
||||
stylesheetText: proc,
|
||||
destination: 'serialized',
|
||||
|
@ -61,12 +63,12 @@ export default {
|
|||
});
|
||||
xmlOutput = result.principalResult;
|
||||
} catch (error) {
|
||||
Logger.error('An error occurred while creating the user', error.message);
|
||||
logger.error('An error occurred while creating the user', error.message);
|
||||
}
|
||||
|
||||
return xmlOutput;
|
||||
} catch (error) {
|
||||
Logger.error(`An error occurred while indexing datsaet with publish_id ${dataset.publish_id}.`);
|
||||
logger.error(`An error occurred while indexing datsaet with publish_id ${dataset.publish_id}.`);
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -82,27 +84,27 @@ export default {
|
|||
body: document,
|
||||
refresh: true,
|
||||
});
|
||||
Logger.info(`dataset with publish_id ${dataset.publish_id} successfully indexed`);
|
||||
logger.info(`dataset with publish_id ${dataset.publish_id} successfully indexed`);
|
||||
} catch (error) {
|
||||
Logger.error(`An error occurred while indexing datsaet with publish_id ${dataset.publish_id}.`);
|
||||
logger.error(`An error occurred while indexing datsaet with publish_id ${dataset.publish_id}.`);
|
||||
}
|
||||
},
|
||||
|
||||
async getTransformedString(dataset, proc): Promise<string> {
|
||||
async getTransformedString(dataset: Dataset, proc: Buffer): Promise<string> {
|
||||
let xml = create({ version: '1.0', encoding: 'UTF-8', standalone: true }, '<root></root>');
|
||||
const datasetNode = xml.root().ele('Dataset');
|
||||
await createXmlRecord(dataset, datasetNode);
|
||||
const xmlString = xml.end({ prettyPrint: false });
|
||||
|
||||
try {
|
||||
const result = await transform({
|
||||
const result = await SaxonJS.transform({
|
||||
stylesheetText: proc,
|
||||
destination: 'serialized',
|
||||
sourceText: xmlString,
|
||||
});
|
||||
return result.principalResult;
|
||||
} catch (error) {
|
||||
Logger.error(`An error occurred while creating the user, error: ${error.message},`);
|
||||
logger.error(`An error occurred while creating the user, error: ${error.message},`);
|
||||
return '';
|
||||
}
|
||||
},
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import DocumentXmlCache from 'App/Models/DocumentXmlCache';
|
||||
import { XMLBuilder } from 'xmlbuilder2/lib/interfaces';
|
||||
import Dataset from 'App/Models/Dataset';
|
||||
import Strategy from './Strategy';
|
||||
import DocumentXmlCache from '#app/Models/DocumentXmlCache';
|
||||
import { XMLBuilder } from 'xmlbuilder2/lib/interfaces.js';
|
||||
import Dataset from '#app/Models/Dataset';
|
||||
import Strategy from './Strategy.js';
|
||||
import { DateTime } from 'luxon';
|
||||
import { builder } from 'xmlbuilder2';
|
||||
|
||||
|
|
Loading…
Add table
editor.link_modal.header
Reference in a new issue