Как использовать сервисные методы внутри транзакций typeorm - PullRequest
1 голос
/ 04 ноября 2019

Я читал о транзакциях в typeorm.

@Transaction()
save(user: User, @TransactionRepository(User) userRepository: Repository<User>) {
    return userRepository.save(user);    
}

У меня есть приложение nestjs с несколькими модулями и службами. что мне нужно сделать, это вызвать различные методы обслуживания внутри транзакции. но @TransactionRepository дает мне repository. Итак, что я должен сделать, чтобы выполнить транзакцию с несколькими сервисными методами, вызываемыми внутри нее. как

class Module3Service{
    constructor(
    private readonly module1service: Moudle1Service,
    private readonly module2service: Module2Service
    ){}

    @Transaction()
    save() {
        this.module1service.create()
        this.module2service.create()
    }

Я не знаю, как этого добиться. и также исправьте меня, если я ошибаюсь, что возможное решение состоит в том, чтобы изменить зависимости moduleservice (module1service dependency => module1repositoroy), чтобы перейти на наш новый экземпляр репозитория, который мы получаем из @TransactionRepository(Module1Enity) module1repository: Repository<Module1Entity> внутри метода transction. или любое другое решение, пожалуйста, помогите

Я использую Postgres

1 Ответ

0 голосов
/ 05 ноября 2019

Во время юнит-тестов у вас будут проблемы с @Transaction().

Я бы порекомендовал Менеджер Typeorm getManager().transaction( () => { ... } ), для которого не требуется специальный репозиторий. Все, что выполняется в рамках обратного вызова, предоставленного .transaction, будет обрабатываться в одной транзакции.

...