mirror of
https://github.com/Ride-The-Lightning/RTL.git
synced 2024-11-19 09:50:36 +01:00
153 lines
4.8 KiB
TypeScript
153 lines
4.8 KiB
TypeScript
export enum OfferFieldsEnum {
|
|
BOLT12 = 'bolt12',
|
|
AMOUNTMSAT = 'amountMSat',
|
|
TITLE = 'title',
|
|
VENDOR = 'vendor',
|
|
DESCRIPTION = 'description'
|
|
}
|
|
|
|
export class Offer {
|
|
|
|
constructor(
|
|
public bolt12: string,
|
|
public amountMSat: number,
|
|
public title: string,
|
|
public vendor?: string,
|
|
public description?: string,
|
|
public lastUpdatedAt?: number
|
|
) { }
|
|
|
|
}
|
|
|
|
export const validateDocument = (collectionName: CollectionsEnum, documentToValidate: any): any => {
|
|
switch (collectionName) {
|
|
case CollectionsEnum.OFFERS:
|
|
return validateOffer(documentToValidate);
|
|
case CollectionsEnum.PAGE_SETTINGS:
|
|
return validatePageSettings(documentToValidate);
|
|
default:
|
|
return ({ isValid: false, error: 'Collection does not exist' });
|
|
}
|
|
};
|
|
|
|
export const validateOffer = (documentToValidate): any => {
|
|
if (!documentToValidate.hasOwnProperty(CollectionFieldsEnum.BOLT12)) {
|
|
return ({ isValid: false, error: 'Bolt12 is mandatory.' });
|
|
}
|
|
if (!documentToValidate.hasOwnProperty(CollectionFieldsEnum.AMOUNTMSAT)) {
|
|
return ({ isValid: false, error: 'Amount mSat is mandatory.' });
|
|
}
|
|
if (!documentToValidate.hasOwnProperty(CollectionFieldsEnum.TITLE)) {
|
|
return ({ isValid: false, error: 'Title is mandatory.' });
|
|
}
|
|
if ((typeof documentToValidate[CollectionFieldsEnum.AMOUNTMSAT] !== 'number')) {
|
|
return ({ isValid: false, error: 'Amount mSat should be a number.' });
|
|
}
|
|
return ({ isValid: true });
|
|
};
|
|
|
|
export enum SortOrderEnum {
|
|
ASCENDING = 'asc',
|
|
DESCENDING = 'desc'
|
|
}
|
|
|
|
export enum PageSettingsFieldsEnum {
|
|
PAGE_ID = 'pageId',
|
|
TABLES = 'tables'
|
|
}
|
|
|
|
export enum TableSettingsFieldsEnum {
|
|
TABLE_ID = 'tableId',
|
|
RECORDS_PER_PAGE = 'recordsPerPage',
|
|
SORT_BY = 'sortBy',
|
|
SORT_ORDER = 'sortOrder',
|
|
COLUMN_SELECTION = 'columnSelection',
|
|
COLUMN_SELECTION_SM = 'columnSelectionSM'
|
|
}
|
|
|
|
export class TableSetting {
|
|
|
|
constructor(
|
|
public tableId: string,
|
|
public recordsPerPage?: number,
|
|
public sortBy?: string,
|
|
public sortOrder?: SortOrderEnum,
|
|
public columnSelection?: any[]
|
|
) { }
|
|
|
|
}
|
|
|
|
export class PageSettings {
|
|
|
|
constructor(
|
|
public pageId: string,
|
|
public tables: TableSetting[]
|
|
) { }
|
|
|
|
}
|
|
|
|
export const validatePageSettings = (documentToValidate): any => {
|
|
let errorMessages = '';
|
|
if (!documentToValidate.hasOwnProperty(CollectionFieldsEnum.PAGE_ID)) {
|
|
errorMessages = errorMessages + 'Page ID is mandatory.';
|
|
}
|
|
if (!documentToValidate.hasOwnProperty(CollectionFieldsEnum.TABLES)) {
|
|
errorMessages = errorMessages + 'Tables is mandatory.';
|
|
}
|
|
const tablesMessages = documentToValidate.tables.reduce((tableAcc, table: TableSetting, tableIdx) => {
|
|
let errMsg = '';
|
|
if (!table.hasOwnProperty(CollectionFieldsEnum.TABLE_ID)) {
|
|
errMsg = errMsg + 'Table ID is mandatory.';
|
|
}
|
|
if (!table.hasOwnProperty(CollectionFieldsEnum.SORT_BY)) {
|
|
errMsg = errMsg + 'Sort By is mandatory.';
|
|
}
|
|
if (!table.hasOwnProperty(CollectionFieldsEnum.SORT_ORDER)) {
|
|
errMsg = errMsg + 'Sort Order is mandatory.';
|
|
}
|
|
if (!table.hasOwnProperty(CollectionFieldsEnum.COLUMN_SELECTION_SM)) {
|
|
errMsg = errMsg + 'Column Selection (Mobile) is mandatory.';
|
|
}
|
|
if (table[CollectionFieldsEnum.COLUMN_SELECTION_SM].length < 1) {
|
|
errMsg = errMsg + 'Column Selection (Mobile) should have at least 1 field.';
|
|
}
|
|
if (table[CollectionFieldsEnum.COLUMN_SELECTION_SM].length > 3) {
|
|
errMsg = errMsg + 'Column Selection (Mobile) should have maximum 3 fields.';
|
|
}
|
|
if (!table.hasOwnProperty(CollectionFieldsEnum.COLUMN_SELECTION)) {
|
|
errMsg = errMsg + 'Column Selection (Desktop) is mandatory.';
|
|
}
|
|
if (table[CollectionFieldsEnum.COLUMN_SELECTION].length < 2) {
|
|
errMsg = errMsg + 'Column Selection (Desktop) should have at least 2 fields.';
|
|
}
|
|
if (errMsg.trim() !== '') {
|
|
tableAcc.push({ table: (table.hasOwnProperty(CollectionFieldsEnum.TABLE_ID) ? table[CollectionFieldsEnum.TABLE_ID] : (tableIdx + 1)), message: errMsg });
|
|
}
|
|
return tableAcc;
|
|
}, []);
|
|
if (errorMessages.trim() === '' && tablesMessages.length === 0) {
|
|
return ({ isValid: true });
|
|
} else {
|
|
const errObj = { page: (documentToValidate.hasOwnProperty(CollectionFieldsEnum.PAGE_ID) ? documentToValidate[CollectionFieldsEnum.PAGE_ID] : 'Unknown') };
|
|
if (errorMessages.trim() !== '') {
|
|
errObj['message'] = errorMessages;
|
|
}
|
|
if (tablesMessages.length && tablesMessages.length > 0) {
|
|
errObj['tables'] = tablesMessages;
|
|
}
|
|
return ({ isValid: false, error: JSON.stringify(errObj) });
|
|
}
|
|
};
|
|
|
|
export enum CollectionsEnum {
|
|
OFFERS = 'Offers',
|
|
PAGE_SETTINGS = 'PageSettings'
|
|
}
|
|
|
|
export type Collections = {
|
|
Offers: Offer[];
|
|
PageSettings: PageSettings[];
|
|
}
|
|
|
|
export const CollectionFieldsEnum = { ...OfferFieldsEnum, ...PageSettingsFieldsEnum, ...TableSettingsFieldsEnum };
|