import 'dart:convert'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:fcs/model/constants.dart'; import 'package:fcs/vo/report.dart'; import 'package:fcs/vo/report_user.dart'; import 'package:fcs/vo/user.dart'; import '../config.dart'; import 'base_model.dart'; import 'firebase_helper.dart'; class ReportUserModel extends BaseModel { List reportUsers = []; void initUser(user) { super.initUser(user); } @override logout() async {} Future> getUsersForReport(String reportID) async { List users = []; String path = "/$report_user_collection"; QuerySnapshot snapshots = await Firestore.instance .collection(path) .where('report_id', isEqualTo: reportID) .getDocuments(); snapshots.documents.forEach((d) { users.add(ReportUser.fromMap(d.data, d.documentID)); }); return users; } Future> findUser(String searchUser) async { if (searchUser == null || searchUser == '') return List(); var bytes = utf8.encode(searchUser); var base64Str = base64.encode(bytes); HtmlEscape htmlEscape = const HtmlEscape(); String escapeUser = htmlEscape.convert(base64Str); int limit = 20; List _users = []; try { var data = await request( "/api/fts/$user_collection/$escapeUser/$limit", "GET", token: await getToken(), url: Config.instance.reportURL); if (data == null) return List(); data.forEach((user) { var _user = User.fromUserJson(user); _users.add(_user); }); } catch (e) { // permission error log.warning("user error:" + e.toString()); return null; } return _users; } Future updateReportForAllUsers(Report report) async { await request("/report", "PUT", payload: {'id': report.id, 'for_all_users': report.forAllUser}, token: await getToken()); notifyListeners(); } Future assignUser(ReportUser reportUser) async { await request("/report_user", "POST", payload: reportUser.toMap(), token: await getToken()); notifyListeners(); } Future deleteReportUser(ReportUser reportUser) async { await request("/report_user", "DELETE", payload: reportUser.toMap(), token: await getToken()); notifyListeners(); } }