forked from geolba/tethys.backend
- add classes inside app/library for creting Tethys xml: Field.ts, Strategy.ts, XmlModel.ts
- added model DocumentXmlCache.ts - npm updates - changed all models inside app/Models to use corrected BaseModel.ts - added extra extension class DatasetExtension.ts for app/dataset.ts for caching internal and external fields
This commit is contained in:
parent
4ad281bcd4
commit
ebb24cc75c
24 changed files with 1170 additions and 324 deletions
98
app/Models/DocumentXmlCache.ts
Normal file
98
app/Models/DocumentXmlCache.ts
Normal file
|
@ -0,0 +1,98 @@
|
|||
import { column, BaseModel, SnakeCaseNamingStrategy, belongsTo, BelongsTo } from '@ioc:Adonis/Lucid/Orm';
|
||||
import Dataset from './Dataset';
|
||||
import { builder, create } from 'xmlbuilder2';
|
||||
import { XMLBuilder } from 'xmlbuilder2/lib/interfaces';
|
||||
import Database from '@ioc:Adonis/Lucid/Database';
|
||||
import dayjs from 'dayjs';
|
||||
import { DateTime } from 'luxon';
|
||||
|
||||
export default class DocumentXmlCache extends BaseModel {
|
||||
public static namingStrategy = new SnakeCaseNamingStrategy();
|
||||
public static table = 'document_xml_cache';
|
||||
// public static fillable: string[] = ['value', 'label', 'type', 'relation'];
|
||||
// public static primaryKey = false;
|
||||
static primaryKey = ''; // Set primaryKey to null to indicate there is no primary key
|
||||
|
||||
@column({
|
||||
isPrimary: true,
|
||||
})
|
||||
public document_id: number;
|
||||
|
||||
@column({})
|
||||
public xml_version: number;
|
||||
|
||||
@column()
|
||||
public server_date_modified?: string;
|
||||
|
||||
// @column.dateTime({
|
||||
// autoCreate: true,
|
||||
// autoUpdate: true,
|
||||
// })
|
||||
// public updated_at?: DateTime;
|
||||
|
||||
@column({})
|
||||
public xml_data: string;
|
||||
|
||||
@belongsTo(() => Dataset, {
|
||||
foreignKey: 'document_id',
|
||||
})
|
||||
public dataset: BelongsTo<typeof Dataset>;
|
||||
|
||||
/**
|
||||
* Get dom document of 'xml_data' string
|
||||
*
|
||||
* @returns {XMLBuilder}
|
||||
*/
|
||||
public getDomDocument(): XMLBuilder {
|
||||
// const dom = xmlbuilder.create({ version: "1.0", encoding: "UTF-8", standalone: true });
|
||||
let dom: XMLBuilder = create({ version: '1.0', encoding: 'UTF-8', standalone: true }, this.xml_data);
|
||||
// return dom.first();
|
||||
|
||||
const rdrDataset = dom.find(
|
||||
(n) => {
|
||||
const test = n.node.nodeName == 'Rdr_Dataset';
|
||||
return test;
|
||||
},
|
||||
false,
|
||||
true,
|
||||
)?.node;
|
||||
|
||||
if (rdrDataset == undefined) {
|
||||
return dom.first();
|
||||
} else {
|
||||
dom = builder({ version: '1.0', encoding: 'UTF-8', standalone: true }, rdrDataset);
|
||||
return dom;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a dataset in a specific xml version is already cached or not.
|
||||
*
|
||||
* @param mixed datasetId
|
||||
* @param mixed serverDateModified
|
||||
* @returns {Promise<boolean>} Returns true on cached hit else false.
|
||||
*/
|
||||
// public static async hasValidEntry(datasetId: number, datasetServerDateModified: DateTime): Promise<boolean> {
|
||||
// // const formattedDate = dayjs(datasetServerDateModified).format('YYYY-MM-DD HH:mm:ss');
|
||||
|
||||
// const query = Database.from(this.table)
|
||||
// .where('document_id', datasetId)
|
||||
// .where('server_date_modified', '2023-08-17 16:51:03')
|
||||
// .first();
|
||||
|
||||
// const row = await query;
|
||||
// return !!row;
|
||||
// }
|
||||
|
||||
// Assuming 'DocumentXmlCache' has a table with a 'server_date_modified' column in your database
|
||||
public static async hasValidEntry(datasetId: number, datasetServerDateModified: DateTime): Promise<boolean> {
|
||||
const serverDateModifiedString: string = datasetServerDateModified.toFormat('yyyy-MM-dd HH:mm:ss'); // Convert DateTime to ISO string
|
||||
const query = Database.from(this.table)
|
||||
.where('document_id', datasetId)
|
||||
.where('server_date_modified', '>=', serverDateModifiedString) // Check if server_date_modified is newer or equal
|
||||
.first();
|
||||
|
||||
const row = await query;
|
||||
return !!row;
|
||||
}
|
||||
}
|
Loading…
Add table
editor.link_modal.header
Reference in a new issue