Files
MessagingApp_Functions/functions/conversations_upd_function/lib/main.dart
T
2025-02-02 01:18:02 +00:00

98 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 Function 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 '';
}