101 lines
2.8 KiB
Dart
101 lines
2.8 KiB
Dart
import 'dart:async';
|
|
import 'dart:io';
|
|
import 'package:dart_appwrite/dart_appwrite.dart';
|
|
|
|
late Databases _database;
|
|
|
|
var _usersDbId;
|
|
var _conversationDbId;
|
|
var _documentId;
|
|
var _databaseId;
|
|
|
|
//Default call by function
|
|
Future<dynamic> main(final context) async {
|
|
try {
|
|
final client = Client()
|
|
.setEndpoint(
|
|
Platform.environment['APPWRITE_FUNCTION_API_ENDPOINT'] ?? '')
|
|
.setProject(Platform.environment['APPWRITE_FUNCTION_PROJECT_ID'] ?? '')
|
|
.setKey(context.req.headers['x-appwrite-key'] ?? '');
|
|
|
|
_database = Databases(client);
|
|
_conversationDbId = Platform.environment['APPWRITE_COLLECTION_ID'];
|
|
_usersDbId = Platform.environment['APPWRITE_USERS_ID'];
|
|
|
|
String trigger = context.req.headers['x-appwrite-trigger'];
|
|
if (trigger == 'event') {
|
|
List<dynamic> _members = context.req.bodyJson['members'];
|
|
_documentId = context.req.bodyJson['\$id'];
|
|
_databaseId = context.req.bodyJson['\$databaseId'];
|
|
|
|
for (var _member in _members) {
|
|
var _membersReduced =
|
|
_members.where((_data) => _data != _member).toList();
|
|
await createConversation(_member, _membersReduced);
|
|
}
|
|
}
|
|
} on AppwriteException catch (e) {
|
|
context.error('error message (AppWrite)- ${e.message}');
|
|
} on Exception catch (e) {
|
|
context.error('error message (General)- ${e.toString()}');
|
|
}
|
|
return context.res.empty();
|
|
}
|
|
|
|
dynamic createConversation(var member, var _members) async {
|
|
//
|
|
for (var _member in _members) {
|
|
List<dynamic> _chatIdMap = [];
|
|
List<dynamic> _detailMap = [];
|
|
|
|
var _userDetail = await _database.getDocument(
|
|
databaseId: _databaseId,
|
|
collectionId: _usersDbId,
|
|
documentId: _member,
|
|
);
|
|
|
|
var _imageUrl = _userDetail.data['image'];
|
|
var _name = _userDetail.data['name'];
|
|
|
|
dynamic _conversationDetail;
|
|
try {
|
|
_conversationDetail = await _database.getDocument(
|
|
databaseId: _databaseId,
|
|
collectionId: _conversationDbId,
|
|
documentId: member);
|
|
} on AppwriteException catch (e) {
|
|
e.message;
|
|
} on Exception catch (e) {
|
|
e.toString();
|
|
}
|
|
|
|
if (_conversationDetail != null) {
|
|
_chatIdMap = _conversationDetail.data['chatId'];
|
|
_detailMap = _conversationDetail.data['details'];
|
|
|
|
await _database.deleteDocument(
|
|
databaseId: _databaseId,
|
|
collectionId: _conversationDbId,
|
|
documentId: member,
|
|
);
|
|
}
|
|
|
|
var _data = '{"name": "$_name","image": "$_imageUrl","unseenCount": 0}';
|
|
|
|
_chatIdMap.add(_documentId.toString().trim());
|
|
_detailMap.add(_data);
|
|
|
|
Map<String, dynamic> _conversationMap = {
|
|
"chatId": _chatIdMap,
|
|
"details": _detailMap
|
|
};
|
|
|
|
await _database.createDocument(
|
|
databaseId: _databaseId,
|
|
collectionId: _conversationDbId,
|
|
documentId: member,
|
|
data: _conversationMap,
|
|
);
|
|
}
|
|
return '';
|
|
} |