From 02b59e39b3b91ef5c851faa344873a7516442c6a Mon Sep 17 00:00:00 2001 From: poka Date: Sat, 13 Jan 2024 03:57:54 +0100 Subject: [PATCH] feat: add query to store transactions comments to datapod --- lib/models/queries_datapod.dart | 13 ++++- lib/providers/v2s_datapod.dart | 84 ++++++++++++++++----------------- 2 files changed, 53 insertions(+), 44 deletions(-) diff --git a/lib/models/queries_datapod.dart b/lib/models/queries_datapod.dart index 8832f0c..d86ca57 100644 --- a/lib/models/queries_datapod.dart +++ b/lib/models/queries_datapod.dart @@ -1,6 +1,6 @@ const String updateProfileQ = r''' -mutation ($address: String!, $hash: String!, $signature: String!, $title: String, $description: String, $avatar: String, $geoloc: GeolocInput, $city: String, $socials: [SocialInput!]) { - updateProfile(address: $address, hash: $hash, signature: $signature, title: $title, description: $description, avatarBase64: $avatar, geoloc: $geoloc, city: $city, socials: $socials) { +mutation ($address: String!, $hash: String!, $signature: String!, $title: String, $description: String, $avatarBase64: String, $geoloc: GeolocInput, $city: String, $socials: [SocialInput!]) { + updateProfile(address: $address, hash: $hash, signature: $signature, title: $title, description: $description, avatarBase64: $avatarBase64, geoloc: $geoloc, city: $city, socials: $socials) { message success } @@ -25,6 +25,15 @@ mutation ($addressOld: String!, $addressNew: String!, $hash: String!, $signature } '''; +const String addTransactionCommentQ = r''' +mutation ($id: String!, $address: String!, $hash: String!, $signature: String!, $comment: String!) { + addTransaction(id: $id, address: $address, hash: $hash, signature: $signature, comment: $comment) { + message + success + } +} +'''; + const String getAvatarQ = r''' query ($address: String!) { profiles_by_pk(address: $address) { diff --git a/lib/providers/v2s_datapod.dart b/lib/providers/v2s_datapod.dart index 5b1d906..e2e3829 100644 --- a/lib/providers/v2s_datapod.dart +++ b/lib/providers/v2s_datapod.dart @@ -13,6 +13,20 @@ import 'package:uuid/uuid.dart'; class V2sDatapodProvider with ChangeNotifier { late GraphQLClient datapodClient; + Future> _setSignedVariables( + String address, Map messageToSign) async { + final sub = Provider.of(homeContext, listen: false); + final hashDocBytes = utf8.encode(jsonEncode(messageToSign)); + final hashDoc = sha256.convert(hashDocBytes).toString().toUpperCase(); + final signature = await sub.signDatapod(hashDoc, address); + + return { + ...messageToSign, + 'hash': hashDoc, + 'signature': signature + }; + } + Future _execQuery( String query, Map variables) async { final QueryOptions options = @@ -29,9 +43,7 @@ class V2sDatapodProvider with ChangeNotifier { String? city, List>? socials, Map? geoloc}) async { - final sub = Provider.of(homeContext, listen: false); - - final messageToSign = jsonEncode({ + final messageToSign = { 'address': address, 'description': description, 'avatarBase64': avatar, @@ -39,22 +51,9 @@ class V2sDatapodProvider with ChangeNotifier { 'title': title, 'city': city, 'socials': socials - }); - final hashDocBytes = utf8.encode(messageToSign); - final hashDoc = sha256.convert(hashDocBytes).toString().toUpperCase(); - final signature = await sub.signDatapod(hashDoc, address); - - final variables = { - 'address': address, - 'hash': hashDoc, - 'signature': signature, - 'title': title, - 'description': description, - 'avatar': avatar, - 'city': city, - 'socials': socials, - 'geoloc': geoloc, }; + final variables = await _setSignedVariables(address, messageToSign); + final result = await _execQuery(updateProfileQ, variables); if (result.hasException) { log.e(result.exception.toString()); @@ -65,18 +64,9 @@ class V2sDatapodProvider with ChangeNotifier { } Future deleteProfile({required String address}) async { - final sub = Provider.of(homeContext, listen: false); + final messageToSign = {'address': address}; + final variables = await _setSignedVariables(address, messageToSign); - final messageToSign = jsonEncode({'address': address}); - final hashDocBytes = utf8.encode(messageToSign); - final hashDoc = sha256.convert(hashDocBytes).toString().toUpperCase(); - final signature = await sub.signDatapod(hashDoc, address); - - final variables = { - 'address': address, - 'hash': hashDoc, - 'signature': signature - }; final result = await _execQuery(deleteProfileQ, variables); if (result.hasException) { log.e(result.exception.toString()); @@ -88,20 +78,9 @@ class V2sDatapodProvider with ChangeNotifier { Future migrateProfile( {required String addressOld, required String addressNew}) async { - final sub = Provider.of(homeContext, listen: false); + final messageToSign = {'addressOld': addressOld, 'addressNew': addressNew}; + final variables = await _setSignedVariables(addressOld, messageToSign); - final messageToSign = - jsonEncode({'addressOld': addressOld, 'addressNew': addressNew}); - final hashDocBytes = utf8.encode(messageToSign); - final hashDoc = sha256.convert(hashDocBytes).toString().toUpperCase(); - final signature = await sub.signDatapod(hashDoc, addressOld); - - final variables = { - 'addressOld': addressOld, - 'addressNew': addressNew, - 'hash': hashDoc, - 'signature': signature - }; final result = await _execQuery(migrateProfileQ, variables); if (result.hasException) { log.e(result.exception.toString()); @@ -111,6 +90,27 @@ class V2sDatapodProvider with ChangeNotifier { return true; } + Future addTransactionComment({ + required String id, + required String issuer, + required String comment, + }) async { + final messageToSign = { + 'id': id, + 'address': issuer, + 'comment': comment, + }; + final variables = await _setSignedVariables(issuer, messageToSign); + + final result = await _execQuery(addTransactionCommentQ, variables); + if (result.hasException) { + log.e(result.exception.toString()); + return false; + } + log.d(result.data!['addTransaction']['message']); + return true; + } + Future setAvatar(String address, String avatarPath) async { final avatarBytes = await File(avatarPath).readAsBytes(); final avatarString = base64Encode(avatarBytes);