feat: add query to store transactions comments to datapod
This commit is contained in:
parent
5950088bca
commit
02b59e39b3
|
@ -1,6 +1,6 @@
|
||||||
const String updateProfileQ = r'''
|
const String updateProfileQ = r'''
|
||||||
mutation ($address: String!, $hash: String!, $signature: String!, $title: String, $description: String, $avatar: String, $geoloc: GeolocInput, $city: String, $socials: [SocialInput!]) {
|
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: $avatar, geoloc: $geoloc, city: $city, socials: $socials) {
|
updateProfile(address: $address, hash: $hash, signature: $signature, title: $title, description: $description, avatarBase64: $avatarBase64, geoloc: $geoloc, city: $city, socials: $socials) {
|
||||||
message
|
message
|
||||||
success
|
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'''
|
const String getAvatarQ = r'''
|
||||||
query ($address: String!) {
|
query ($address: String!) {
|
||||||
profiles_by_pk(address: $address) {
|
profiles_by_pk(address: $address) {
|
||||||
|
|
|
@ -13,6 +13,20 @@ import 'package:uuid/uuid.dart';
|
||||||
class V2sDatapodProvider with ChangeNotifier {
|
class V2sDatapodProvider with ChangeNotifier {
|
||||||
late GraphQLClient datapodClient;
|
late GraphQLClient datapodClient;
|
||||||
|
|
||||||
|
Future<Map<String, dynamic>> _setSignedVariables(
|
||||||
|
String address, Map<String, dynamic> messageToSign) async {
|
||||||
|
final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
|
||||||
|
final hashDocBytes = utf8.encode(jsonEncode(messageToSign));
|
||||||
|
final hashDoc = sha256.convert(hashDocBytes).toString().toUpperCase();
|
||||||
|
final signature = await sub.signDatapod(hashDoc, address);
|
||||||
|
|
||||||
|
return <String, dynamic>{
|
||||||
|
...messageToSign,
|
||||||
|
'hash': hashDoc,
|
||||||
|
'signature': signature
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
Future<QueryResult> _execQuery(
|
Future<QueryResult> _execQuery(
|
||||||
String query, Map<String, dynamic> variables) async {
|
String query, Map<String, dynamic> variables) async {
|
||||||
final QueryOptions options =
|
final QueryOptions options =
|
||||||
|
@ -29,9 +43,7 @@ class V2sDatapodProvider with ChangeNotifier {
|
||||||
String? city,
|
String? city,
|
||||||
List<Map<String, String>>? socials,
|
List<Map<String, String>>? socials,
|
||||||
Map<String, double>? geoloc}) async {
|
Map<String, double>? geoloc}) async {
|
||||||
final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
|
final messageToSign = {
|
||||||
|
|
||||||
final messageToSign = jsonEncode({
|
|
||||||
'address': address,
|
'address': address,
|
||||||
'description': description,
|
'description': description,
|
||||||
'avatarBase64': avatar,
|
'avatarBase64': avatar,
|
||||||
|
@ -39,22 +51,9 @@ class V2sDatapodProvider with ChangeNotifier {
|
||||||
'title': title,
|
'title': title,
|
||||||
'city': city,
|
'city': city,
|
||||||
'socials': socials
|
'socials': socials
|
||||||
});
|
|
||||||
final hashDocBytes = utf8.encode(messageToSign);
|
|
||||||
final hashDoc = sha256.convert(hashDocBytes).toString().toUpperCase();
|
|
||||||
final signature = await sub.signDatapod(hashDoc, address);
|
|
||||||
|
|
||||||
final variables = <String, dynamic>{
|
|
||||||
'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);
|
final result = await _execQuery(updateProfileQ, variables);
|
||||||
if (result.hasException) {
|
if (result.hasException) {
|
||||||
log.e(result.exception.toString());
|
log.e(result.exception.toString());
|
||||||
|
@ -65,18 +64,9 @@ class V2sDatapodProvider with ChangeNotifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> deleteProfile({required String address}) async {
|
Future<bool> deleteProfile({required String address}) async {
|
||||||
final sub = Provider.of<SubstrateSdk>(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 = <String, dynamic>{
|
|
||||||
'address': address,
|
|
||||||
'hash': hashDoc,
|
|
||||||
'signature': signature
|
|
||||||
};
|
|
||||||
final result = await _execQuery(deleteProfileQ, variables);
|
final result = await _execQuery(deleteProfileQ, variables);
|
||||||
if (result.hasException) {
|
if (result.hasException) {
|
||||||
log.e(result.exception.toString());
|
log.e(result.exception.toString());
|
||||||
|
@ -88,20 +78,9 @@ class V2sDatapodProvider with ChangeNotifier {
|
||||||
|
|
||||||
Future<bool> migrateProfile(
|
Future<bool> migrateProfile(
|
||||||
{required String addressOld, required String addressNew}) async {
|
{required String addressOld, required String addressNew}) async {
|
||||||
final sub = Provider.of<SubstrateSdk>(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 = <String, dynamic>{
|
|
||||||
'addressOld': addressOld,
|
|
||||||
'addressNew': addressNew,
|
|
||||||
'hash': hashDoc,
|
|
||||||
'signature': signature
|
|
||||||
};
|
|
||||||
final result = await _execQuery(migrateProfileQ, variables);
|
final result = await _execQuery(migrateProfileQ, variables);
|
||||||
if (result.hasException) {
|
if (result.hasException) {
|
||||||
log.e(result.exception.toString());
|
log.e(result.exception.toString());
|
||||||
|
@ -111,6 +90,27 @@ class V2sDatapodProvider with ChangeNotifier {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<bool> 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<bool> setAvatar(String address, String avatarPath) async {
|
Future<bool> setAvatar(String address, String avatarPath) async {
|
||||||
final avatarBytes = await File(avatarPath).readAsBytes();
|
final avatarBytes = await File(avatarPath).readAsBytes();
|
||||||
final avatarString = base64Encode(avatarBytes);
|
final avatarString = base64Encode(avatarBytes);
|
||||||
|
|
Loading…
Reference in New Issue