Skip to content

Setup Core Skeleton Classes and Function Signatures

Ayotomide edited this page Nov 26, 2024 · 3 revisions

Core Skeleton Structure

Title: Setup Core Skeleton Classes and Function Signatures

Description:

Implement the core skeleton structure of the SDK with all necessary classes, interfaces, and function signatures.

Base Structures

1. Core Classes

// Base configuration
class MindPaystackConfig {
  final String publicKey;
  final Environment environment;
  final LogLevel logLevel;
  final RetryPolicy retryPolicy;
}

// Base client
abstract class MindPaystackClient {
  Future<T> get<T>(String endpoint);
  Future<T> post<T>(String endpoint, Map<String, dynamic> data);
  Future<T> put<T>(String endpoint, Map<String, dynamic> data);
  Future<T> delete<T>(String endpoint);
}

// Base models
abstract class BaseModel {
  Map<String, dynamic> toJson();
  static fromJson(Map<String, dynamic> json);
}

// Base states
abstract class PaymentState {}
class PaymentInitial extends PaymentState {}
class PaymentLoading extends PaymentState {}
class PaymentSuccess extends PaymentState {}
class PaymentError extends PaymentState {}

2. Payment Methods Interfaces

abstract class ICardPayment {
  Future<CardResponse> charge();
  Future<CardResponse> authorize(String otp);
  Future<CardResponse> validate();
}

abstract class IBankTransfer {
  Future<TransferResponse> initiate();
  Future<TransferResponse> verify();
  Stream<TransferStatus> monitorStatus();
}

abstract class IMobileMoney {
  Future<MomoResponse> initiate();
  Future<MomoResponse> verify();
}

abstract class IUSSD {
  Future<USSDResponse> generate();
  Stream<USSDStatus> monitorStatus();
}

3. Service Interfaces

abstract class IAuthenticationService {
  Future<AuthResponse> initialize();
  Future<AuthResponse> verify();
}

abstract class ITransactionService {
  Future<Transaction> create();
  Future<Transaction> verify();
  Future<List<Transaction>> list();
}

abstract class ICustomerService {
  Future<Customer> create();
  Future<Customer> retrieve();
  Future<Customer> update();
}

abstract class IWebhookService {
  Future<Webhook> register();
  Future<bool> verify();
}

4. Repository Interfaces

abstract class ITransactionRepository {
  Future<Transaction> getTransaction(String reference);
  Future<List<Transaction>> getTransactions();
  Future<void> saveTransaction(Transaction transaction);
}

abstract class ICustomerRepository {
  Future<Customer> getCustomer(String id);
  Future<void> saveCustomer(Customer customer);
}

abstract class ICardRepository {
  Future<void> saveCard(Card card);
  Future<List<Card>> getSavedCards();
}

Error Handling Structure

abstract class PaystackException implements Exception {
  final String message;
  final String code;
  final dynamic details;
}

class CardException extends PaystackException {}
class NetworkException extends PaystackException {}
class ValidationException extends PaystackException {}
class AuthenticationException extends PaystackException {}

Tasks

Core Structure

  • Create base classes and interfaces
  • Implement configuration management
  • Setup error handling structure
  • Create event system

Payment Methods

  • Define payment method interfaces
  • Create base implementation classes
  • Setup payment flow controllers
  • Implement state management

Services

  • Create service interfaces
  • Setup base service implementations
  • Define repository contracts
  • Implement data models

Utils

  • Create validation utilities
  • Setup logging system
  • Implement encryption helpers
  • Create type definitions

File Structure

lib/
├── src/
│   ├── config/
│   │   ├── mind_paystack_config.dart
│   │   └── environment.dart
│   ├── core/
│   │   ├── client.dart
│   │   ├── exceptions.dart
│   │   └── base_model.dart
│   ├── interfaces/
│   │   ├── payments/
│   │   ├── services/
│   │   └── repositories/
│   ├── models/
│   │   ├── payment/
│   │   ├── customer/
│   │   └── transaction/
│   ├── services/
│   │   ├── auth_service.dart
│   │   ├── payment_service.dart
│   │   └── customer_service.dart
│   ├── repositories/
│   │   ├── transaction_repository.dart
│   │   ├── customer_repository.dart
│   │   └── card_repository.dart
│   └── utils/
│       ├── validators.dart
│       ├── encryption.dart
│       └── logger.dart

Implementation Guidelines

  1. Naming Conventions

    • Use clear, descriptive names
    • Follow Dart naming conventions
    • Keep consistency across similar components
  2. Documentation

    • Add proper dartdoc comments
    • Include example usage
    • Document exceptions and edge cases
  3. Type Safety

    • Use strong typing
    • Avoid dynamic types
    • Implement proper null safety
  4. Testing Structure

    • Create test files for each component
    • Setup mock classes
    • Include example test cases

Success Criteria

  • All base classes and interfaces implemented
  • Proper documentation for all components
  • Test structure setup
  • Example implementation for each component
  • Clean architecture principles followed
  • Type safety ensured