fooder-app/lib/storage/product.dart

56 lines
1.5 KiB
Dart
Raw Normal View History

2024-08-03 22:30:07 +02:00
import 'dart:async';
import 'package:sqflite/sqflite.dart';
import 'package:fooder/models/product.dart';
import 'package:fooder/storage/based.dart';
2024-08-03 22:30:07 +02:00
class ProductStorage extends StorageBased {
ProductStorage({required super.db});
2024-08-03 22:30:07 +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,
name TEXT,
2024-08-03 22:30:07 +02:00
barcode TEXT,
calories REAL,
protein REAL,
carb REAL,
fat REAL,
fiber REAL,
usage_count_cached INTEGER
2024-08-03 22:30:07 +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);
}
}