@@ -15,8 +15,9 @@ class BookManager {
1515 ValueListenable <List <LibraryBookProxy >> get libraryBookProxies =>
1616 _libraryBookProxies;
1717
18- final _isbnLibraryBooksMap =
19- ValueNotifier <Map <int , List <LibraryBookProxy >>>({});
18+ final _isbnLibraryBooksMap = ValueNotifier <Map <int , List <LibraryBookProxy >>>(
19+ {},
20+ );
2021 ValueListenable <Map <int , List <LibraryBookProxy >>> get isbnLibraryBooksMap =>
2122 _isbnLibraryBooksMap;
2223
@@ -29,9 +30,7 @@ class BookManager {
2930 List <BookTag > selectedTags = []; // Liste für ausgewählte Buch-Tags
3031
3132 final _lastSelectedLocation = ValueNotifier <LibraryBookLocation >(
32- LibraryBookLocation (
33- location: 'Bitte auswählen' ,
34- ),
33+ LibraryBookLocation (location: 'Bitte auswählen' ),
3534 );
3635 ValueListenable <LibraryBookLocation > get lastLocationValue =>
3736 _lastSelectedLocation;
@@ -41,7 +40,7 @@ class BookManager {
4140
4241 BookManager ();
4342
44- // final session = di<HubSessionManager>().credentials.value;
43+ // final session = di<HubSessionManager>().credentials.value;
4544
4645 int _currentPage = 1 ;
4746 final int _perPage = 30 ;
@@ -72,13 +71,12 @@ class BookManager {
7271
7372 // - manage collections
7473
75- void _refreshLibraryBookProxyCollections (
76- List <LibraryBook > libraryBooks,
77- ) {
74+ void _refreshLibraryBookProxyCollections (List <LibraryBook > libraryBooks) {
7875 final List <LibraryBookProxy > libraryBookProxies = [];
7976 for (LibraryBook libraryBook in libraryBooks) {
80- LibraryBookProxy libraryBookProxy =
81- LibraryBookProxy (librarybook: libraryBook);
77+ LibraryBookProxy libraryBookProxy = LibraryBookProxy (
78+ librarybook: libraryBook,
79+ );
8280 // 1. Add the libraryBookProxy to the collection
8381
8482 libraryBookProxies.add (libraryBookProxy);
@@ -90,12 +88,14 @@ class BookManager {
9088 .where ((p) => p.libraryId == libraryBookProxy.libraryId);
9189 if (existingLibraryBookProxy.isNotEmpty) {
9290 // If it exists, remove it from the list
93- _isbnLibraryBooksMap.value[libraryBook.book! .isbn]!
94- .removeWhere ((p) => p.libraryId == libraryBookProxy.libraryId);
91+ _isbnLibraryBooksMap.value[libraryBook.book! .isbn]! .removeWhere (
92+ (p) => p.libraryId == libraryBookProxy.libraryId,
93+ );
9594 }
9695 // Add the new libraryBookProxy to the list
97- _isbnLibraryBooksMap.value[libraryBook.book! .isbn]!
98- .add (libraryBookProxy);
96+ _isbnLibraryBooksMap.value[libraryBook.book! .isbn]! .add (
97+ libraryBookProxy,
98+ );
9999 } else {
100100 _isbnLibraryBooksMap.value[libraryBook.book! .isbn] = [libraryBookProxy];
101101 }
@@ -107,20 +107,20 @@ class BookManager {
107107 }
108108
109109 void _addLibraryBookProxyToCollections (LibraryBook libraryBook) {
110- final LibraryBookProxy libraryBookProxy =
111- LibraryBookProxy (librarybook: libraryBook);
110+ final LibraryBookProxy libraryBookProxy = LibraryBookProxy (
111+ librarybook: libraryBook,
112+ );
112113 final List <LibraryBookProxy > libraryBookProxies =
113114 _libraryBookProxies.value.toList ();
114115 libraryBookProxies.add (libraryBookProxy);
115116 _libraryBookProxies.value = libraryBookProxies;
116117 _isbnLibraryBooksMap.value[libraryBook.book! .isbn] = libraryBookProxies;
117118 }
118119
119- void _updateLibraryBookProxyInCollections (
120- LibraryBook libraryBook,
121- ) {
122- final LibraryBookProxy libraryBookProxy =
123- LibraryBookProxy (librarybook: libraryBook);
120+ void _updateLibraryBookProxyInCollections (LibraryBook libraryBook) {
121+ final LibraryBookProxy libraryBookProxy = LibraryBookProxy (
122+ librarybook: libraryBook,
123+ );
124124 final List <LibraryBookProxy > libraryBookProxies =
125125 _libraryBookProxies.value.toList ();
126126 int index = libraryBookProxies.indexWhere (
@@ -139,11 +139,13 @@ class BookManager {
139139 }
140140
141141 void _removeLibraryBookProxyFromCollection (
142- LibraryBookProxy libraryBookProxy) {
142+ LibraryBookProxy libraryBookProxy,
143+ ) {
143144 final List <LibraryBookProxy > libraryBookProxies =
144145 _libraryBookProxies.value.toList ();
145- libraryBookProxies
146- .removeWhere ((p) => p.libraryId == libraryBookProxy.libraryId);
146+ libraryBookProxies.removeWhere (
147+ (p) => p.libraryId == libraryBookProxy.libraryId,
148+ );
147149 _libraryBookProxies.value = libraryBookProxies;
148150 // Remove from the isbnLibraryBooksMap
149151 final isbnLibraryBookProxyList =
@@ -163,16 +165,23 @@ class BookManager {
163165
164166 //- get functions
165167
166- LibraryBookProxy ? getLibraryBookByLibraryBookId (int ? libraryBookId) {
168+ LibraryBookProxy ? getLibraryBookById (int ? libraryBookId) {
167169 if (libraryBookId == null ) return null ;
168- return _libraryBookProxies.value
169- .firstWhereOrNull ((element) => element.libraryBookId == libraryBookId);
170+ return _libraryBookProxies.value.firstWhereOrNull (
171+ (element) => element.id == libraryBookId,
172+ );
170173 }
171174
172175 List <LibraryBookProxy > getLibraryBooksByIsbn (int isbn) {
173176 return _isbnLibraryBooksMap.value[isbn] ?? [];
174177 }
175178
179+ LibraryBookProxy ? getLibraryBookByLibraryId (int id) {
180+ return _libraryBookProxies.value.firstWhereOrNull (
181+ (element) => element.id == id,
182+ );
183+ }
184+
176185 //- Repository calls
177186
178187 //- BOOK TAGS
@@ -213,11 +222,9 @@ class BookManager {
213222 }
214223
215224 Future <void > postLocation (String locationName) async {
216- final newLocation = LibraryBookLocation (
217- location: locationName,
218- );
219- final LibraryBookLocation ? responseLocation =
220- await _bookApiService.postBookLocation (newLocation);
225+ final newLocation = LibraryBookLocation (location: locationName);
226+ final LibraryBookLocation ? responseLocation = await _bookApiService
227+ .postBookLocation (newLocation);
221228 if (responseLocation == null ) {
222229 return ;
223230 }
@@ -230,9 +237,10 @@ class BookManager {
230237 return ;
231238 }
232239
233- _locations.value = _locations.value
234- .where ((loc) => loc.location != location.location)
235- .toList ();
240+ _locations.value =
241+ _locations.value
242+ .where ((loc) => loc.location != location.location)
243+ .toList ();
236244 }
237245
238246 void setLastLocationValue (LibraryBookLocation location) {
@@ -250,7 +258,9 @@ class BookManager {
250258 _refreshLibraryBookProxyCollections (responseBooks);
251259
252260 _notificationService.showSnackBar (
253- NotificationType .success, 'Bücher erfolgreich geladen' );
261+ NotificationType .success,
262+ 'Bücher erfolgreich geladen' ,
263+ );
254264 }
255265
256266 Future <void > postLibraryBook ({
@@ -269,7 +279,9 @@ class BookManager {
269279 _addLibraryBookProxyToCollections (responseBook);
270280
271281 _notificationService.showSnackBar (
272- NotificationType .success, 'Arbeitsheft erfolgreich erstellt' );
282+ NotificationType .success,
283+ 'Arbeitsheft erfolgreich erstellt' ,
284+ );
273285 }
274286
275287 Future <void > updateBookProperty ({
@@ -280,27 +292,30 @@ class BookManager {
280292 String ? description,
281293 String ? readingLevel,
282294 }) async {
283- final LibraryBook ? updatedbook =
284- await _bookApiService .updateLibraryBookOrBook (
285- isbn: isbn,
286- libraryId: libraryId,
287- title: title,
288- author: author,
289- description: description,
290- readingLevel: readingLevel,
291- );
295+ final LibraryBook ? updatedbook = await _bookApiService
296+ .updateLibraryBookOrBook (
297+ isbn: isbn,
298+ libraryId: libraryId,
299+ title: title,
300+ author: author,
301+ description: description,
302+ readingLevel: readingLevel,
303+ );
292304 if (updatedbook == null ) {
293305 return ;
294306 }
295307 _updateLibraryBookProxyInCollections (updatedbook);
296308
297309 _notificationService.showSnackBar (
298- NotificationType .success, 'Arbeitsheft erfolgreich aktualisiert' );
310+ NotificationType .success,
311+ 'Arbeitsheft erfolgreich aktualisiert' ,
312+ );
299313 }
300314
301315 Future <void > deleteLibraryBook (LibraryBookProxy libraryBookProxy) async {
302- final bool ? success =
303- await _bookApiService.deleteLibraryBook (libraryBookProxy.libraryBookId);
316+ final bool ? success = await _bookApiService.deleteLibraryBook (
317+ libraryBookProxy.id,
318+ );
304319 if (success == null ) {
305320 return ;
306321 }
@@ -334,17 +349,27 @@ class BookManager {
334349 }
335350 final searchResults = < LibraryBookProxy > [];
336351 for (final result in results) {
337- final LibraryBookProxy libraryBookProxy =
338- LibraryBookProxy (librarybook: result);
339- searchResults.add (libraryBookProxy);
352+ final LibraryBookProxy libraryBookProxy = LibraryBookProxy (
353+ librarybook: result,
354+ );
355+ // Check if this libraryId already exists to prevent duplicates
356+ if (! searchResults.any (
357+ (existing) => existing.libraryId == libraryBookProxy.libraryId,
358+ )) {
359+ searchResults.add (libraryBookProxy);
360+ }
340361 }
341362 _searchResults.value = searchResults;
342363
343364 _notificationService.showSnackBar (
344- NotificationType .success, 'Suchergebnisse aktualisiert' );
365+ NotificationType .success,
366+ 'Suchergebnisse aktualisiert' ,
367+ );
345368 } catch (e) {
346369 _notificationService.showSnackBar (
347- NotificationType .error, 'Fehler bei der Suche: $e ' );
370+ NotificationType .error,
371+ 'Fehler bei der Suche: $e ' ,
372+ );
348373 }
349374 }
350375
@@ -380,13 +405,19 @@ class BookManager {
380405 _hasMorePages = false ;
381406 } else {
382407 final List <LibraryBookProxy > searchResultsToUpdate =
383- searchResults .value;
408+ _searchResults .value. toList (); // Create a copy
384409 for (final result in newPageResults) {
385- final LibraryBookProxy libraryBookProxy =
386- LibraryBookProxy (librarybook: result);
387- searchResultsToUpdate.add (libraryBookProxy);
410+ final LibraryBookProxy libraryBookProxy = LibraryBookProxy (
411+ librarybook: result,
412+ );
413+ // Check if this libraryId already exists to prevent duplicates
414+ if (! searchResultsToUpdate.any (
415+ (existing) => existing.libraryId == libraryBookProxy.libraryId,
416+ )) {
417+ searchResultsToUpdate.add (libraryBookProxy);
418+ }
388419 }
389- _searchResults.value = [... searchResultsToUpdate] ;
420+ _searchResults.value = searchResultsToUpdate;
390421 if (newPageResults.length < _perPage) {
391422 _hasMorePages = false ;
392423 }
0 commit comments