@@ -68,6 +68,11 @@ impl TimeSheetRepository<'_> {
6868 }
6969
7070 async fn get_time_registration ( & mut self ) -> Result < TimeRegistration > {
71+ // Caching
72+ if let Some ( time_registration) = & self . time_registration {
73+ return Ok ( time_registration. clone ( ) ) ;
74+ }
75+
7176 let container_instance = self . get_container_instance ( ) . await ?;
7277 let ( time_registration, concurrency_control) = self
7378 . client
@@ -95,13 +100,13 @@ impl TimeSheetRepository<'_> {
95100 }
96101
97102 /// Gets and caches time sheet
98- pub ( crate ) async fn get_time_sheet ( & mut self ) -> Result < TimeSheet > {
99- if let Some ( time_registration ) = & self . time_registration {
100- return Ok ( time_registration . clone ( ) . into ( ) ) ;
103+ pub ( crate ) async fn get_time_sheet ( & mut self , week : Option < & WeekNumber > ) -> Result < TimeSheet > {
104+ if let Some ( week ) = week {
105+ return self . get_week ( week ) . await . context ( "Failed to get week" ) ;
101106 }
102107
108+ // Fall back to today's week
103109 let time_registration = self . get_time_registration ( ) . await ?;
104-
105110 Ok ( time_registration. into ( ) )
106111 }
107112
@@ -132,12 +137,13 @@ impl TimeSheetRepository<'_> {
132137 & mut self ,
133138 hours : f32 ,
134139 days : & Days ,
135- week : & WeekNumber ,
140+ week : Option < & WeekNumber > ,
136141 job : & str ,
137142 task : & str ,
138143 ) -> Result < ( ) , AddLineError > {
144+ info ! ( "Getting time sheet" ) ;
139145 let time_sheet = self
140- . get_time_sheet ( )
146+ . get_time_sheet ( week )
141147 . await
142148 . context ( "Failed to get time sheet" ) ?;
143149
@@ -151,6 +157,7 @@ impl TimeSheetRepository<'_> {
151157
152158 let days: HashSet < _ > = days. iter ( ) . map ( |& d| d as u8 ) . collect ( ) ;
153159
160+ info ! ( "Setting time" ) ;
154161 let concurrency_control = self
155162 . client
156163 . set_time ( hours, & days, line_number, & container_instance)
@@ -222,26 +229,21 @@ impl TimeSheetRepository<'_> {
222229 Ok ( time_registration. into ( ) )
223230 }
224231
225- async fn get_number_of_lines ( & mut self ) -> Result < u8 > {
226- let time_sheet = self . get_time_sheet ( ) . await ?;
227- Ok ( time_sheet. lines . len ( ) as u8 )
228- }
229-
230232 pub ( crate ) async fn delete_line (
231233 & mut self ,
232234 line_number : & LineNumber ,
233- week : & WeekNumber ,
235+ week : Option < & WeekNumber > ,
234236 ) -> Result < ( ) > {
235237 // We need to get the time sheet before we can modify it
236- let _ = self
237- . get_time_sheet ( )
238+ let time_sheet = self
239+ . get_time_sheet ( week )
238240 . await
239241 . context ( "Failed to get time sheet" ) ?;
240242
241243 let line_number = match line_number {
242244 LineNumber :: Number ( line_number) => * line_number,
243245 LineNumber :: Last => {
244- let last_line_number = self . get_number_of_lines ( ) . await ? ;
246+ let last_line_number = time_sheet . lines . len ( ) as u8 ;
245247 info ! ( "Using line number {last_line_number} as last line number" ) ;
246248 last_line_number
247249 }
@@ -261,16 +263,15 @@ impl TimeSheetRepository<'_> {
261263 Ok ( ( ) )
262264 }
263265
264- pub ( crate ) async fn get_week ( & mut self , week : & WeekNumber ) -> Result < TimeSheet > {
265- // TODO: only call `set_time` if week isn't today's week
266+ async fn get_week ( & mut self , week : & WeekNumber ) -> Result < TimeSheet > {
267+ // We have to get the time registration before we can set a week
266268 let _ = self . get_time_registration ( ) . await ?;
267269
268270 let container_instance = self
269271 . get_container_instance ( )
270272 . await
271273 . context ( "Failed to get container instance" ) ?;
272274
273- // TODO: calculate date from week number
274275 let year = Local :: now ( ) . date_naive ( ) . year ( ) ;
275276 let date = week
276277 . first_day ( year)
0 commit comments