import 'dart:convert'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:fcs/constants.dart'; import 'package:fcs/domain/entities/user.dart'; import 'package:fcs/helpers/api_helper.dart'; import 'package:fcs/helpers/firebase_helper.dart'; import 'package:logging/logging.dart'; import '../services/services.dart'; class UserDataProvider { final log = Logger('UserDataProvider'); Future inviteUser(String userName, String phoneNumber) async { return await requestAPI("/invites", "POST", payload: {"user_name": userName, "phone_number": phoneNumber}, token: await getToken()); } Future deleteInvite(String phoneNumber) async { return await requestAPI("/invites", "DELETE", payload: {"phone_number": phoneNumber}, token: await getToken()); } Future acceptRequest(String userID) async { return await requestAPI("/accept_request", "PUT", payload: {"id": userID}, token: await getToken()); } Future uploadMsgToken(String token) async { return await requestAPI("/messages/token", "POST", payload: {"token": token}, token: await getToken()); } Future removeMsgToken(String token) async { return await requestAPI("/messages/token", "DELETE", payload: {"token": token}, token: await getToken()); } Future findUser(String phoneNumber) async { QuerySnapshot querySnap = await FirebaseFirestore.instance .collection(user_collection) .where("phone_number", isEqualTo: phoneNumber) .limit(1) .get(); if (querySnap.docs.isNotEmpty) { var snap = querySnap.docs.first; User user = User.fromMap(snap.data() as Map, snap.id); return user; } return null; } Future> searchUser(String term) async { if (term == '') return []; var bytes = utf8.encode(term); var base64Str = base64.encode(bytes); HtmlEscape htmlEscape = const HtmlEscape(); String escapeBuyer = htmlEscape.convert(base64Str); int limit = 20; List users = []; try { var data = await requestAPI( "/api/fts/$user_collection/$escapeBuyer/$limit", "GET", url: Services.setting.reportURL, token: await getToken()); if (data == null) return []; data.forEach((buyer) { var user = User.fromJson(buyer); users.add(user); }); } catch (e) { log.warning("buyer error:" + e.toString()); // return null; } return users; } Future enableUser(String userID, bool enabled) async { return await requestAPI("/enable_user", "PUT", payload: {"id": userID, "enabled": enabled}, token: await getToken()); } Future getUser(String userID) async { if (userID == "") return null; String path = "/$user_collection"; try { var snap = await FirebaseFirestore.instance .collection(path) .doc(userID) .get(const GetOptions(source: Source.server)); if (snap.data() == null) return null; Map? data = snap.data() as Map; if (data['delete_time'] == 0) { User user = User.fromMap(data, snap.id); return user; } else { return null; } } catch (e) { log.warning("Error!! $e"); } return null; } }