public override Vehicle MapToVehicle(VehicleDTO vehicleDTO)
            {
                var mapper    = new VehicleMapper();
                var vehicleId = "210e1e7b45b69bde39f423be";

                vehicleDTO.Id = vehicleId;

                return(mapper.MapToVehicle(vehicleDTO));
            }
예제 #2
0
            public async Task <Maybe <string> > Handle(CreateVehicleCommand request, CancellationToken cancellationToken)
            {
                //TODO think about IDs
                var vehicleDTO = request.vehicleDTO;

                vehicleDTO.GeneratePopertyIds();

                var vehicle = vehicleMapper.MapToVehicle(vehicleDTO);

                var existingVehiclesCursor = await sparePartsDbContext.Vehicles.FindAsync(v =>
                                                                                          v.ManufacturerName == vehicle.ManufacturerName &&
                                                                                          v.Model == vehicle.Model &&
                                                                                          v.Generation == vehicle.Generation);

                var existingVehicle = await existingVehiclesCursor.ToListAsync();

                if (existingVehicle.Count > 0)
                {
                    return(existingVehicle.FirstOrDefault().Id.ToString());
                }

                var askForSparePartsEvent = new AskForSparePartsPricesIntegrationEvent(vehicleDTO);

                clientSessionHandle.StartTransaction();

                try
                {
                    await sparePartsDbContext.Vehicles.InsertOneAsync(vehicle);

                    await sparePartsIntegrationEventService.PublishThroughEventBusAsync(askForSparePartsEvent);

                    await clientSessionHandle.CommitTransactionAsync();
                }
                catch (Exception ex)
                {
                    logger.Information($"Can`t write to db vehicle: {vehicle.ToJson()} Exception: {ex.Message}");

                    await clientSessionHandle.AbortTransactionAsync();

                    return(Maybe <string> .None);
                }

                return(vehicle.Id.ToString());
            }