Skip to content
Snippets Groups Projects
service_manager.dart 5.70 KiB
import 'package:flutter/foundation.dart';
import 'package:tuple/tuple.dart';

import '../data/models/contact.dart';
import '../data/models/node.dart';
import '../data/models/transaction_state.dart';
import 'api.dart';
import 'duniter_datapod_helper.dart';
import 'duniter_indexer_helper.dart';
import 'g1_v2_helper.dart';
import 'pay_result.dart';
import 'transaction_v1_parser.dart';
import 'transactions_v2_parser.dart';

abstract class DuniterService {
  Future<Contact> getProfile(String pubKey,
      {bool onlyProfile = false, bool resize = true, bool complete = false});

  Future<List<Contact>> getProfiles(List<String> pubKeys);

  Future<List<Contact>> searchWot(String searchPatternRaw);

  Future<List<Contact>> searchProfiles(
      {required String searchTermLower,
      required String searchTerm,
      required String searchTermCapitalized});

  Future<Tuple2<Map<String, dynamic>?, Node>> getHistoryAndBalance(
      String pubKeyRaw,
      {int? pageSize = 10,
      int? from,
      int? to,
      String? cursor,
      required bool isConnected});

  Future<TransactionState> transactionsParser(
      Map<String, dynamic> txData, TransactionState state, String myPubKeyRaw);

  Future<PayResult> pay(
      {required List<String> to, required double amount, String? comment});

  Future<String?> getProfileUserName(String pubKey);

  Future<bool> createOrUpdateProfile(String name);

  Future<bool> deleteProfile();
}

class DuniterServiceV1 implements DuniterService {
  @override
  Future<Contact> getProfile(String pubKey,
      {bool onlyProfile = false, bool resize = true, bool complete = false}) {
    return getProfileV1(pubKey, onlyCPlusProfile: onlyProfile, resize: resize);
  }

  @override
  Future<List<Contact>> searchWot(String searchPatternRaw) {
    return searchWotV1(searchPatternRaw);
  }

  @override
  Future<List<Contact>> searchProfiles(
      {required String searchTermLower,
      required String searchTerm,
      required String searchTermCapitalized}) {
    return searchProfilesV1(
        searchTermLower: searchTermLower,
        searchTerm: searchTerm,
        searchTermCapitalized: searchTermCapitalized);
  }