feat(nestjs): migrate to NestJS

This commit is contained in:
Ahmed Bouhuolia
2025-04-07 11:51:24 +02:00
parent f068218a16
commit 55fcc908ef
3779 changed files with 631 additions and 195332 deletions

View File

@@ -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;
}
}

View 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[],
};

View 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',
},
},
};
}
}

View 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 {};
}
}

View 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',
},
},
};
}
}