Not Rewindable
Mark a projection as not rewindable (forward-only) using [NotRewindable]:
using Cratis.Chronicle.Events;using Cratis.Chronicle.Keys;using Cratis.Chronicle.Projections.ModelBound;
[EventType]public record MbNotRewindableAuditEvent(string Message, DateTimeOffset OccurredAt);
[NotRewindable]public record MbNotRewindableAuditLog( [Key] Guid Id,
[SetFrom<MbNotRewindableAuditEvent>(nameof(MbNotRewindableAuditEvent.Message))] string Message,
[SetFrom<MbNotRewindableAuditEvent>(nameof(MbNotRewindableAuditEvent.OccurredAt))] DateTimeOffset Timestamp);Kotlin does not support this workflow yet.Java does not support this workflow yet.Elixir does not support this workflow yet.import { eventType, Guid, notRewindable, readModel, setFrom } from '@cratis/chronicle';
@eventType()class MbNotRewindableAuditEvent { message = ''; occurredAt = new Date();}
@readModel()@notRewindableclass MbNotRewindableAuditLog { id: Guid = Guid.empty;
@setFrom(MbNotRewindableAuditEvent, 'message') message = '';
@setFrom(MbNotRewindableAuditEvent, 'occurredAt') timestamp = new Date();}When to use
Section titled “When to use”- Audit logs or append-only data
- Projections that should never be replayed from scratch
- Time-sensitive data where replay would be incorrect
Best practices
Section titled “Best practices”- Use for append-only scenarios where historical replay would be problematic
- Consider carefully as this removes the ability to rebuild the projection from scratch
- Ensure you have alternative recovery strategies if the projection becomes corrupted