50 lines
1.2 KiB
JavaScript
50 lines
1.2 KiB
JavaScript
const { Model } = require('objection');
|
|
const { format } = require('date-fns');
|
|
|
|
class BaseModel extends Model {
|
|
static get useLimitInFirst() {
|
|
return true;
|
|
}
|
|
|
|
$beforeInsert() {
|
|
super.$beforeInsert();
|
|
if (this.constructor.hasColumn('created')) {
|
|
this.created = this.constructor.mysqlTimestamp(false);
|
|
}
|
|
|
|
if (this.constructor.hasColumn('modified')) {
|
|
this.modified = this.constructor.mysqlTimestamp(false);
|
|
}
|
|
}
|
|
|
|
$beforeUpdate() {
|
|
super.$beforeUpdate();
|
|
|
|
if (this.constructor.hasColumn('modified')) {
|
|
this.modified = this.constructor.mysqlTimestamp(false);
|
|
}
|
|
}
|
|
|
|
static hasColumn(columnName) {
|
|
if (this.jsonSchema &&
|
|
this.jsonSchema.properties &&
|
|
this.jsonSchema.properties[columnName]
|
|
) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
static mysqlTimestamp(schemaDefinition = true) {
|
|
const formattedDate = format(new Date(), 'yyyy-MM-dd HH:mm:ss');
|
|
|
|
return schemaDefinition ? {
|
|
type: 'string',
|
|
default: formattedDate
|
|
} : formattedDate;
|
|
}
|
|
}
|
|
|
|
module.exports = BaseModel;
|