Releases: ChuckNovice/RecurringThings
Releases · ChuckNovice/RecurringThings
v0.1.0-alpha.8
What's Changed
MongoDB Convention-Based Serialization
- Removed all BSON attributes from MongoDB documents
- Added convention-based serialization for consistent configuration:
NamedIdMemberConvention- Maps "Id" property to MongoDB "_id" fieldCamelCaseElementNameConvention- Converts property names to camelCaseIgnoreIfNullConvention- Excludes null properties from serializationGuidStringRepresentationConvention- Serializes Guid properties as strings
- Added custom
StringGuidSerializerto fix "GuidRepresentation is Unspecified" error in newer MongoDB drivers - Added
MongoDbInitializerfor centralized convention registration
Full Changelog: v0.1.0-alpha.7...v0.1.0-alpha.8
v0.1.0-alpha.7
Changes
API Surface Improvements
- Make Domain classes (
Recurrence,Occurrence,OccurrenceException,OccurrenceOverride) internal to hide implementation details - Make repository interfaces internal
- Make
RecurrenceEngineand MongoDB repositories/mapper internal - Change
CreateRecurrenceAsyncandCreateOccurrenceAsyncto returnCalendarEntryinstead of domain types
CalendarEntry Property Accessibility
- Immutable (
init):Organization,EntryType,TimeZone,RecurrenceId,OccurrenceId,OverrideId,ExceptionId,RecurrenceDetails,Original - Mutable (
set):StartTime,Duration,Extensions - Mutable on standalone/recurrence only:
Type,ResourcePath - Internal:
EndTime(computed value)
Other Changes
- Add
OriginalResourcePathtracking for database lookups whenResourcePathis modified - Allow
TypeandResourcePathchanges on standalone occurrences (previously blocked) - Block
TypeandResourcePathchanges on virtualized occurrences (inherit from parent recurrence) - Add
InternalsVisibleTofor test projects andDynamicProxyGenAssembly2
Breaking Changes
| Change | Before | After |
|---|---|---|
CreateRecurrenceAsync return type |
Task<Recurrence> |
Task<CalendarEntry> |
CreateOccurrenceAsync return type |
Task<Occurrence> |
Task<CalendarEntry> |
| Domain classes visibility | public |
internal |
| Repository interfaces visibility | public |
internal |
CalendarEntry.Organization |
set |
init |
CalendarEntry.EntryType |
set |
init |
CalendarEntry.TimeZone |
set |
init |
CalendarEntry.EndTime |
set |
internal set |
| Standalone occurrence Type/ResourcePath | immutable | mutable |
v0.1.0-alpha.5
Breaking Changes
- Removed
RecurrenceEndTimefromRecurrenceCreate- The recurrence end time is now automatically extracted from the RRule UNTIL clause - Removed
RecurrenceEndTimefromRecurrenceDetails- Use the RRule to parse the end time if needed
Changes
- Simplified API: no longer need to pass redundant
RecurrenceEndTimethat duplicates the RRule UNTIL value - Replaced regex-based RRule validation with Ical.Net's
RecurrencePatternparser for more robust validation
Migration
Before:
new RecurrenceCreate
{
RRule = "FREQ=DAILY;UNTIL=20261231T235959Z",
RecurrenceEndTime = new DateTime(2026, 12, 31, 23, 59, 59, DateTimeKind.Utc), // redundant
...
}After:
new RecurrenceCreate
{
RRule = "FREQ=DAILY;UNTIL=20261231T235959Z",
// RecurrenceEndTime is extracted automatically from UNTIL
...
}