Files
fcs/lib/model/report_user_model.dart
2020-05-29 07:45:27 +06:30

84 lines
2.3 KiB
Dart

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<ReportUser> reportUsers = [];
void initUser(user) {
super.initUser(user);
}
@override
logout() async {}
Future<List<ReportUser>> getUsersForReport(String reportID) async {
List<ReportUser> 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<List<User>> 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<User> _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<void> updateReportForAllUsers(Report report) async {
await request("/report", "PUT",
payload: {'id': report.id, 'for_all_users': report.forAllUser},
token: await getToken());
notifyListeners();
}
Future<void> assignUser(ReportUser reportUser) async {
await request("/report_user", "POST",
payload: reportUser.toMap(), token: await getToken());
notifyListeners();
}
Future<void> deleteReportUser(ReportUser reportUser) async {
await request("/report_user", "DELETE",
payload: reportUser.toMap(), token: await getToken());
notifyListeners();
}
}