mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-14 03:40:31 +00:00
feat(nestjs): migrate to NestJS
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { BaseModel } from '@/models/Model';
|
||||
import { View } from './models/View.model';
|
||||
|
||||
@Injectable()
|
||||
export class GetResourceViewsService {
|
||||
constructor(private readonly resourceService: ResourceService) {}
|
||||
/**
|
||||
* Listing resource views.
|
||||
* @param {number} tenantId -
|
||||
* @param {string} resourceModel -
|
||||
*/
|
||||
public async getResourceViews(resourceName: string): Promise<View[]> {
|
||||
// Validate the resource model name is valid.
|
||||
const resourceModel = this.resourceService.getResourceModel(resourceName);
|
||||
|
||||
// Default views.
|
||||
const defaultViews = resourceModel.getDefaultViews();
|
||||
|
||||
return defaultViews;
|
||||
}
|
||||
}
|
||||
61
packages/server/src/modules/Views/Views.types.ts
Normal file
61
packages/server/src/modules/Views/Views.types.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
|
||||
export interface IView {
|
||||
id: number,
|
||||
name: string,
|
||||
slug: string;
|
||||
predefined: boolean,
|
||||
resourceModel: string,
|
||||
favourite: boolean,
|
||||
rolesLogicExpression: string,
|
||||
|
||||
roles: IViewRole[],
|
||||
columns: IViewHasColumn[],
|
||||
};
|
||||
|
||||
export interface IViewRole {
|
||||
id: number,
|
||||
fieldKey: string,
|
||||
index: number,
|
||||
comparator: string,
|
||||
value: string,
|
||||
viewId: number,
|
||||
};
|
||||
|
||||
export interface IViewHasColumn {
|
||||
id :number,
|
||||
viewId: number,
|
||||
fieldId: number,
|
||||
index: number,
|
||||
}
|
||||
|
||||
export interface IViewRoleDTO {
|
||||
index: number,
|
||||
fieldKey: string,
|
||||
comparator: string,
|
||||
value: string,
|
||||
viewId: number,
|
||||
}
|
||||
|
||||
export interface IViewColumnDTO {
|
||||
id: number,
|
||||
index: number,
|
||||
viewId: number,
|
||||
fieldKey: string,
|
||||
};
|
||||
|
||||
export interface IViewDTO {
|
||||
name: string,
|
||||
logicExpression: string,
|
||||
resourceModel: string,
|
||||
|
||||
roles: IViewRoleDTO[],
|
||||
columns: IViewColumnDTO[],
|
||||
};
|
||||
|
||||
export interface IViewEditDTO {
|
||||
name: string,
|
||||
logicExpression: string,
|
||||
|
||||
roles: IViewRoleDTO[],
|
||||
columns: IViewColumnDTO[],
|
||||
};
|
||||
72
packages/server/src/modules/Views/models/View.model.ts
Normal file
72
packages/server/src/modules/Views/models/View.model.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
import { Model } from 'objection';
|
||||
import { BaseModel } from '@/models/Model';
|
||||
|
||||
export class View extends BaseModel {
|
||||
/**
|
||||
* Table name.
|
||||
*/
|
||||
static get tableName() {
|
||||
return 'views';
|
||||
}
|
||||
|
||||
/**
|
||||
* Model timestamps.
|
||||
*/
|
||||
get timestamps() {
|
||||
return ['createdAt', 'updatedAt'];
|
||||
}
|
||||
|
||||
static get modifiers() {
|
||||
const TABLE_NAME = View.tableName;
|
||||
|
||||
return {
|
||||
allMetadata(query) {
|
||||
query.withGraphFetched('roles.field');
|
||||
query.withGraphFetched('columns');
|
||||
},
|
||||
|
||||
specificOrFavourite(query, viewId) {
|
||||
if (viewId) {
|
||||
query.where('id', viewId);
|
||||
} else {
|
||||
query.where('favourite', true);
|
||||
}
|
||||
return query;
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Relationship mapping.
|
||||
*/
|
||||
static get relationMappings() {
|
||||
const { ViewColumn } = require('./ViewColumn.model');
|
||||
const { ViewRole } = require('./ViewRole.model');
|
||||
|
||||
return {
|
||||
/**
|
||||
* View model may has many columns.
|
||||
*/
|
||||
columns: {
|
||||
relation: Model.HasManyRelation,
|
||||
modelClass: ViewColumn.default,
|
||||
join: {
|
||||
from: 'views.id',
|
||||
to: 'view_has_columns.viewId',
|
||||
},
|
||||
},
|
||||
|
||||
/**
|
||||
* View model may has many view roles.
|
||||
*/
|
||||
roles: {
|
||||
relation: Model.HasManyRelation,
|
||||
modelClass: ViewRole.default,
|
||||
join: {
|
||||
from: 'views.id',
|
||||
to: 'view_roles.viewId',
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
17
packages/server/src/modules/Views/models/ViewColumn.model.ts
Normal file
17
packages/server/src/modules/Views/models/ViewColumn.model.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { BaseModel } from '@/models/Model';
|
||||
|
||||
export class ViewColumn extends BaseModel {
|
||||
/**
|
||||
* Table name.
|
||||
*/
|
||||
static get tableName() {
|
||||
return 'view_has_columns';
|
||||
}
|
||||
|
||||
/**
|
||||
* Relationship mapping.
|
||||
*/
|
||||
static get relationMappings() {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
46
packages/server/src/modules/Views/models/ViewRole.model.ts
Normal file
46
packages/server/src/modules/Views/models/ViewRole.model.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import { BaseModel } from '@/models/Model';
|
||||
import { Model } from 'objection';
|
||||
|
||||
export class ViewRole extends BaseModel {
|
||||
|
||||
/**
|
||||
* Virtual attributes.
|
||||
*/
|
||||
static get virtualAttributes() {
|
||||
return ['comparators'];
|
||||
}
|
||||
|
||||
static get comparators() {
|
||||
return [
|
||||
'equals', 'not_equal', 'contains', 'not_contain',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Table name.
|
||||
*/
|
||||
static get tableName() {
|
||||
return 'view_roles';
|
||||
}
|
||||
|
||||
/**
|
||||
* Relationship mapping.
|
||||
*/
|
||||
static get relationMappings() {
|
||||
const View = require('./View.model');
|
||||
|
||||
return {
|
||||
/**
|
||||
* View role model may belongs to view model.
|
||||
*/
|
||||
view: {
|
||||
relation: Model.BelongsToOneRelation,
|
||||
modelClass: View.default,
|
||||
join: {
|
||||
from: 'view_roles.viewId',
|
||||
to: 'views.id',
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user