From 45c05b572001d694de35f9f96ebbf619d5f0fb8b Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Tue, 17 Mar 2026 14:41:57 +0100 Subject: [PATCH] fix: snapshot existing config before update; rollback returns 200 --- k-tv-backend/api/src/routes/channels/schedule.rs | 2 +- k-tv-backend/domain/src/services/channel.rs | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/k-tv-backend/api/src/routes/channels/schedule.rs b/k-tv-backend/api/src/routes/channels/schedule.rs index ffd6a21..dc57dc8 100644 --- a/k-tv-backend/api/src/routes/channels/schedule.rs +++ b/k-tv-backend/api/src/routes/channels/schedule.rs @@ -130,5 +130,5 @@ pub(super) async fn rollback_schedule( let detail = format!("rollback to gen {}; {} slots", target.generation, schedule.slots.len()); let _ = state.activity_log_repo.log("schedule_rollback", &detail, Some(channel_id)).await; - Ok((StatusCode::CREATED, Json(ScheduleResponse::from(schedule)))) + Ok(Json(ScheduleResponse::from(schedule))) } diff --git a/k-tv-backend/domain/src/services/channel.rs b/k-tv-backend/domain/src/services/channel.rs index 1756d70..17b71fb 100644 --- a/k-tv-backend/domain/src/services/channel.rs +++ b/k-tv-backend/domain/src/services/channel.rs @@ -44,10 +44,12 @@ impl ChannelService { } pub async fn update(&self, channel: Channel) -> DomainResult { - // Auto-snapshot the config being replaced - self.channel_repo - .save_config_snapshot(channel.id, &channel.schedule_config, None) - .await?; + // Auto-snapshot the existing config before overwriting + if let Some(existing) = self.channel_repo.find_by_id(channel.id).await? { + self.channel_repo + .save_config_snapshot(channel.id, &existing.schedule_config, None) + .await?; + } self.channel_repo.save(&channel).await?; Ok(channel) }