web-dev-qa-db-ja.com

NestJS Create Base CRUD Service

私は最初のREST APIをnestjsで作成しています。

基本的なCRUD操作を定義する必要のあるエンティティがいくつかあります。すべてのエンティティに対して同じコードを繰り返さないために使用できるベースクラッドサービスを作成する方法があるかどうか疑問に思いました。このbase-crudサービスでは、db関連の処理を実際に実行するためにリポジトリを呼び出す4つのCRUDメソッドがあります。

基本的に、私はBaseCrudService<T>を持ち、UserServiceextends BaseCrudService<UserEntity>にすることを望んでいました。このようにして、派生クラスのメソッドを「オーバーライド」して追加のロジックビジネスを実行し、基本メソッドを呼び出して実際に挿入、削除などを行うことができます。

出来ますか?もしそうなら、あなたはそれをどのようにやろうとしていますか?

6
Aaron Ullal

次のようにベースクラッドサービスを作成します。

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を簡単に作成できます。

12
Aaron Ullal

継承なしでCRUDサービスとコントローラーを作成するのに役立つパッケージを作成しました https://www.npmjs.com/package/@nestjsx/crud

2
Michael Yali