самым вызываю методы репозитория(выполняет запросы к БД), но теперь не могу понять, как можно обернуть в транзакцию подобное? чтобы ее начать, надо сделать 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 таблица"
Обсуждают сегодня