public async Task <bool> RegisterVehicleAsync(Vehicle vehicle) { var vehicleDb = GetVehicleFromDbAsync(vehicle); bool isRegistered = await parkingLotService.TryToRegisterCar(vehicleDb); if (isRegistered) { Data.PromotionCard newCard = null; bool hasChangedCard = false; if (vehicleDb.PromotionCard != null && vehicle.CardType == null)// had a card but now doesn't { newCard = null; hasChangedCard = true; } else if (vehicleDb.PromotionCard == null && vehicle.CardType != null) // didn't have a card but now has { var vehicleCardType = (Data.CardType)Enum.Parse(typeof(Data.CardType), vehicle.CardType); newCard = promotionCardRepository.FirstOrDefault(x => x.Type == vehicleCardType); hasChangedCard = true; } else { var vehicleCardType = (Data.CardType)Enum.Parse(typeof(Data.CardType), vehicle.CardType); if (vehicleDb.PromotionCard.Type != vehicleCardType) // had a card and now it's changed { newCard = promotionCardRepository.FirstOrDefault(x => x.Type == vehicleCardType); hasChangedCard = true; } } if (hasChangedCard) { vehicleDb.PromotionCard = newCard; await vehicleRepository.UpdateAsync(vehicleDb); } } return(isRegistered); }