public IEnumerable <string> GetReadModelIds(IDomainEvent domainEvent) { IAggregateEvent aggregateEvent = domainEvent.GetAggregateEvent(); switch (aggregateEvent) { case InvitationAdded @event: yield return(@event.InvitationId.Value); break; case InvitationDeleted @event: yield return(@event.InvitationId.Value); break; case InvitationAccepted @event: yield return(@event.InvitationId.Value); break; case InvitationRejected @event: yield return(@event.InvitationId.Value); break; } }
private IIdentity GetIdentityTypeForEvent(IDomainEvent @event) { if (@event.GetAggregateEvent() is RoomOccupied roomOccupied) { return(roomOccupied.ReservationId); } return(@event.GetIdentity()); }
public ResourceCreationSagaId LocateSaga(IDomainEvent domainEvent) { switch (domainEvent.GetAggregateEvent()) { case ResourceCreatedEvent _: return(new ResourceCreationSagaId($"{LocatorIdPrefix}-{domainEvent.GetIdentity()}")); default: throw new ArgumentException(nameof(domainEvent)); } }
public RabbitMqMessage Create(IDomainEvent domainEvent) { var messageId = domainEvent.Metadata.EventId.Value; var message = JsonConvert.SerializeObject(domainEvent.GetAggregateEvent()); var headers = domainEvent.Metadata.ToDictionary(kv => kv.Key, kv => (Object)kv.Value); return(new RabbitMqMessage( messageId: messageId, message: message, headers: headers )); }
public IEnumerable <string> GetReadModelIds(IDomainEvent domainEvent) { IAggregateEvent aggregateEvent = domainEvent.GetAggregateEvent(); switch (aggregateEvent) { case EmployeeAddedEvent employeeRecordAddedEvent: yield return(employeeRecordAddedEvent.EmployeeRecord.Id.Value); break; } }
public IEnumerable <string> GetReadModelIds(IDomainEvent domainEvent) { IAggregateEvent aggregateEvent = domainEvent.GetAggregateEvent(); switch (aggregateEvent) { case TransactionAddedEvent transactionRecordAddedEvent: yield return(transactionRecordAddedEvent.Transaction.Id.Value); break; } }
public MoneyTransferSagaId LocateSaga(IDomainEvent domainEvent) { switch (domainEvent.GetAggregateEvent()) { case MoneySentEvent evt: return(new MoneyTransferSagaId($"{LocatorIdPrefix}-{evt.Transaction.Id}")); case MoneyReceivedEvent evt: return(new MoneyTransferSagaId($"{LocatorIdPrefix}-{evt.Transaction.Id}")); default: throw new ArgumentException(nameof(domainEvent)); } }
public TestAsyncSagaId LocateSaga(IDomainEvent domainEvent) { var moniker = "testSaga"; switch (domainEvent.GetAggregateEvent()) { case TestSentEvent evt: return new TestAsyncSagaId($"{moniker}-{evt.Test.Id}"); case TestReceivedEvent evt: return new TestAsyncSagaId($"{moniker}-{evt.Test.Id}"); default: throw new ArgumentException(nameof(domainEvent)); } }
public static Transaktion FromEvent(IDomainEvent domainEvent) { var aggregateEvent = domainEvent.GetAggregateEvent(); var timestamp = domainEvent.Timestamp; switch (aggregateEvent) { case Eingezahlt eingezahlt: return(new Transaktion(timestamp, eingezahlt)); case Abgebucht abgebucht: return(new Transaktion(timestamp, abgebucht)); } throw new ArgumentException(nameof(domainEvent)); }
public Task <ISagaId> LocateSagaAsync(IDomainEvent domainEvent, CancellationToken cancellationToken) { var e = domainEvent.GetAggregateEvent(); if (e is BezahlungAngefordert angefordertEvent) { var bestellung = (BestellungId)domainEvent.GetIdentity(); ISagaId id = new BezahlungId(bestellung, angefordertEvent.Benutzer); return(Task.FromResult(id)); } if (e is Abgebucht || e is KontoEroeffnet) { return(Task.FromResult(this.CreateId(domainEvent))); } return(Task.FromResult(BezahlungId.Empty)); }
public IEnumerable <string> GetReadModelIds(IDomainEvent domainEvent) { var aggregateEvent = domainEvent.GetAggregateEvent(); switch (aggregateEvent) { case ThingyMessageAddedEvent messageAddedEvent: yield return(messageAddedEvent.ThingyMessage.Id.Value); break; case ThingyMessageHistoryAddedEvent messageHistoryAddedEvent: foreach (var message in messageHistoryAddedEvent.ThingyMessages) { yield return(message.Id.Value); } break; } }
public IEnumerable <string> GetReadModelIds(IDomainEvent domainEvent) { var aggregateEvent = domainEvent.GetAggregateEvent(); switch (aggregateEvent) { case BankStatementExtracted1Event pe: { foreach (var id in pe.PredictionRequests.Select(x => x.Id).Distinct()) { yield return(BankStatementLineItemId.With(id).ToString()); } break; } case BankStatementPredicted2Event pe: { foreach (var req in pe.PredictionResults.Select(x => x.Request.Id).Distinct()) { yield return(BankStatementLineItemId.With(req).ToString()); } break; } case BankStatementTextMatched3Event pe: { foreach (var req in pe.Matched.Select(x => x.Key.Request.Id).Distinct()) { yield return(BankStatementLineItemId.With(req).ToString()); } foreach (var req in pe.Unmatched.Select(x => x.Request.Id).Distinct()) { yield return(BankStatementLineItemId.With(req).ToString()); } break; } } }
public Task <ISagaId> LocateSagaAsync(IDomainEvent domainEvent, CancellationToken cancellationToken) { var @event = domainEvent.GetAggregateEvent(); switch (@event) { case PatientIsRegisteredEvent _: { var patientId = (PatientId)domainEvent.GetIdentity(); var sagaId = GetSagaId(patientId); return(Task.FromResult <ISagaId>(sagaId)); } case TreatmentRoomIsReservedEvent treatmentRoomIsReserved: { var sagaId = new ConsultationSchedulerSagaId(treatmentRoomIsReserved.ReferenceId); return(Task.FromResult <ISagaId>(sagaId)); } case DoctorIsReservedEvent doctorIsReserved: { var sagaId = new ConsultationSchedulerSagaId(doctorIsReserved.ReferenceId); return(Task.FromResult <ISagaId>(sagaId)); } case ConsultationSchedulingIsCompletedEvent schedule: { var sagaId = GetSagaId(schedule.PatientId); return(Task.FromResult <ISagaId>(sagaId)); } default: { var patientId = domainEvent.Metadata["patientId"]; var sagaId = GetSagaId(patientId); return(Task.FromResult <ISagaId>(sagaId)); } } }
public IEnumerable <string> GetReadModelIds(IDomainEvent domainEvent) { IAggregateEvent aggregateEvent = domainEvent.GetAggregateEvent(); switch (aggregateEvent) { case CompanyAddedEvent companyRecordAddedEvent: yield return(companyRecordAddedEvent.CompanyRecord.Id.Value); break; case CompanyEditedEvent companyEditedEvent: yield return(companyEditedEvent.CompanyRecord.Id.Value); break; case CompanyDeletedEvent companyDeletedEvent: yield return(companyDeletedEvent.CompanyRecord.Id.Value); break; } }
public RabbitMqMessage CreateMessage(IDomainEvent domainEvent) { var serializedEvent = _eventJsonSerializer.Serialize( domainEvent.GetAggregateEvent(), domainEvent.Metadata); var routingKey = new RoutingKey(string.Format( "eventflow.domainevent.{0}.{1}.{2}", domainEvent.Metadata[MetadataKeys.AggregateName].ToSlug(), domainEvent.Metadata.EventName.ToSlug(), domainEvent.Metadata.EventVersion)); var exchange = new Exchange(_rabbitMqConfiguration.Exchange); var rabbitMqMessage = new RabbitMqMessage( serializedEvent.SerializedData, domainEvent.Metadata, exchange, routingKey, new MessageId(domainEvent.Metadata[MetadataKeys.EventId])); _log.Verbose("Create RabbitMQ message {0}", rabbitMqMessage); return(rabbitMqMessage); }
public RabbitMqMessage CreateMessage(IDomainEvent domainEvent) { var serializedEvent = _eventJsonSerializer.Serialize( domainEvent.GetAggregateEvent(), domainEvent.Metadata); var routingKey = new RoutingKey(string.Format( "eventflow.domainevent.{0}.{1}.{2}", domainEvent.Metadata[MetadataKeys.AggregateName].ToSlug(), domainEvent.Metadata.EventName.ToSlug(), domainEvent.Metadata.EventVersion)); var exchange = new Exchange("eventflow"); var rabbitMqMessage = new RabbitMqMessage( serializedEvent.SerializedData, domainEvent.Metadata, exchange, routingKey, new MessageId(domainEvent.Metadata[MetadataKeys.EventId])); _log.Verbose("Create RabbitMQ message {0}", rabbitMqMessage); return rabbitMqMessage; }
public SerializedEvent Serialize( IDomainEvent domainEvent) { return(Serialize(domainEvent.GetAggregateEvent(), domainEvent.Metadata)); }
private async Task <GetEnrollmentDetails.EventData> BuildEventData(EnrollmentAggregate aggregate, IDomainEvent <EnrollmentAggregate, EnrollmentAggregate.EnrollmentId> @event, IReadOnlyCollection <Training> trainings, IReadOnlyCollection <TrainerDetails> trainers) { switch (@event.GetAggregateEvent()) { case RecruitmentFormSubmitted e: return(new GetEnrollmentDetails.RecruitmentFormSubmittedEventData() { DateTime = e.SubmissionDate.InMainTimezone(), AboutMe = e.AboutMe, EmailAddress = e.Email.ToString(), FullName = $"{e.FirstName} {e.LastName}", PhoneNumber = e.PhoneNumber.ToString(), PreferredLecturingCities = e.PreferredLecturingCities, PreferredTrainings = trainings .Where(x => e.PreferredTrainingIds.Contains(x.ID)) .Select(x => BuildTrainingSummary(x, trainers)).ToArray() }); case EmailSent e: return(new GetEnrollmentDetails.EmailSentEventData() { DateTime = e.Instant.InMainTimezone(), To = aggregate.Email.ToString(), Body = e.Body, Subject = e.Subject, IsBodyHtml = e.IsBodyHtml }); case EmailSendingFailed e: return(new GetEnrollmentDetails.EmailFailedToSendEventData() { DateTime = e.Instant.InMainTimezone(), To = aggregate.Email.ToString(), Body = e.Body, Subject = e.Subject, IsBodyHtml = e.IsBodyHtml }); case CandidateAcceptedTrainingInvitation e: return(new GetEnrollmentDetails.CandidateAcceptedTrainingInvitationEventData() { DateTime = @event.Timestamp.ToZonedDateTime(), RecordingUser = await GetUserName(e.RecordingCoordinatorID), SelectedTraining = BuildTrainingSummary(trainings.Single(x => x.ID == e.SelectedTrainingID), trainers), AdditionalNotes = e.AdditionalNotes }); case CandidateRefusedTrainingInvitation e: return(new GetEnrollmentDetails.CandidateRefusedTrainingInvitationEventData() { DateTime = @event.Timestamp.ToZonedDateTime(), RecordingUser = await GetUserName(e.RecordingCoordinatorID), AdditionalNotes = e.AdditionalNotes, RefusalReason = e.RefusalReason }); case CandidateAttendedTraining e: return(new GetEnrollmentDetails.CandidateAttendedTrainingEventData() { DateTime = @event.Timestamp.ToZonedDateTime(), RecordingUser = await GetUserName(e.RecordingCoordinatorID), Training = BuildTrainingSummary(trainings.Single(x => x.ID == e.TrainingID), trainers), AdditionalNotes = e.AdditionalNotes }); case CandidateWasAbsentFromTraining e: return(new GetEnrollmentDetails.CandidateWasAbsentFromTrainingEventData() { DateTime = @event.Timestamp.ToZonedDateTime(), RecordingUser = await GetUserName(e.RecordingCoordinatorID), Training = BuildTrainingSummary(trainings.Single(x => x.ID == e.TrainingID), trainers), AdditionalNotes = e.AdditionalNotes }); case CandidateObtainedLecturerRights e: return(new GetEnrollmentDetails.CandidateObtainedLecturerRightsEventData() { DateTime = @event.Timestamp.ToZonedDateTime(), RecordingUser = await GetUserName(e.GrantingCoordinatorID), AdditionalNotes = e.AdditionalNotes }); case CandidateResignedPermanently e: return(new GetEnrollmentDetails.CandidateResignedPermanentlyEventData() { DateTime = @event.Timestamp.ToZonedDateTime(), RecordingUser = await GetUserName(e.RecordingCoordinatorID), ResignationReason = e.ResignationReason, AdditionalNotes = e.AdditionalNotes }); case CandidateResignedTemporarily e: return(new GetEnrollmentDetails.CandidateResignedTemporarilyEventData() { DateTime = @event.Timestamp.ToZonedDateTime(), RecordingUser = await GetUserName(e.RecordingCoordinatorID), ResignationReason = e.ResignationReason, AdditionalNotes = e.AdditionalNotes, ResumeDate = e.ResumeDate }); case ContactOccured e: return(new GetEnrollmentDetails.ContactOccuredEventData() { DateTime = @event.Timestamp.ToZonedDateTime(), RecordingUser = await GetUserName(e.RecordingUserId), CommunicationChannel = e.CommunicationChannel, Content = e.Content, AdditionalNotes = e.AdditionalNotes }); default: throw new NotSupportedException(); } }
private async Task <GetDetails.EventData> BuildEventData(SchoolAggregate school, IDomainEvent <SchoolAggregate, SchoolId> @event) { switch (@event.GetAggregateEvent()) { case SchoolRegistered e: return(new GetDetails.SchoolRegisteredEventData() { DateTime = e.Timestamp.InMainTimezone().ToOffsetDateTime() }); case ContactOccured e: return(new GetDetails.ContactOccuredEventData() { DateTime = e.ContactTimestamp.InMainTimezone().ToOffsetDateTime(), CommunicationChannel = e.CommunicationChannel, ContactPersonName = e.ContactPersonName, PhoneNumber = e.PhoneNumber, EmailAddress = e.EmailAddress, Content = e.Content, AdditionalNotes = e.AdditionalNotes, RecordingUser = await GetUserName(e.RecordingUserId) }); case InitialAgreementAchieved e: return(new GetDetails.InitialAgreementAchievedEventData() { DateTime = OffsetDateTime.FromDateTimeOffset(@event.Timestamp), AgreeingPersonName = e.AgreeingPersonName, AdditionalNotes = e.AdditionalNotes, RecordingUser = await GetUserName(e.RecordingUserId) }); case FixedTermAgreementSigned e: return(new GetDetails.FixedTermAgreementSignedEventData() { AgreementId = e.Id, DateTime = OffsetDateTime.FromDateTimeOffset(@event.Timestamp), AgreementEndDate = e.AgreementEndDate, AdditionalNotes = e.AdditionalNotes, RecordingUser = await GetUserName(e.RecordingUserId) }); case PermanentAgreementSigned e: return(new GetDetails.PermanentAgreementSignedEventData() { AgreementId = e.Id, DateTime = OffsetDateTime.FromDateTimeOffset(@event.Timestamp), AdditionalNotes = e.AdditionalNotes, RecordingUser = await GetUserName(e.RecordingUserId) }); case SchoolResignedFromCooperation e: return(new GetDetails.SchoolResignedFromCooperationEventData() { DateTime = OffsetDateTime.FromDateTimeOffset(@event.Timestamp), PotentialNextContactDate = e.PotentialNextContactDate, AdditionalNotes = e.AdditionalNotes, RecordingUser = await GetUserName(e.RecordingUserId) }); case NoteAdded _: case NoteEdited _: case NoteDeleted _: return(null); default: throw new NotImplementedException(); } }