private AddRoadSegmentToNumberedRoad Translate(Messages.AddRoadSegmentToNumberedRoad command, IRequestedChangeIdentityTranslator translator) { var permanent = _nextNumberedRoadAttributeId(); var temporary = new AttributeId(command.TemporaryAttributeId); var segmentId = new RoadSegmentId(command.SegmentId); RoadSegmentId?temporarySegmentId; if (translator.TryTranslateToPermanent(segmentId, out var permanentSegmentId)) { temporarySegmentId = segmentId; segmentId = permanentSegmentId; } else { temporarySegmentId = null; } var number = NumberedRoadNumber.Parse(command.Ident8); var direction = RoadSegmentNumberedRoadDirection.Parse(command.Direction); var ordinal = new RoadSegmentNumberedRoadOrdinal(command.Ordinal); return(new AddRoadSegmentToNumberedRoad ( permanent, temporary, segmentId, temporarySegmentId, number, direction, ordinal )); }
private static NumberedRoadSegmentDirectionDbaseRecord RecordFrom(RoadSegmentNumberedRoadDirection item) { return(new NumberedRoadSegmentDirectionDbaseRecord { RICHTING = { Value = item.Translation.Identifier }, LBLRICHT = { Value = item.Translation.Name }, DEFRICHT = { Value = item.Translation.Description } }); }
public AddRoadSegmentToNumberedRoad( AttributeId temporaryAttributeId, RoadSegmentId segmentId, NumberedRoadNumber number, RoadSegmentNumberedRoadDirection direction, RoadSegmentNumberedRoadOrdinal ordinal) { TemporaryAttributeId = temporaryAttributeId; SegmentId = segmentId; Number = number; Direction = direction; Ordinal = ordinal; }
public Task When_importing_road_nodes() { var random = new Random(); var data = _fixture .CreateMany <ImportedRoadSegment>(random.Next(1, 10)) .Select(segment => { segment.PartOfNumberedRoads = _fixture .CreateMany <ImportedRoadSegmentNumberedRoadAttributes>(random.Next(1, 10)) .ToArray(); var expected = segment .PartOfNumberedRoads .Select(numberedRoad => new RoadSegmentNumberedRoadAttributeRecord { Id = numberedRoad.AttributeId, RoadSegmentId = segment.Id, DbaseRecord = new RoadSegmentNumberedRoadAttributeDbaseRecord { GW_OIDN = { Value = numberedRoad.AttributeId }, WS_OIDN = { Value = segment.Id }, IDENT8 = { Value = numberedRoad.Ident8 }, RICHTING = { Value = RoadSegmentNumberedRoadDirection.Parse(numberedRoad.Direction).Translation.Identifier }, LBLRICHT = { Value = RoadSegmentNumberedRoadDirection.Parse(numberedRoad.Direction).Translation.Name }, VOLGNUMMER = { Value = numberedRoad.Ordinal }, BEGINTIJD = { Value = numberedRoad.Origin.Since }, BEGINORG = { Value = numberedRoad.Origin.OrganizationId }, LBLBGNORG = { Value = numberedRoad.Origin.Organization } }.ToBytes(_services.MemoryStreamManager, Encoding.UTF8) }); return(new { importedRoadSegment = segment, expected }); }).ToList(); return(new RoadSegmentNumberedRoadAttributeRecordProjection(_services.MemoryStreamManager, Encoding.UTF8) .Scenario() .Given(data.Select(d => d.importedRoadSegment)) .Expect(data .SelectMany(d => d.expected) .Cast <object>() .ToArray() )); }
public RoadSegmentNumberedRoadAttributeRecordProjection(RecyclableMemoryStreamManager manager, Encoding encoding) { if (manager == null) { throw new ArgumentNullException(nameof(manager)); } if (encoding == null) { throw new ArgumentNullException(nameof(encoding)); } When <Envelope <ImportedRoadSegment> >((context, envelope, token) => { if (envelope.Message.PartOfNumberedRoads.Length == 0) { return(Task.CompletedTask); } var numberedRoadAttributes = envelope.Message .PartOfNumberedRoads .Select(numberedRoad => { var directionTranslation = RoadSegmentNumberedRoadDirection.Parse(numberedRoad.Direction).Translation; return(new RoadSegmentNumberedRoadAttributeRecord { Id = numberedRoad.AttributeId, RoadSegmentId = envelope.Message.Id, DbaseRecord = new RoadSegmentNumberedRoadAttributeDbaseRecord { GW_OIDN = { Value = numberedRoad.AttributeId }, WS_OIDN = { Value = envelope.Message.Id }, IDENT8 = { Value = numberedRoad.Ident8 }, RICHTING = { Value = directionTranslation.Identifier }, LBLRICHT = { Value = directionTranslation.Name }, VOLGNUMMER = { Value = numberedRoad.Ordinal }, BEGINTIJD = { Value = numberedRoad.Origin.Since }, BEGINORG = { Value = numberedRoad.Origin.OrganizationId }, LBLBGNORG = { Value = numberedRoad.Origin.Organization }, }.ToBytes(manager, encoding) }); }); return(context.RoadSegmentNumberedRoadAttributes.AddRangeAsync(numberedRoadAttributes, token)); }); When <Envelope <RoadNetworkChangesBasedOnArchiveAccepted> >(async(context, envelope, token) => { foreach (var change in envelope.Message.Changes.Flatten()) { switch (change) { case RoadSegmentAddedToNumberedRoad numberedRoad: var directionTranslation = RoadSegmentNumberedRoadDirection.Parse(numberedRoad.Direction).Translation; await context.RoadSegmentNumberedRoadAttributes.AddAsync(new RoadSegmentNumberedRoadAttributeRecord { Id = numberedRoad.AttributeId, RoadSegmentId = numberedRoad.SegmentId, DbaseRecord = new RoadSegmentNumberedRoadAttributeDbaseRecord { GW_OIDN = { Value = numberedRoad.AttributeId }, WS_OIDN = { Value = numberedRoad.SegmentId }, IDENT8 = { Value = numberedRoad.Ident8 }, RICHTING = { Value = directionTranslation.Identifier }, LBLRICHT = { Value = directionTranslation.Name }, VOLGNUMMER = { Value = numberedRoad.Ordinal }, BEGINTIJD = { Value = LocalDateTimeTranslator.TranslateFromWhen(envelope.Message.When) }, BEGINORG = { Value = envelope.Message.OrganizationId }, LBLBGNORG = { Value = envelope.Message.Organization } }.ToBytes(manager, encoding) }); break; } } }); }