Выбор фреймворка для CRM
Мы в компании разрабатываем внутреннюю CRM систему. И вместо того, чтобы писать свой back-end владелец хочет использовать готовые варианты и строить свою экосистему уже вокруг них. Вопрос: Какие есть варианты? От чего отталкиваться? Или может еще какие-то идеи можете подкинуть, буду весьма благодарен.
Ответы (1 шт):
Возьмите NestJS. Это обертка поверх Express, которая очень напоминает Spring, ASP.Net Core и другие enterprise фреймворки.
import { Get, Controller } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
render() {
const message = this.appService.getHello();
return { message };
}
}
К нему сразу подключайте TypeORM, для каждой модели реализуйте паттерн Репозиторий. Для чтения списков элементов с сортировками, фильтрами и пагинацией используйте модуль nest-paginate
import { Controller, Injectable, Get } from '@nestjs/common'
import { InjectRepository } from '@nestjs/typeorm'
import { FilterOperator, Paginate, PaginateQuery, paginate, Paginated } from 'nestjs-paginate'
import { Repository, Entity, PrimaryGeneratedColumn, Column } from 'typeorm'
@Entity()
export class CatEntity {
@PrimaryGeneratedColumn()
id: number
@Column('text')
name: string
@Column('text')
color: string
@Column('int')
age: number
}
@Injectable()
export class CatsService {
constructor(
@InjectRepository(CatEntity)
private readonly catsRepository: Repository<CatEntity>
) {}
public findAll(query: PaginateQuery): Promise<Paginated<CatEntity>> {
return paginate(query, this.catsRepository, {
sortableColumns: ['id', 'name', 'color', 'age'],
searchableColumns: ['name', 'color', 'age'],
defaultSortBy: [['id', 'DESC']],
filterableColumns: {
age: [FilterOperator.GTE, FilterOperator.LTE],
},
})
}
}
@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Get()
public findAll(@Paginate() query: PaginateQuery): Promise<Paginated<CatEntity>> {
return this.catsService.findAll(query)
}
}
Модуль позволит выводить списки элементов в формате json-api используя запросы следующего вида
http://localhost:3000/cats?limit=5&page=2&sortBy=color:DESC&search=i&filter.age=$gte:3
На фронт возьмите React, TypeScript, Mobx, InversifyJS. Позволит писать состояние приложения на ООП с инъекцией зависимостей.
Для реализации списочных форм и форм элемента списка можно воспользоваться этим Storybook с набором готовых компонентов, осуществляющих генерацию верстки на основе JSON шаблона
