Files
fcs/lib/pages/pickup/model/pickup_model.dart

99 lines
2.9 KiB
Dart
Raw Normal View History

2021-09-14 11:03:03 +06:30
import 'dart:async';
import 'dart:io';
import 'package:cloud_firestore/cloud_firestore.dart';
2021-10-09 09:27:51 +06:30
import 'package:fcs/data/services/services.dart';
2024-09-22 16:49:59 +06:30
import 'package:fcs/constants.dart';
2021-10-09 09:27:51 +06:30
import 'package:fcs/domain/entities/pickup.dart';
import 'package:fcs/helpers/firebase_helper.dart';
2021-09-14 11:03:03 +06:30
import 'package:fcs/pages/main/model/base_model.dart';
import 'package:fcs/pagination/paginator_listener.dart';
import 'package:logging/logging.dart';
2021-10-09 09:27:51 +06:30
import 'package:path/path.dart' as Path;
2021-09-14 11:03:03 +06:30
import '../../../helpers/shared_pref.dart';
2021-09-14 11:03:03 +06:30
class PickupModel extends BaseModel {
final log = Logger('PickupModel');
2021-10-09 17:08:28 +06:30
PaginatorListener<Pickup>? pickups;
2021-09-14 11:03:03 +06:30
void initUser(user) {
super.initUser(user);
}
@override
logout() async {
if (pickups != null) pickups!.close();
2021-10-09 17:08:28 +06:30
}
2024-01-24 16:54:08 +06:30
loadPaginationPickups() {
2021-10-09 17:08:28 +06:30
if (user == null) return;
String path = "/$pickup_collection";
2024-01-23 17:48:34 +06:30
Query col = FirebaseFirestore.instance.collection(path);
Query pageQuery = FirebaseFirestore.instance
.collection(path)
.orderBy("update_time", descending: true);
2021-10-09 17:08:28 +06:30
2024-01-23 17:48:34 +06:30
pickups?.close();
pickups = PaginatorListener<Pickup>(
col, pageQuery, (data, id) => Pickup.fromMap(data, id),
rowPerLoad: 30);
2021-09-14 11:03:03 +06:30
}
2021-10-09 09:27:51 +06:30
Future<void> complete(
Pickup pickup, List<File?> files, List<String?> deletedUrls) async {
for (String? url in deletedUrls) {
pickup.photoUrls.remove(url);
}
// check files count
var count = (pickup.photoUrls.length) + files.length - (deletedUrls.length);
if (count > uploadPhotoLimit)
throw Exception("Exceed number of file upload");
List<String> uploadedURLs = [];
String path = Path.join(pickups_files_path, pickup.id);
uploadedURLs = await uploadFiles(path, files);
pickup.photoUrls.addAll(uploadedURLs);
pickup.photoUrls.removeWhere((e) => deletedUrls.contains(e));
2021-09-14 11:03:03 +06:30
2021-10-09 09:27:51 +06:30
try {
await Services.instance.pickupService.completePickup(pickup);
} catch (e) {
// delete newly uploaded photos if fails
try {
deleteStorageFromUrls(uploadedURLs);
pickup.photoUrls.removeWhere((i) => uploadedURLs.contains(i));
} catch (e) {}
throw e;
}
return deleteStorageFromUrls(deletedUrls);
}
2021-10-09 17:08:28 +06:30
Future<Pickup?> getPickup(String id) async {
if (user == null) return null;
String path = "/$pickup_collection";
try {
DocumentSnapshot snap =
await FirebaseFirestore.instance.collection("$path").doc(id).get();
if (snap.exists) {
var package =
Pickup.fromMap(snap.data() as Map<String, dynamic>, snap.id);
return package;
}
} catch (e) {
log.warning("Error!! $e");
}
return null;
}
Future<List<Pickup>> searchPickup(String term) async {
if (term != '') {
await SharedPref.saveRecentSearch('pickup_search', term);
}
2021-10-09 17:08:28 +06:30
Future<List<Pickup>> pickups =
Services.instance.pickupService.searchPickup(term);
return pickups;
}
2021-09-14 11:03:03 +06:30
}