Repositório
Enquanto a entidade mapeia uma classe para uma tabela do banco de dados, o repositório é responsável por encapsular toda a lógica de acesso e manipulação de dados dessa entidade. Ele atua como uma camada intermediária entre o banco e a aplicação, oferecendo métodos padronizados para criar, ler, atualizar e deletar registros (CRUD).
Para cada entidade, criamos um repositório específico, com operações básicas, como no exemplo abaixo para a entidade Musica:
import { Repository } from 'typeorm';
import { Musica } from "../entity/Musica";
import { banco } from "../banco";
export class MusicaRepository {
private repositorio: Repository<Musica>;
constructor(){
this.repositorio = banco.getRepository(Musica);
}
async criar(musica: Musica): Promise<Musica> {
return await this.repositorio.save(musica);
}
async listar(): Promise<Musica[]> {
return await this.repositorio.find();
}
async buscarPorId(id: number): Promise<Musica | null> {
return await this.repositorio.findOneBy({ _id: id } as any);
}
async remover(id: number): Promise<void> {
await this.repositorio.delete(id);
}
}
Note que estamos a classe Repository
do TypeORM, que já fornece métodos prontos para as operações básicas. Essa classe possui um tipo genérico que, no caso, atribuímos a Musica
. Por isso, Repository<Musica>
.
Ao manter a lógica de acesso ao banco centralizada no repositório, garantimos manutenção mais fácil, menor duplicação de código e separação clara de responsabilidades entre camadas da aplicação.
Cada entidade deve ter seu próprio repositório, mas é possível criar métodos personalizados para consultas específicas.