самым вызываю методы репозитория(выполняет запросы к БД), но теперь не могу понять, как можно обернуть в транзакцию подобное? чтобы ее начать, надо сделать db.BeginTx(). Прокидывать репозиторий аргументов в AddUserSkill?) либо проблема в архитектуре?
                  
                  
                  
                  
                  
                  UserService
                  
                  
                  func(s userService) CreateUser() {
                  
                  
                    // BEGIN TRANSACTION
                  
                  
                    s.userRepository.CreateUser()
                  
                  
                    s.skillRepository.AddUserSkill()
                  
                  
                    // ROLLBACK/COMMIT
                  
                  
                  }
                  
                  
                  
                  
                  
                  UserRepo
                  
                  
                  func(r userRepository) CreateUser() error {}
                  
                  
                  
                  
                  
                  SkillRepo
                  
                  
                  func(r skillRepository) AddUserSkill() error {}
                  
                  
                
Я делаю один запрос к репо, и у репо уже можно разбить на внутренние «методы», принимающие транзакцию
Уверены, что тут необходима транзакция? Мое личное мнение: если данные связаны настолько, что нужна транзакция, то они должны быть в одном репозитории.
Да, данные очень связаны ) получается не будет плохого кода, если в одном репо работать с несколькими таблицами?
Нет такого правила "1 репо = 1 таблица"
Обсуждают сегодня