import 'dart:async'; import 'dart:io'; import 'package:dart_appwrite/dart_appwrite.dart'; late Databases _database; var _usersDbId; var _conversationDbId; var _documentId; var _databaseId; Future 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 _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 - ${e.message}'); } on Exception catch (e) { context.error('error message - ${e.toString()}'); } return context.res.empty(); } dynamic createConversation(var member, var _members) async { // for (var _member in _members) { List _chatIdMap = []; List _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, ); } String _data = '{"name": "$_name","image": "$_imageUrl","unseenCount": 1}'; _chatIdMap.add(_documentId); _detailMap.add(_data); Map _conversationMap = { "chatId": _chatIdMap, "details": _detailMap }; await _database.createDocument( databaseId: _databaseId, collectionId: _conversationDbId, documentId: member, data: _conversationMap, ); } return ''; }