Files
MessagingApp_Functions/functions/mesaages_upd_function/lib/main.dart
T
onasanya.lanre aab55a730f removed unecessary for loop from messages update functions
Also made some little changes to code look

Working to really start adding proper comments to functins. arrh
2025-02-02 02:50:12 +00:00

88 lines
2.7 KiB
Dart

// 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 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'];
String trigger = context.req.headers['x-appwrite-trigger'];
if (trigger == 'event') {
List<dynamic> _members = context.req.bodyJson['members'];
List<dynamic> _messages = context.req.bodyJson['messages'];
_documentId = context.req.bodyJson['\$id'];
_databaseId = context.req.bodyJson['\$databaseId'];
for (String _member in _members) {
await updateConversation(context, _member, _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 _messages) async {
//
Map _message = json.decode(_messages[_messages.length - 1]);
if (_message.isNotEmpty) {
List<dynamic> _chatIdMap = [];
List<dynamic> _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<String, dynamic> _conversationMap = {
"chatId": _chatIdMap,
"details": _detailMap
};
await _database.updateDocument(
databaseId: _databaseId,
collectionId: _conversationDbId,
documentId: _member,
data: _conversationMap);
}
return '';
}