NestJS Создать Базовый CRUD Сервис - PullRequest
0 голосов
/ 27 июня 2018

Я пишу свой первый REST API с помощью nestjs.

У меня есть несколько сущностей, для которых я должен определить основные операции CRUD. Мне было интересно, есть ли способ создать базовый сервис crud, который я могу использовать, чтобы не повторять один и тот же код для всех сущностей. В этом базовом сервисе у меня было бы четыре CRUD-метода, которые вызывают репозиторий для того, чтобы фактически выполнять связанные с БД вещи.

В основном я надеялся получить BaseCrudService<T>, а затем UserService, что extends BaseCrudService<UserEntity>. Таким образом, я мог бы «переопределить» методы в производном классе, чтобы сделать дополнительную бизнес-логику, а затем вызвать базовый метод, чтобы фактически вставить, удалить и т. Д.

Возможно ли это? Если да, то как ты собираешься это сделать?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Я создал пакет, который помогает создавать службы CRUD и контроллеры без наследования https://www.npmjs.com/package/@nestjsx/crud

0 голосов
/ 27 июня 2018

Создайте базовый сервис следующим образом:

export class BaseCrudService<Entity extends BaseEntity> {

    constructor(
        public repository: Repository<Entity>,
    ) { }

    async insertAsync(entity: Entity): Promise<InsertResult> {
        return this.repository.insert(entity);
    }
    ...
}

И чем отдельные службы расширяют этот класс:

@Injectable()
export class UserService extends BaseCrudService<UserEntity>{
  constructor(
    @InjectRepository(UserEntity)
    public repository: Repository<UserEntity>,
  ) {
    super(repository);
  }
}

Et-voilà теперь у вас есть вставка, удаление, обновление и т. Д., О которых уже позаботились ... и это для всех служб, расширяющих класс.

Следуя этой логике, вы можете легко создать BaseCrudController.

...