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
timothy
b552905799
feat(api): add schedule REST endpoints
...
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 3m40s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 4m52s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
Refs #36
2026-06-29 08:13:14 +02:00
Jason Dove and GitHub
bcd2ea7db3
db optimizations around names and case-sensitivity ( #2749 )
...
* generate (case-insensitive) unique names for fields that should be unique
* move name case-insensitivity down to schema level
* update changelog
2026-01-02 09:25:23 -06:00
Jason Dove and GitHub
1c07df5bc3
use cancellation tokens in many places ( #2350 )
...
* use cancellation tokens everywhere
* more cancellation tokens
2025-08-27 03:20:35 +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
087901d177
adjust block unique constraint ( #1634 )
...
* upgrade dependencies
* allow blocks with same name in different groups
* code cleanup
2024-03-05 10:39:06 -06: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
c2eec2fc2d
playout rework to maintain collection progress ( #720 )
...
* initial work on maintaining playout state
* debugging wip
* fix refresh playout logic
* fix failing test
* more fixes
* update changelog
* comment out some debug logs
* comment out more logs
2022-04-02 21:19:59 -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 and GitHub
c70f153241
keep crossover episodes together ( #237 )
2021-05-31 11:58:56 -05:00
Jason Dove
6e6d53d847
multi-episode grouping bugfix
2021-05-18 09:56:04 -05:00
Jason Dove and GitHub
47e9a319ce
add option to keep multi-part episodes together when shuffling ( #188 )
...
* add setting to keep multi-part episodes together
* keep multi-part episodes together when shuffling
2021-05-18 08:23:08 -05:00
Jason Dove
4d52e115b5
Initial commit
2021-02-08 21:13:53 -06:00