// 6793b2543197428f812a 679d942812784f70a3d6 // {"message":" Hi Daddy ABCDe", "senderId": "679d942812784f70a3d6", "timeStamp": "2025-01-29T16:33:19.480+00:00", "type": "text"} // {"message":"Cool Bro, you good?", "senderId": "6793b2543197428f812a", "timeStamp": "2025-01-29T16:36:19.480+00:00", "type": "text"} import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'package:dart_appwrite/dart_appwrite.dart'; late Databases _database; var _conversationDbId; var _documentId; var _databaseId; //Default Function call by function 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']; String trigger = context.req.headers['x-appwrite-trigger']; if (trigger == 'event') { List _members = context.req.bodyJson['members']; List _messages = context.req.bodyJson['messages']; _documentId = context.req.bodyJson['\$id']; _databaseId = context.req.bodyJson['\$databaseId']; for (String _member in _members) { var _membersReduced = _members.where((_data) => _data != _member).toList(); await updateConversation(context, _member, _membersReduced, _messages); } } } 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 updateConversation( var context, var member, var _members, var _messages) async { // Map _message = json.decode(_messages[_messages.length - 1]); // if (_message.isNotEmpty) { for (var _member in _members) { // List _chatIdMap = []; List _detailMap = []; var _conversationDetail = await _database.getDocument( databaseId: _databaseId, collectionId: _conversationDbId, documentId: member, ); _detailMap = _conversationDetail.data['details']; _chatIdMap = _conversationDetail.data['chatId']; var _index = _chatIdMap.indexOf(_documentId); Map _detail = json.decode(_detailMap[_index]); _detail['unseenCount'] += 1; _detail['lastMessage'] = _message['message']; _detail['timeStamp'] = _message['timeStamp']; _detailMap[_index] = json.encode(_detail); _conversationDetail.data['details'] = _detailMap; Map _conversationMap = { "chatId": _chatIdMap, "details": _detailMap }; await _database.updateDocument( databaseId: _databaseId, collectionId: _conversationDbId, documentId: member, data: _conversationMap); } } return ''; }