Объясните назначение декоратора @InjectRepository() в NestJS.
Что такое @InjectRepository()?
В NestJS, декоратор @InjectRepository()
используется для внедрения репозитория (repository), который управляет
взаимодействием с определенной сущностью в базе данных. Этот декоратор является частью библиотек TypeORM или MikroORM, и
он упрощает доступ к базовым операциям CRUD (Create, Read, Update, Delete).
Репозитории предоставляют интерфейс для доступа к данным, хранящимся в базе данных, упрощая выполнение запросов и манипуляций с сущностями.
Почему использовать @InjectRepository()?
Пример использования @InjectRepository()
Давайте рассмотрим пример, как использовать @InjectRepository()
в вашем сервисе. Предположим, у нас есть сущность
User
.
// user.entity.ts
import {Entity, Column, PrimaryGeneratedColumn} from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
email: string;
}
Теперь, мы создадим UserService
, где мы будем использовать декоратор @InjectRepository()
.
// user.service.ts
import {Injectable} from '@nestjs/common';
import {InjectRepository} from '@nestjs/typeorm';
import {Repository} from 'typeorm';
import {User} from './user.entity';
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private readonly userRepository: Repository<User>,
) {
}
async createUser(name: string, email: string): Promise<User> {
const user = this.userRepository.create({name, email});
return this.userRepository.save(user);
}
async findAll(): Promise<User[]> {
return this.userRepository.find();
}
async findOne(id: number): Promise<User> {
return this.userRepository.findOneBy({id});
}
async updateUser(id: number, updateData: Partial<User>): Promise<User> {
await this.userRepository.update(id, updateData);
return this.findOne(id);
}
async deleteUser(id: number): Promise<void> {
await this.userRepository.delete(id);
}
}
Объяснение кода
InjectRepository
и Repository
из @nestjs/typeorm
и
typeorm
.UserService
мы объявляем конструктор, который принимает репозиторий User
.- createUser: Создает нового пользователя и сохраняет его в базе данных.
- findAll: Возвращает всех пользователей.
- findOne: Находит пользователя по его идентификатору.
- updateUser: Обновляет информацию о пользователе.
- deleteUser: Удаляет пользователя по его идентификатору.
Заключение
Использование декоратора @InjectRepository()
является отличным способом инкапсулировать доступ к данным в NestJS. Он
позволяет легко и эффективно управлять сущностями и взаимодействовать с базой данных, сохраняя при этом чистоту и
читаемость кода.