timothy and Claude Opus 4.8
5c9f04fdec
feat( #253 PR2): optimistic-concurrency on schedule-items aggregate
...
Wire the frozen #253 ETag/If-Match/412 recipe onto ProgramSchedule /
schedule-items, keeping the PR#258 positional in-place reconcile intact.
Backend:
- ReplaceProgramScheduleItems command gains Option<int> ExpectedVersion;
ReplaceScheduleItemsRequest.ToCommand threads it.
- Handler: standalone CheckVersion Either AFTER validation (so 412 isn't
flattened to 422), unconditional Version++ before save, guarded save via
SaveChangesWithConcurrencyGuard, and 412 propagated without running the
post-save reload/enqueue.
- ProgramScheduleViewModel + Mapper carry Version.
- ScheduleController: GET /items emits ETag; PUT /items parses If-Match
(malformed -> 400), threads ExpectedVersion, re-queries for the new ETag,
and advertises 400/412.
- Sibling config-writers (Add/Delete item, Update schedule) bump Version.
Frontend:
- schedules.ts: getScheduleItemsWithMeta + replaceScheduleItems(ifMatch)
returning ResponseWithMeta.
- SchedulesScreen: etagRef threaded through the #242 dirty-guard (set from
load + every successful save); 412 opens a conflict ConfirmDialog whose
Reload discards the draft and re-runs loadItems.
Tests: handler concurrency suite (stale->412 no mutation + fill-group state
untouched, match/absent success+bump, no-op still bumps, racing save->412);
controller ETag/If-Match/412 cases; SchedulesScreen 412-conflict-dialog test.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-11 18:36:25 +02:00
Jason Dove and GitHub
7e30444857
dependencies and code cleanup ( #2117 )
...
* fix validation in new form layout
* pin mediatr to last oss version
* update dependencies
* cleanup code in core
* cleanup code in ffmpeg
* cleanup code in infra
* cleanup code in scanner
* cleanup code in application
* cleanup main code
* cleanup test code
* solution-wide code cleanup
2025-07-06 15:56:17 +00:00
Jason Dove and GitHub
d9a3496bf5
add fixed start time behavior option to schedules and schedule items ( #2017 )
2025-05-30 09:30:09 +00:00
Jason Dove and GitHub
d19e95fb38
add random start point option ( #804 )
2022-05-13 20:36:03 -05:00
Jason Dove and GitHub
c02b83d0d6
code cleanup ( #743 )
...
* update tools
* run code cleanup
* update dependencies
2022-04-19 17:47:18 -05:00
Jason Dove and GitHub
1ab98578ab
refactor namespaces and imports ( #670 )
...
* re-namespace
* optimize usings
* more usings
* more of the same
* more implicit/global usings
* cleanup all usings
* minor fixes
2022-03-03 15:36:07 -06:00
Jason Dove and GitHub
78fdc9c57a
add option to shuffle schedule items ( #652 )
...
* add schedule setting
* it works
* fix tests
* update readme
* rebuild all playouts
2022-02-22 21:20:40 -06:00
Jason Dove and GitHub
632753ea93
add multi collections ( #315 )
...
* start to add multi-collections
* create multi collection with no items
* edit multi collections
* fix plex credentials threading issue
* add playback order to multi collection items
* group episodes outside of shuffled enumerator
* move playback order onto each schedule item
* fix multi collection grouping
* update changelog
2021-07-17 21:45:41 -05:00
Jason Dove and GitHub
0fb5bfde58
refactor dbcontext lifetime ( #258 )
...
* refactor create playout handler
* refactor get all playouts handler
* refactor delete playout handler
* remove dead code
* ignore unnamed artists for collections
* more repository cleanup
* more schedule items refactoring
* more playout refactoring
* refactor playout builder
* refactor ffmpeg profiles
* more ffmpeg profile refactoring
* rework resolutions
* refactor media collections
* refactor config elements
* update changelog
* more cleanup
2021-06-13 20:19:10 -05:00
Jason Dove
4d52e115b5
Initial commit
2021-02-08 21:13:53 -06:00