88 lines
2.6 KiB
Dart
88 lines
2.6 KiB
Dart
part of '../database.dart';
|
|
|
|
extension StorageLocationsCrud on AppDatabase {
|
|
Stream<List<StorageLocationData>> get storageLocationsSubscription =>
|
|
managers.storageLocation.watch();
|
|
|
|
Future<int> addStorageLocation({
|
|
required String name,
|
|
required String description,
|
|
required TemperatureMode temperatureMode,
|
|
required String icon,
|
|
}) async {
|
|
return await managers.storageLocation.create((c) => c(
|
|
name: name,
|
|
description: description,
|
|
temperatureMode: temperatureMode.name,
|
|
icon: icon,
|
|
));
|
|
}
|
|
|
|
Future<int> updateStorageLocation({
|
|
required int id,
|
|
String? name,
|
|
String? description,
|
|
TemperatureMode? temperatureMode,
|
|
double? capacity,
|
|
String? icon,
|
|
}) async {
|
|
return await managers.storageLocation
|
|
.filter((f) => f.id(id))
|
|
.update((u) => u(
|
|
name: Value.absentIfNull(name),
|
|
description: Value.absentIfNull(description),
|
|
temperatureMode: Value.absentIfNull(temperatureMode?.name),
|
|
icon: Value.absentIfNull(icon),
|
|
));
|
|
}
|
|
|
|
Future<void> deleteStorageLocation(StorageLocationData item) async {
|
|
await managers.storageLocation.filter((f) => f.id(item.id)).delete();
|
|
}
|
|
|
|
Future<List<(StorageLocationData, List<(ProductData, ProductCategoryData)>)>>
|
|
getStorageLocations() async {
|
|
final storageLocations = await managers.storageLocation
|
|
.withReferences((prefetch) => prefetch(productRefs: true))
|
|
.get();
|
|
|
|
final result =
|
|
<(StorageLocationData, List<(ProductData, ProductCategoryData)>)>[];
|
|
|
|
for (final (storage, refs) in storageLocations) {
|
|
final products = await refs.productRefs
|
|
.withReferences((prefetch) => prefetch(category: true))
|
|
.get();
|
|
final productsWithCategories = <(ProductData, ProductCategoryData)>[];
|
|
for (final (product, refs) in products) {
|
|
productsWithCategories.add((
|
|
product,
|
|
await refs.category.getSingle(),
|
|
));
|
|
}
|
|
result.add((
|
|
storage,
|
|
productsWithCategories,
|
|
));
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
Future<bool> defaultExists() async {
|
|
final exists = await managers.storageLocation
|
|
.filter((f) => f.isDefault(true))
|
|
.exists();
|
|
|
|
return exists;
|
|
}
|
|
|
|
Future<void> switchDefault(int newDefaultId) async {
|
|
await managers.storageLocation
|
|
.filter((f) => f.isDefault(true))
|
|
.update((u) => u(isDefault: const Value(false)));
|
|
await managers.storageLocation
|
|
.filter((f) => f.id(newDefaultId))
|
|
.update((u) => u(isDefault: const Value(true)));
|
|
}
|
|
}
|