mirror of
				https://github.com/Nioux/AideDeJeu.git
				synced 2025-10-31 07:26:09 +00:00 
			
		
		
		
	Suite db
This commit is contained in:
		
							parent
							
								
									2d826d5248
								
							
						
					
					
						commit
						76173fbda3
					
				
					 3 changed files with 58 additions and 37 deletions
				
			
		|  | @ -2,6 +2,8 @@ import 'package:aidedejeu_flutter/models/filters.dart'; | ||||||
| import 'package:aidedejeu_flutter/models/items.dart'; | import 'package:aidedejeu_flutter/models/items.dart'; | ||||||
| 
 | 
 | ||||||
| abstract class BaseDB { | abstract class BaseDB { | ||||||
|  |   Future<List<Item>> loadAllItems(); | ||||||
|  | 
 | ||||||
|   Future<Item> getItemWithId(String id); |   Future<Item> getItemWithId(String id); | ||||||
| 
 | 
 | ||||||
|   Future<Item> loadChildrenItems(Item item, List<Filter> filters); |   Future<Item> loadChildrenItems(Item item, List<Filter> filters); | ||||||
|  |  | ||||||
|  | @ -31,6 +31,20 @@ class SembastDB extends BaseDB { | ||||||
|     return await dbFactory.openDatabase(dbPath); |     return await dbFactory.openDatabase(dbPath); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   @override | ||||||
|  |   Future<List<Item>> loadAllItems() async { | ||||||
|  |     throw UnimplementedError(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|  |   Future<void> saveAllItems(List<Item> items) async { | ||||||
|  |     var store = StoreRef.main(); | ||||||
|  |     for(int i = 0; i<items.length;i++) { | ||||||
|  |       var item = items[i]; | ||||||
|  |       //await store.record(item.id).put(_database,item.toMap()); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   @override |   @override | ||||||
|   Future<Item> getItemWithId(String id) { |   Future<Item> getItemWithId(String id) { | ||||||
|     // TODO: implement getItemWithId |     // TODO: implement getItemWithId | ||||||
|  |  | ||||||
|  | @ -9,12 +9,14 @@ import 'package:sqflite/sqflite.dart'; | ||||||
| 
 | 
 | ||||||
| class SqfliteDB extends BaseDB { | class SqfliteDB extends BaseDB { | ||||||
|   static SqfliteDB _instance; |   static SqfliteDB _instance; | ||||||
|  | 
 | ||||||
|   static SqfliteDB get instance { |   static SqfliteDB get instance { | ||||||
|     if(_instance == null) { |     if (_instance == null) { | ||||||
|       _instance = SqfliteDB(); |       _instance = SqfliteDB(); | ||||||
|     } |     } | ||||||
|     return _instance; |     return _instance; | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|   Database _database; |   Database _database; | ||||||
| 
 | 
 | ||||||
|   Future<Database> get database async { |   Future<Database> get database async { | ||||||
|  | @ -38,7 +40,7 @@ class SqfliteDB extends BaseDB { | ||||||
| 
 | 
 | ||||||
|       ByteData data = await rootBundle.load(join("assets", "library.db")); |       ByteData data = await rootBundle.load(join("assets", "library.db")); | ||||||
|       List<int> bytes = |       List<int> bytes = | ||||||
|       data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); |           data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); | ||||||
| 
 | 
 | ||||||
|       await File(path).writeAsBytes(bytes, flush: true); |       await File(path).writeAsBytes(bytes, flush: true); | ||||||
|     } else { |     } else { | ||||||
|  | @ -48,25 +50,36 @@ class SqfliteDB extends BaseDB { | ||||||
|     return await openDatabase(path, readOnly: true); |     return await openDatabase(path, readOnly: true); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   @override | ||||||
|  |   Future<List<Item>> loadAllItems() async { | ||||||
|  |     final db = await database; | ||||||
|  |     var response = await db.query( | ||||||
|  |       "Items", | ||||||
|  |     ); | ||||||
|  |     if (response.isNotEmpty) { | ||||||
|  |       return itemsFromMapList(response); | ||||||
|  |     } | ||||||
|  |     return null; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @override | ||||||
|   Future<Item> getItemWithId(String id) async { |   Future<Item> getItemWithId(String id) async { | ||||||
|     print("getItemWithId " + id); |     print("getItemWithId " + id); | ||||||
|     final db = await database; |     final db = await database; | ||||||
|     var response = await db.query( |     var response = await db | ||||||
|         "Items", |         .query("Items", where: "Id = ? OR RootId = ?", whereArgs: [id, id]); | ||||||
|         where: "Id = ? OR RootId = ?", |  | ||||||
|         whereArgs: [id, id] |  | ||||||
|     ); |  | ||||||
|     if (response.isEmpty) { |     if (response.isEmpty) { | ||||||
|       print("Id not found"); |       print("Id not found"); | ||||||
|     } |     } | ||||||
|     return response.isNotEmpty ? itemFromMap(response.first) : null; |     return response.isNotEmpty ? itemFromMap(response.first) : null; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   Future<Item> loadChildrenItems(Item item, List<Filters.Filter> filters) async { |   @override | ||||||
|  |   Future<Item> loadChildrenItems( | ||||||
|  |       Item item, List<Filters.Filter> filters) async { | ||||||
|     print("getChildrenItems " + (item?.itemType ?? "")); |     print("getChildrenItems " + (item?.itemType ?? "")); | ||||||
|     if (item.itemType.endsWith("Items")) { |     if (item.itemType.endsWith("Items")) { | ||||||
|       String itemType = |       String itemType = item.itemType.substring(0, item.itemType.length - 1); | ||||||
|       item.itemType.substring(0, item.itemType.length - 1); |  | ||||||
|       String family = ""; |       String family = ""; | ||||||
|       if (item is FilteredItems) { |       if (item is FilteredItems) { | ||||||
|         family = item.family ?? ""; |         family = item.family ?? ""; | ||||||
|  | @ -79,82 +92,74 @@ class SqfliteDB extends BaseDB { | ||||||
|                 filter.selectedValues.join("%' OR ${filter.name} LIKE '%") + |                 filter.selectedValues.join("%' OR ${filter.name} LIKE '%") + | ||||||
|                 "%')"; |                 "%')"; | ||||||
|           } |           } | ||||||
|           if (filter.rangeValues != null && (filter.rangeValues.start > 0 || |           if (filter.rangeValues != null && | ||||||
|               filter.rangeValues.end < filter.values.length - 1)) { |               (filter.rangeValues.start > 0 || | ||||||
|  |                   filter.rangeValues.end < filter.values.length - 1)) { | ||||||
|             whereFilter = |             whereFilter = | ||||||
|             " AND ([${filter.name}] BETWEEN '${filter.values[filter.rangeValues |                 " AND ([${filter.name}] BETWEEN '${filter.values[filter.rangeValues.start.round()]}' AND '${filter.values[filter.rangeValues.end.round()]}')"; | ||||||
|                 .start.round()]}' AND '${filter.values[filter.rangeValues.end |  | ||||||
|                 .round()]}')"; |  | ||||||
|           } |           } | ||||||
|         }); |         }); | ||||||
|       } |       } | ||||||
|       print(whereFilter); |       print(whereFilter); | ||||||
|       final db = await database; |       final db = await database; | ||||||
|       var response = await db.query( |       var response = await db.query("Items", | ||||||
|           "Items", |  | ||||||
|           where: "ItemType = ? AND Family = ?" + whereFilter, |           where: "ItemType = ? AND Family = ?" + whereFilter, | ||||||
|           whereArgs: [itemType, family], |           whereArgs: [itemType, family], | ||||||
|           orderBy: "NormalizedName" |           orderBy: "NormalizedName"); | ||||||
|       ); |  | ||||||
|       if (response.isEmpty) { |       if (response.isEmpty) { | ||||||
|         print("Children not found"); |         print("Children not found"); | ||||||
|       } |       } | ||||||
|       item.children = response.isNotEmpty |       item.children = response.isNotEmpty ? itemsFromMapList(response) : null; | ||||||
|           ? itemsFromMapList(response) |  | ||||||
|           : null; |  | ||||||
|     } |     } | ||||||
|     return item; |     return item; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   @override | ||||||
|   Future<List<RaceItem>> loadRaces() async { |   Future<List<RaceItem>> loadRaces() async { | ||||||
|     final db = await database; |     final db = await database; | ||||||
|     var response = await db.query( |     var response = await db.query("Items", | ||||||
|         "Items", |         where: "ItemType = 'RaceItem'", orderBy: "NormalizedName"); | ||||||
|         where: "ItemType = 'RaceItem'", |  | ||||||
|         orderBy: "NormalizedName" |  | ||||||
|     ); |  | ||||||
|     if (response.isNotEmpty) { |     if (response.isNotEmpty) { | ||||||
|       return itemsFromMapList(response); |       return itemsFromMapList(response); | ||||||
|     } |     } | ||||||
|     return null; |     return null; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   @override | ||||||
|   Future<List<SubRaceItem>> loadSubRaces(RaceItem race) async { |   Future<List<SubRaceItem>> loadSubRaces(RaceItem race) async { | ||||||
|     final db = await database; |     final db = await database; | ||||||
|     var response = await db.query( |     var response = await db.query("Items", | ||||||
|         "Items", |  | ||||||
|         where: "ItemType = 'SubRaceItem' AND ParentLink = ?", |         where: "ItemType = 'SubRaceItem' AND ParentLink = ?", | ||||||
|         whereArgs: [race.id], |         whereArgs: [race.id], | ||||||
|         orderBy: "NormalizedName" |         orderBy: "NormalizedName"); | ||||||
|     ); |  | ||||||
|     if (response.isNotEmpty) { |     if (response.isNotEmpty) { | ||||||
|       return itemsFromMapList(response); |       return itemsFromMapList(response); | ||||||
|     } |     } | ||||||
|     return null; |     return null; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   @override | ||||||
|   Future<List<T>> loadTypedItems<T extends Item>( |   Future<List<T>> loadTypedItems<T extends Item>( | ||||||
|       {String itemType, Item item}) async { |       {String itemType, Item item}) async { | ||||||
|     final db = await database; |     final db = await database; | ||||||
|     var response = await db.query( |     var response = await db.query("Items", | ||||||
|         "Items", |  | ||||||
|         where: "ItemType = ?" + (item != null ? " AND ParentLink = ?" : ""), |         where: "ItemType = ?" + (item != null ? " AND ParentLink = ?" : ""), | ||||||
|         whereArgs: item != null ? [itemType, item.id] : [itemType], |         whereArgs: item != null ? [itemType, item.id] : [itemType], | ||||||
|         orderBy: "NormalizedName" |         orderBy: "NormalizedName"); | ||||||
|     ); |  | ||||||
|     if (response.isNotEmpty) { |     if (response.isNotEmpty) { | ||||||
|       return itemsFromMapList(response); |       return itemsFromMapList(response); | ||||||
|     } |     } | ||||||
|     return null; |     return null; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   @override | ||||||
|   Future<List<BackgroundItem>> loadBackgrounds() async { |   Future<List<BackgroundItem>> loadBackgrounds() async { | ||||||
|     return loadTypedItems<BackgroundItem>(itemType: "BackgroundItem"); |     return loadTypedItems<BackgroundItem>(itemType: "BackgroundItem"); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   @override | ||||||
|   Future<List<SubBackgroundItem>> loadSubBackgrounds(Item item) async { |   Future<List<SubBackgroundItem>> loadSubBackgrounds(Item item) async { | ||||||
|     return loadTypedItems<SubBackgroundItem>( |     return loadTypedItems<SubBackgroundItem>( | ||||||
|         itemType: "SubBackgroundItem", item: item); |         itemType: "SubBackgroundItem", item: item); | ||||||
|   } |   } | ||||||
| 
 | } | ||||||
| } |  | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Yan Maniez
						Yan Maniez