私は最初のREST APIをnestjsで作成しています。
基本的なCRUD操作を定義する必要のあるエンティティがいくつかあります。すべてのエンティティに対して同じコードを繰り返さないために使用できるベースクラッドサービスを作成する方法があるかどうか疑問に思いました。このbase-crudサービスでは、db関連の処理を実際に実行するためにリポジトリを呼び出す4つのCRUDメソッドがあります。
基本的に、私はBaseCrudService<T>
を持ち、UserService
をextends BaseCrudService<UserEntity>
にすることを望んでいました。このようにして、派生クラスのメソッドを「オーバーライド」して追加のロジックビジネスを実行し、基本メソッドを呼び出して実際に挿入、削除などを行うことができます。
出来ますか?もしそうなら、あなたはそれをどのようにやろうとしていますか?
次のようにベースクラッドサービスを作成します。
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
を簡単に作成できます。
継承なしでCRUDサービスとコントローラーを作成するのに役立つパッケージを作成しました https://www.npmjs.com/package/@nestjsx/crud