mirror of
https://github.com/Nioux/AideDeJeu.git
synced 2025-10-29 14:35:45 +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';
|
||||
|
||||
abstract class BaseDB {
|
||||
Future<List<Item>> loadAllItems();
|
||||
|
||||
Future<Item> getItemWithId(String id);
|
||||
|
||||
Future<Item> loadChildrenItems(Item item, List<Filter> filters);
|
||||
|
|
|
|||
|
|
@ -31,6 +31,20 @@ class SembastDB extends BaseDB {
|
|||
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
|
||||
Future<Item> getItemWithId(String id) {
|
||||
// TODO: implement getItemWithId
|
||||
|
|
|
|||
|
|
@ -9,12 +9,14 @@ import 'package:sqflite/sqflite.dart';
|
|||
|
||||
class SqfliteDB extends BaseDB {
|
||||
static SqfliteDB _instance;
|
||||
|
||||
static SqfliteDB get instance {
|
||||
if(_instance == null) {
|
||||
if (_instance == null) {
|
||||
_instance = SqfliteDB();
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
|
||||
Database _database;
|
||||
|
||||
Future<Database> get database async {
|
||||
|
|
@ -38,7 +40,7 @@ class SqfliteDB extends BaseDB {
|
|||
|
||||
ByteData data = await rootBundle.load(join("assets", "library.db"));
|
||||
List<int> bytes =
|
||||
data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
|
||||
data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
|
||||
|
||||
await File(path).writeAsBytes(bytes, flush: true);
|
||||
} else {
|
||||
|
|
@ -48,25 +50,36 @@ class SqfliteDB extends BaseDB {
|
|||
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 {
|
||||
print("getItemWithId " + id);
|
||||
final db = await database;
|
||||
var response = await db.query(
|
||||
"Items",
|
||||
where: "Id = ? OR RootId = ?",
|
||||
whereArgs: [id, id]
|
||||
);
|
||||
var response = await db
|
||||
.query("Items", where: "Id = ? OR RootId = ?", whereArgs: [id, id]);
|
||||
if (response.isEmpty) {
|
||||
print("Id not found");
|
||||
}
|
||||
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 ?? ""));
|
||||
if (item.itemType.endsWith("Items")) {
|
||||
String itemType =
|
||||
item.itemType.substring(0, item.itemType.length - 1);
|
||||
String itemType = item.itemType.substring(0, item.itemType.length - 1);
|
||||
String family = "";
|
||||
if (item is FilteredItems) {
|
||||
family = item.family ?? "";
|
||||
|
|
@ -79,82 +92,74 @@ class SqfliteDB extends BaseDB {
|
|||
filter.selectedValues.join("%' OR ${filter.name} LIKE '%") +
|
||||
"%')";
|
||||
}
|
||||
if (filter.rangeValues != null && (filter.rangeValues.start > 0 ||
|
||||
filter.rangeValues.end < filter.values.length - 1)) {
|
||||
if (filter.rangeValues != null &&
|
||||
(filter.rangeValues.start > 0 ||
|
||||
filter.rangeValues.end < filter.values.length - 1)) {
|
||||
whereFilter =
|
||||
" AND ([${filter.name}] BETWEEN '${filter.values[filter.rangeValues
|
||||
.start.round()]}' AND '${filter.values[filter.rangeValues.end
|
||||
.round()]}')";
|
||||
" AND ([${filter.name}] BETWEEN '${filter.values[filter.rangeValues.start.round()]}' AND '${filter.values[filter.rangeValues.end.round()]}')";
|
||||
}
|
||||
});
|
||||
}
|
||||
print(whereFilter);
|
||||
final db = await database;
|
||||
var response = await db.query(
|
||||
"Items",
|
||||
var response = await db.query("Items",
|
||||
where: "ItemType = ? AND Family = ?" + whereFilter,
|
||||
whereArgs: [itemType, family],
|
||||
orderBy: "NormalizedName"
|
||||
);
|
||||
orderBy: "NormalizedName");
|
||||
if (response.isEmpty) {
|
||||
print("Children not found");
|
||||
}
|
||||
item.children = response.isNotEmpty
|
||||
? itemsFromMapList(response)
|
||||
: null;
|
||||
item.children = response.isNotEmpty ? itemsFromMapList(response) : null;
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<RaceItem>> loadRaces() async {
|
||||
final db = await database;
|
||||
var response = await db.query(
|
||||
"Items",
|
||||
where: "ItemType = 'RaceItem'",
|
||||
orderBy: "NormalizedName"
|
||||
);
|
||||
var response = await db.query("Items",
|
||||
where: "ItemType = 'RaceItem'", orderBy: "NormalizedName");
|
||||
if (response.isNotEmpty) {
|
||||
return itemsFromMapList(response);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<SubRaceItem>> loadSubRaces(RaceItem race) async {
|
||||
final db = await database;
|
||||
var response = await db.query(
|
||||
"Items",
|
||||
var response = await db.query("Items",
|
||||
where: "ItemType = 'SubRaceItem' AND ParentLink = ?",
|
||||
whereArgs: [race.id],
|
||||
orderBy: "NormalizedName"
|
||||
);
|
||||
orderBy: "NormalizedName");
|
||||
if (response.isNotEmpty) {
|
||||
return itemsFromMapList(response);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<T>> loadTypedItems<T extends Item>(
|
||||
{String itemType, Item item}) async {
|
||||
final db = await database;
|
||||
var response = await db.query(
|
||||
"Items",
|
||||
var response = await db.query("Items",
|
||||
where: "ItemType = ?" + (item != null ? " AND ParentLink = ?" : ""),
|
||||
whereArgs: item != null ? [itemType, item.id] : [itemType],
|
||||
orderBy: "NormalizedName"
|
||||
);
|
||||
orderBy: "NormalizedName");
|
||||
if (response.isNotEmpty) {
|
||||
return itemsFromMapList(response);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<BackgroundItem>> loadBackgrounds() async {
|
||||
return loadTypedItems<BackgroundItem>(itemType: "BackgroundItem");
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<SubBackgroundItem>> loadSubBackgrounds(Item item) async {
|
||||
return loadTypedItems<SubBackgroundItem>(
|
||||
itemType: "SubBackgroundItem", item: item);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue