public async Task <User> SignUpUserAsync(SignUpInput userData) { if (await usersRepository.FirstOrDefaultAsync(u => u.Phone == userData.Phone) != null) { throw new BadInputException("user already exists"); } if (!await smsService.CodeIsValidAsync(userData.Phone, userData.SmsCode)) { throw new BadInputException("code is invalid"); } // it would be better to move this somewhere var user = mapper.Map <User>(userData); user.Roles = new[] { "client", "worker" }; user.DateOfRegistration = DateTime.Now; user.Profile.Phone = user.Phone; var worker = new Worker { StatusId = (int)WorkersStatuses.Offline }; // linq2db can't save both entities in 1 method call worker.Id = user.Profile.Id = user.Id = await usersRepository.InsertWithIdAsync(user); await profilesRepository.InsertAsync(user.Profile); await workersRepository.InsertAsync(worker); return(user); }