// Business transaction public async Task RegisterNewGatewayWithControllerAsync(string controllerSerial, string gatewaySerial) { if (!this.externalService.IsGatewayProduced(gatewaySerial)) { throw new InvalidOperationException("Gateway does not exist"); } Gateway gateway = new Gateway() { Name = "default installation", Serial = gatewaySerial }; var controllerStatus = this.externalService.GetControllerStatus(controllerSerial); if (controllerStatus == ControllerStatus.Maintenance) { // perhaps invoke some additional action // e.g. send email to subscribed people. } var controller = new Controller() { Serial = controllerSerial, Status = controllerStatus }; gateway.AddController(controller); gateway.Activate(); await this.gatewayRepository.AddAsync(gateway); // What about transaction? await this.controllerRepository.AddAsync(controller); }
// Business transaction public async Task RegisterNewGatewayWithControllerAsync(GatewayData gatewayData, ControllerData controllerData) { this.CheckConditions(gatewayData, controllerData); using (IUnitOfWork uow = new UnitOfWork()) { var gatewayRepository = uow.Factory.GetGatewayRepository(); var controllerRepository = uow.Factory.GetControllerRepository(); var controllerTypeRepository = uow.Factory.GetControllerTypeRespository(); Gateway gateway = new Gateway() { Name = gatewayData.Name, Serial = gatewayData.Serial, Address = gatewayData.Address }; var controller = await this.CreateControllerAsync(controllerData, controllerTypeRepository); gateway.AddController(controller); gateway.Activate(); gatewayRepository.Add(gateway); controllerRepository.Add(controller); await uow.SaveAsync(); } }
// Business transaction public async Task RegisterNewGatewayWithControllerAsync(GatewayData gatewayData, ControllerData controllerData) { this.CheckConditions(gatewayData, controllerData); Gateway gateway = new Gateway() { Name = gatewayData.Name, Serial = gatewayData.Serial, Address = gatewayData.Address }; var controller = await this.CreateControllerAsync(controllerData); gateway.AddController(controller); gateway.Activate(); await this.gatewayRepository.AddAsync(gateway); // What about transaction? await this.controllerRepository.AddAsync(controller); }