Выбор фреймворка для 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. Позволит писать состояние приложения на ООП с инъекцией зависимостей.

react-declarative

Для реализации списочных форм и форм элемента списка можно воспользоваться этим Storybook с набором готовых компонентов, осуществляющих генерацию верстки на основе JSON шаблона

→ Ссылка