mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-26 17:49:48 +00:00
Merge pull request #997 from bigcapitalhq/fix/model-timestamps-missing-columns
fix(models): remove timestamps from models where tables lack createdAt/updatedAt columns
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { QueryBuilder, Model } from 'objection';
|
||||
import { QueryBuilder, Model, mixin } from 'objection';
|
||||
import { ModelHasRelationsError } from '@/common/exceptions/ModelHasRelations.exception';
|
||||
import { withDateSessionMixin } from './withDateSessionMixin';
|
||||
|
||||
interface PaginationResult<M extends Model> {
|
||||
results: M[];
|
||||
@@ -69,6 +70,7 @@ export class PaginationQueryBuilder<
|
||||
dependentRelationNames.forEach((relationName: string) => {
|
||||
recordQuery.withGraphFetched(relationName);
|
||||
});
|
||||
|
||||
const record = await recordQuery;
|
||||
|
||||
const hasRelations = dependentRelationNames.some((name) => {
|
||||
@@ -97,7 +99,7 @@ export class BaseQueryBuilder<
|
||||
}
|
||||
}
|
||||
|
||||
export class BaseModel extends Model {
|
||||
export class BaseModel extends mixin(Model, [withDateSessionMixin]) {
|
||||
public readonly id: number;
|
||||
public readonly tableName: string;
|
||||
|
||||
|
||||
40
packages/server/src/models/withDateSessionMixin.ts
Normal file
40
packages/server/src/models/withDateSessionMixin.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import * as moment from 'moment';
|
||||
import { Model } from 'objection';
|
||||
|
||||
type Constructor<T = {}> = new (...args: any[]) => T;
|
||||
|
||||
export const withDateSessionMixin = <T extends Constructor<Model>>(BaseModel: T) => {
|
||||
return class DateSession extends BaseModel {
|
||||
constructor(...args: any[]) {
|
||||
super(...args);
|
||||
}
|
||||
|
||||
get timestamps() {
|
||||
return [];
|
||||
}
|
||||
|
||||
$beforeUpdate(opt, context) {
|
||||
const maybePromise = super.$beforeUpdate(opt, context);
|
||||
|
||||
return Promise.resolve(maybePromise).then(() => {
|
||||
const key = this.timestamps[1];
|
||||
|
||||
if (key && !this[key]) {
|
||||
this[key] = moment().format('YYYY/MM/DD HH:mm:ss');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$beforeInsert(context) {
|
||||
const maybePromise = super.$beforeInsert(context);
|
||||
|
||||
return Promise.resolve(maybePromise).then(() => {
|
||||
const key = this.timestamps[0];
|
||||
|
||||
if (key && !this[key]) {
|
||||
this[key] = moment().format('YYYY/MM/DD HH:mm:ss');
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,13 @@ export class BillLandedCostEntry extends BaseModel {
|
||||
return 'bill_located_cost_entries';
|
||||
}
|
||||
|
||||
/**
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Relationship mapping.
|
||||
*/
|
||||
|
||||
@@ -29,7 +29,7 @@ export class Branch extends BaseModel{
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return ['created_at', 'updated_at'];
|
||||
return ['createdAt', 'updatedAt'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -34,7 +34,7 @@ export class RefundCreditNote extends BaseModel {
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return ['created_at', 'updated_at'];
|
||||
return ['createdAt', 'updatedAt'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -56,7 +56,7 @@ export class CreditNote extends TenantBaseModel {
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return ['created_at', 'updated_at'];
|
||||
return ['createdAt', 'updatedAt'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -26,7 +26,7 @@ export class CreditNoteAppliedInvoice extends BaseModel {
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return ['created_at', 'updated_at'];
|
||||
return ['createdAt', 'updatedAt'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -32,7 +32,7 @@ export class InventoryAdjustment extends TenantBaseModel {
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps(): Array<string> {
|
||||
return ['created_at'];
|
||||
return ['createdAt'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,6 +20,13 @@ export class InventoryAdjustmentEntry extends BaseModel {
|
||||
return 'inventory_adjustments_entries';
|
||||
}
|
||||
|
||||
/**
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Relationship mapping.
|
||||
*/
|
||||
|
||||
@@ -13,6 +13,13 @@ export class InventoryTransactionMeta extends BaseModel {
|
||||
return 'inventory_transaction_meta';
|
||||
}
|
||||
|
||||
/**
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Relationship mapping.
|
||||
*/
|
||||
|
||||
@@ -44,6 +44,13 @@ export class Item extends TenantBaseModel {
|
||||
return 'items';
|
||||
}
|
||||
|
||||
/**
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return ['createdAt', 'updatedAt'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Model modifiers.
|
||||
*/
|
||||
|
||||
@@ -43,7 +43,7 @@ export class PaymentReceived extends TenantBaseModel {
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return ['created_at', 'updated_at'];
|
||||
return ['createdAt', 'updatedAt'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -16,6 +16,13 @@ export class Role extends TenantBaseModel {
|
||||
return 'roles';
|
||||
}
|
||||
|
||||
/**
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Relationship mapping.
|
||||
*/
|
||||
|
||||
@@ -13,6 +13,13 @@ export class RolePermission extends TenantBaseModel {
|
||||
return 'role_permissions';
|
||||
}
|
||||
|
||||
/**
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Relationship mapping.
|
||||
*/
|
||||
|
||||
@@ -74,7 +74,7 @@ export class SaleInvoice extends TenantBaseModel {
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return ['created_at', 'updated_at'];
|
||||
return ['createdAt', 'updatedAt'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -72,7 +72,7 @@ export class SaleReceipt extends ExtendedModel {
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return ['created_at', 'updated_at'];
|
||||
return ['createdAt', 'updatedAt'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -10,6 +10,10 @@ export class Setting extends BaseModel {
|
||||
return 'settings';
|
||||
}
|
||||
|
||||
get timestamps() {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Extra metadata query to query with the current authenticate user.
|
||||
* @param {Object} query
|
||||
|
||||
@@ -50,6 +50,13 @@ export class TenantMetadata extends BaseModel {
|
||||
*/
|
||||
static tableName = 'tenants_metadata';
|
||||
|
||||
/**
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Virtual attributes.
|
||||
*/
|
||||
|
||||
@@ -24,7 +24,7 @@ export class TenantUser extends TenantBaseModel {
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return ['created_at', 'updated_at'];
|
||||
return ['createdAt', 'updatedAt'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -53,7 +53,7 @@ export class ItemEntry extends BaseModel {
|
||||
* @returns {string[]}
|
||||
*/
|
||||
get timestamps() {
|
||||
return ['created_at', 'updated_at'];
|
||||
return ['createdAt', 'updatedAt'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -26,7 +26,7 @@ export class VendorCreditAppliedBill extends BaseModel {
|
||||
* Timestamps columns.
|
||||
*/
|
||||
public get timestamps() {
|
||||
return ['created_at', 'updated_at'];
|
||||
return ['createdAt', 'updatedAt'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -32,7 +32,7 @@ export class RefundVendorCredit extends BaseModel {
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return ['created_at', 'updated_at'];
|
||||
return ['createdAt', 'updatedAt'];
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -8,6 +8,13 @@ export class ViewColumn extends BaseModel {
|
||||
return 'view_has_columns';
|
||||
}
|
||||
|
||||
/**
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Relationship mapping.
|
||||
*/
|
||||
|
||||
@@ -25,6 +25,13 @@ export class ViewRole extends BaseModel {
|
||||
return 'view_roles';
|
||||
}
|
||||
|
||||
/**
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Relationship mapping.
|
||||
*/
|
||||
|
||||
@@ -9,6 +9,13 @@ export class ItemWarehouseQuantity extends BaseModel{
|
||||
return 'items_warehouses_quantity';
|
||||
}
|
||||
|
||||
/**
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Relation mappings.
|
||||
*/
|
||||
|
||||
@@ -24,7 +24,7 @@ export class Warehouse extends BaseModel {
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return ['created_at', 'updated_at'];
|
||||
return ['createdAt', 'updatedAt'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -28,7 +28,7 @@ export class WarehouseTransfer extends TenantBaseModel {
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return ['created_at', 'updated_at'];
|
||||
return ['createdAt', 'updatedAt'];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -19,6 +19,13 @@ export class WarehouseTransferEntry extends TenantBaseModel {
|
||||
return 'warehouses_transfers_entries';
|
||||
}
|
||||
|
||||
/**
|
||||
* Timestamps columns.
|
||||
*/
|
||||
get timestamps() {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Virtual attributes.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user