feat: Cachable and date session model.

This commit is contained in:
Ahmed Bouhuolia
2020-05-20 06:51:34 +02:00
parent 10f636d2bc
commit 90dc83c70a
18 changed files with 638 additions and 200 deletions

View File

@@ -1,13 +1,17 @@
/* eslint-disable global-require */
import { Model } from 'objection';
import { Model, mixin } from 'objection';
import { flatten } from 'lodash';
import TenantModel from '@/models/TenantModel';
import {
buildFilterQuery,
buildSortColumnQuery,
} from '@/lib/ViewRolesBuilder';
import CachableQueryBuilder from '@/lib/Cachable/CachableQueryBuilder';
import CachableModel from '@/lib/Cachable/CachableModel';
import DateSession from '@/models/DateSession';
export default class Account extends TenantModel {
export default class Account extends mixin(TenantModel, [CachableModel, DateSession]) {
/**
* Table name
*/
@@ -15,6 +19,13 @@ export default class Account extends TenantModel {
return 'accounts';
}
/**
* Extend query builder model.
*/
static get QueryBuilder() {
return CachableQueryBuilder;
}
/**
* Model modifiers.
*/

View File

@@ -1,6 +1,8 @@
import { Model } from 'objection';
import moment from 'moment';
import TenantModel from '@/models/TenantModel';
import CachableQueryBuilder from '@/lib/Cachable/CachableQueryBuilder';
export default class AccountTransaction extends TenantModel {
/**
@@ -10,6 +12,13 @@ export default class AccountTransaction extends TenantModel {
return 'accounts_transactions';
}
/**
* Extend query builder model.
*/
static get QueryBuilder() {
return CachableQueryBuilder;
}
/**
* Model modifiers.
*/

View File

@@ -0,0 +1,30 @@
import moment from 'moment';
export default (Model) => {
return class DateSession extends Model {
static get timestamps() {
return ['createdAt', 'updatedAt'];
}
$beforeUpdate(opt, context) {
const maybePromise = super.$beforeUpdate(opt, context);
return Promise.resolve(maybePromise).then(() => {
if (DateSession.timestamps[1]) {
this[DateSession.timestamps[1]] = moment().format('YYYY/MM/DD HH:mm:ss');
}
});
}
$beforeInsert(context) {
const maybePromise = super.$beforeInsert(context);
return Promise.resolve(maybePromise).then(() => {
if (DateSession.timestamps[0]) {
this[DateSession.timestamps[0]] = moment().format('YYYY/MM/DD HH:mm:ss');
}
});
}
}
}

View File

@@ -1,9 +1,9 @@
import { mixin } from 'objection';
import TenantModel from '@/models/TenantModel';
import MetableCollection from '@/lib/Metable/MetableCollection';
import definedOptions from '@/data/options';
export default class Option extends mixin(TenantModel, [mixin]) {
export default class Option extends TenantModel {
/**
* Table name.
*/

View File

@@ -1,7 +1,9 @@
import { Model } from 'objection';
import { Model, mixin } from 'objection';
import TenantModel from '@/models/TenantModel';
import CachableQueryBuilder from '@/lib/Cachable/CachableQueryBuilder';
import CachableModel from '@/lib/Cachable/CachableModel';
export default class Resource extends TenantModel {
export default class Resource extends mixin(TenantModel, [CachableModel]) {
/**
* Table name.
*/
@@ -9,6 +11,13 @@ export default class Resource extends TenantModel {
return 'resources';
}
/**
* Extend query builder model.
*/
static get QueryBuilder() {
return CachableQueryBuilder;
}
/**
* Timestamp columns.
*/

View File

@@ -7,4 +7,11 @@ export default class TenantModel extends BaseModel {
}
return super.bindKnex(this.knexBinded);
}
/**
* Allow to embed models to express request.
*/
static requestModel() {
return true;
}
}

View File

@@ -1,7 +1,9 @@
import { Model } from 'objection';
import { Model, mixin } from 'objection';
import TenantModel from '@/models/TenantModel';
import CachableQueryBuilder from '@/lib/Cachable/CachableQueryBuilder';
import CachableModel from '@/lib/Cachable/CachableModel';
export default class View extends TenantModel {
export default class View extends mixin(TenantModel, [CachableModel]) {
/**
* Table name.
*/
@@ -9,6 +11,13 @@ export default class View extends TenantModel {
return 'views';
}
/**
* Extend query builder model.
*/
static get QueryBuilder() {
return CachableQueryBuilder;
}
/**
* Relationship mapping.
*/