2024-08-03 22:30:07 +02:00
|
|
|
import 'dart:async';
|
|
|
|
|
|
|
|
import 'package:sqflite/sqflite.dart';
|
|
|
|
import 'package:fooder/models/product.dart';
|
2024-08-04 19:20:57 +02:00
|
|
|
import 'package:fooder/storage/based.dart';
|
2024-08-03 22:30:07 +02:00
|
|
|
|
2024-08-04 19:20:57 +02:00
|
|
|
class ProductStorage extends StorageBased {
|
|
|
|
ProductStorage({required super.db});
|
2024-08-03 22:30:07 +02:00
|
|
|
|
2024-08-04 19:20:57 +02:00
|
|
|
static Future<void> createTable(Batch batch) async {
|
|
|
|
batch.execute('''
|
2024-08-03 22:30:07 +02:00
|
|
|
CREATE TABLE product(
|
2024-08-13 09:48:44 +02:00
|
|
|
id INTEGER PRIMARY KEY,
|
2024-08-04 19:20:57 +02:00
|
|
|
name TEXT,
|
2024-08-03 22:30:07 +02:00
|
|
|
barcode TEXT,
|
2024-08-04 19:20:57 +02:00
|
|
|
calories REAL,
|
|
|
|
protein REAL,
|
|
|
|
carb REAL,
|
|
|
|
fat REAL,
|
|
|
|
fiber REAL,
|
|
|
|
usage_count_cached INTEGER
|
2024-08-03 22:30:07 +02:00
|
|
|
)
|
|
|
|
''');
|
|
|
|
}
|
|
|
|
|
2024-08-04 19:20:57 +02:00
|
|
|
Future<List<Product>> list({String? name, String? barcode}) async {
|
|
|
|
var result = await db.query('product',
|
|
|
|
where: 'name LIKE ? AND barcode LIKE ?',
|
|
|
|
whereArgs: ['%$name%', '%$barcode%'],
|
|
|
|
orderBy: 'usage_count_cached DESC');
|
2024-08-03 22:30:07 +02:00
|
|
|
return result.map((e) => Product.fromJson(e)).toList();
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<Product?> get(int id) async {
|
|
|
|
var result = await db.query('product', where: 'id = ?', whereArgs: [id]);
|
|
|
|
if (result.isEmpty) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
return Product.fromJson(result.first);
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<void> insert(Product product) async {
|
|
|
|
await db.insert('product', product.toMap(),
|
|
|
|
conflictAlgorithm: ConflictAlgorithm.replace);
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<void> bulkInsert(List<Product> products) async {
|
|
|
|
var batch = db.batch();
|
|
|
|
for (var product in products) {
|
|
|
|
batch.insert('product', product.toMap(),
|
|
|
|
conflictAlgorithm: ConflictAlgorithm.replace);
|
|
|
|
}
|
|
|
|
await batch.commit(noResult: true);
|
|
|
|
}
|
|
|
|
}
|