mirror of
https://github.com/Nioux/AideDeJeu.git
synced 2025-10-30 15:06:06 +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 {
|
||||||
|
|
@ -48,25 +50,36 @@ class SqfliteDB extends BaseDB {
|
||||||
return await openDatabase(path, readOnly: true);
|
return await openDatabase(path, readOnly: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Item> getItemWithId(String id) async {
|
@override
|
||||||
print("getItemWithId " + id);
|
Future<List<Item>> loadAllItems() async {
|
||||||
final db = await database;
|
final db = await database;
|
||||||
var response = await db.query(
|
var response = await db.query(
|
||||||
"Items",
|
"Items",
|
||||||
where: "Id = ? OR RootId = ?",
|
|
||||||
whereArgs: [id, id]
|
|
||||||
);
|
);
|
||||||
|
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]);
|
||||||
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.start > 0 ||
|
||||||
filter.rangeValues.end < filter.values.length - 1)) {
|
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