11"""Controller for automated backup schedules."""
22
33from core .domain .entities .backup_schedule import BackupSchedule
4- from core .use_cases .manage_backup_schedules import (
5- ManageBackupSchedulesUseCase ,
6- ScheduleAlreadyExistsError ,
7- ScheduleNotFoundError ,
8- )
4+ from core .use_cases .manage_backup_schedules import ManageBackupSchedulesUseCase
95from core .use_cases .run_due_backups import RunDueBackupsUseCase
106from litestar import Controller , Router , delete , get , post , put
11- from litestar .exceptions import HTTPException , NotFoundException
12- from litestar .status_codes import HTTP_400_BAD_REQUEST , HTTP_409_CONFLICT
137
148from api .presentation .dto .requests import (
159 CreateBackupScheduleRequest ,
@@ -51,13 +45,7 @@ async def create_schedule(
5145 retention_keep_last = data .retention_keep_last ,
5246 retention_max_age_days = data .retention_max_age_days ,
5347 )
54- try :
55- created = await manage_schedules_use_case .create_schedule (schedule )
56- except ScheduleAlreadyExistsError as err :
57- raise HTTPException (
58- status_code = HTTP_409_CONFLICT ,
59- detail = f"Schedule already exists: { data .name } " ,
60- ) from err
48+ created = await manage_schedules_use_case .create_schedule (schedule )
6149 return _to_response (created )
6250
6351 @get ("/{schedule_id:int}" )
@@ -67,12 +55,7 @@ async def get_schedule(
6755 manage_schedules_use_case : ManageBackupSchedulesUseCase ,
6856 ) -> BackupScheduleResponse :
6957 """Get a backup schedule by ID."""
70- try :
71- schedule = await manage_schedules_use_case .get_schedule (schedule_id )
72- except ScheduleNotFoundError as err :
73- raise NotFoundException (
74- detail = f"Schedule not found: { schedule_id } "
75- ) from err
58+ schedule = await manage_schedules_use_case .get_schedule (schedule_id )
7659 return _to_response (schedule )
7760
7861 @put ("/{schedule_id:int}" )
@@ -83,61 +66,17 @@ async def update_schedule(
8366 manage_schedules_use_case : ManageBackupSchedulesUseCase ,
8467 ) -> BackupScheduleResponse :
8568 """Partially update a backup schedule."""
86- try :
87- existing = await manage_schedules_use_case .get_schedule (schedule_id )
88- except ScheduleNotFoundError as err :
89- raise NotFoundException (
90- detail = f"Schedule not found: { schedule_id } "
91- ) from err
92-
93- interval = data .resolved_interval_seconds ()
94- updated = BackupSchedule (
95- id = schedule_id ,
96- name = data .name if data .name is not None else existing .name ,
97- interval_seconds = (
98- interval if interval is not None else existing .interval_seconds
99- ),
100- target_ips = (
101- data .target_ips if data .target_ips is not None else existing .target_ips
102- ),
103- target_macs = (
104- data .target_macs
105- if data .target_macs is not None
106- else existing .target_macs
107- ),
108- all_credentialed = (
109- data .all_credentialed
110- if data .all_credentialed is not None
111- else existing .all_credentialed
112- ),
113- enabled = data .enabled if data .enabled is not None else existing .enabled ,
114- retention_keep_last = (
115- data .retention_keep_last
116- if data .retention_keep_last is not None
117- else existing .retention_keep_last
118- ),
119- retention_max_age_days = (
120- data .retention_max_age_days
121- if data .retention_max_age_days is not None
122- else existing .retention_max_age_days
123- ),
124- next_run_at = existing .next_run_at ,
69+ result = await manage_schedules_use_case .apply_schedule_update (
70+ schedule_id ,
71+ name = data .name ,
72+ interval_seconds = data .resolved_interval_seconds (),
73+ target_ips = data .target_ips ,
74+ target_macs = data .target_macs ,
75+ all_credentialed = data .all_credentialed ,
76+ enabled = data .enabled ,
77+ retention_keep_last = data .retention_keep_last ,
78+ retention_max_age_days = data .retention_max_age_days ,
12579 )
126- if not (updated .target_ips or updated .target_macs or updated .all_credentialed ):
127- raise HTTPException (
128- status_code = HTTP_400_BAD_REQUEST ,
129- detail = (
130- "A schedule needs at least one target "
131- "(target_ips, target_macs, or all_credentialed)"
132- ),
133- )
134- try :
135- result = await manage_schedules_use_case .update_schedule (updated )
136- except ScheduleAlreadyExistsError as err :
137- raise HTTPException (
138- status_code = HTTP_409_CONFLICT ,
139- detail = f"Schedule name already exists: { data .name } " ,
140- ) from err
14180 return _to_response (result )
14281
14382 @delete ("/{schedule_id:int}" )
@@ -147,12 +86,7 @@ async def delete_schedule(
14786 manage_schedules_use_case : ManageBackupSchedulesUseCase ,
14887 ) -> None :
14988 """Delete a backup schedule."""
150- try :
151- await manage_schedules_use_case .delete_schedule (schedule_id )
152- except ScheduleNotFoundError as err :
153- raise NotFoundException (
154- detail = f"Schedule not found: { schedule_id } "
155- ) from err
89+ await manage_schedules_use_case .delete_schedule (schedule_id )
15690
15791 @post ("/{schedule_id:int}/enable" )
15892 async def enable_schedule (
@@ -179,12 +113,7 @@ async def run_schedule(
179113 run_due_backups_use_case : RunDueBackupsUseCase ,
180114 ) -> ScheduleRunResultResponse :
181115 """Run a backup schedule now, ignoring its next run time."""
182- try :
183- result = await run_due_backups_use_case .run_schedule (schedule_id )
184- except ScheduleNotFoundError as err :
185- raise NotFoundException (
186- detail = f"Schedule not found: { schedule_id } "
187- ) from err
116+ result = await run_due_backups_use_case .run_schedule (schedule_id )
188117 return ScheduleRunResultResponse (
189118 schedule_id = result .schedule_id ,
190119 schedule_name = result .schedule_name ,
@@ -202,12 +131,7 @@ async def _set_enabled(
202131 schedule_id : int ,
203132 enabled : bool ,
204133 ) -> BackupScheduleResponse :
205- try :
206- updated = await use_case .set_enabled (schedule_id , enabled )
207- except ScheduleNotFoundError as err :
208- raise NotFoundException (
209- detail = f"Schedule not found: { schedule_id } "
210- ) from err
134+ updated = await use_case .set_enabled (schedule_id , enabled )
211135 return _to_response (updated )
212136
213137
0 commit comments