Files
fcs/lib/data/provider/user_data_provider.dart
2024-02-23 17:05:51 +06:30

114 lines
3.3 KiB
Dart

import 'dart:convert';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:fcs/config.dart';
import 'package:fcs/domain/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';
class UserDataProvider {
final log = Logger('UserDataProvider');
Future<void> inviteUser(String userName, String phoneNumber) async {
return await requestAPI("/invites", "POST",
payload: {"user_name": userName, "phone_number": phoneNumber},
token: await getToken());
}
Future<void> deleteInvite(String phoneNumber) async {
return await requestAPI("/invites", "DELETE",
payload: {"phone_number": phoneNumber}, token: await getToken());
}
Future<void> acceptRequest(String userID) async {
return await requestAPI("/accept_request", "PUT",
payload: {"id": userID}, token: await getToken());
}
Future<void> uploadMsgToken(String token) async {
return await requestAPI("/messages/token", "POST",
payload: {"token": token}, token: await getToken());
}
Future<void> removeMsgToken(String token) async {
return await requestAPI("/messages/token", "DELETE",
payload: {"token": token}, token: await getToken());
}
Future<User?> findUser(String phoneNumber) async {
QuerySnapshot querySnap = await FirebaseFirestore.instance
.collection(user_collection)
.where("phone_number", isEqualTo: phoneNumber)
.limit(1)
.get();
if (querySnap.docs.length > 0) {
var snap = querySnap.docs.first;
User user = User.fromMap(snap.data() as Map<String, dynamic>, snap.id);
return user;
}
return null;
}
Future<List<User>> 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<User> users = [];
try {
var data = await requestAPI(
"/api/fts/$user_collection/$escapeBuyer/$limit", "GET",
url: Config.instance.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<void> enableUser(String userID, bool enabled) async {
return await requestAPI("/enable_user", "PUT",
payload: {"id": userID, "enabled": enabled}, token: await getToken());
}
Future<User?> 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<String, dynamic>? data = snap.data() as Map<String, dynamic>;
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;
}
}