Skip to content

Preshy-Jones/payment_solutions_app

Repository files navigation

πŸ’Έ Kobovault

A fintech backend API powering payments, wallets, transfers, and bill services.


πŸ“– Overview

Kobovault is a production-grade fintech backend built with NestJS. It provides a comprehensive suite of financial services including digital wallets, peer-to-peer transfers, airtime & data purchases, utility bill payments, and TV subscription management β€” all backed by integrations with leading African payment providers.

✨ Features

πŸ’° Core Financial Services

  • Digital Wallets β€” Multi-currency wallet creation and balance management
  • P2P Transfers β€” Send money to other users, request transfers, and approve/decline requests
  • Deposits & Withdrawals β€” Fund wallets and withdraw to bank accounts via Paystack and Flutterwave

🧾 Bill Payments (via VTPass)

  • Airtime β€” Purchase airtime for any Nigerian mobile network
  • Mobile Data β€” Buy data bundles across all networks
  • Electricity β€” Pay electricity bills (prepaid & postpaid)
  • TV Subscriptions β€” Subscribe to DStv, GOtv, Startimes, and Showmax
  • Education β€” Purchase WAEC result checker PINs

🏦 Banking & Accounts

  • Bank Account Linking β€” Add and verify bank accounts
  • Virtual Accounts β€” Auto-generated Monnify virtual accounts for deposits
  • Bank Directory β€” Fetch the full list of Nigerian banks and verify account details

πŸ‘₯ User Management

  • Registration & Authentication β€” JWT-based auth with separate user and admin login flows
  • Transaction PIN β€” Secure transfers with a 4-digit transaction PIN
  • KYC Verification β€” Customer KYC levels for tiered account limits
  • Referral System β€” Unique referral codes and referral tracking
  • Role-Based Access Control β€” Fine-grained permissions via CASL

πŸ›  Platform

  • Admin Dashboard API β€” Separate admin endpoints for platform management
  • Announcements β€” In-app announcements for users
  • Activity Logging β€” Per-service activity tracking (airtime, data, electricity, TV)
  • Email Notifications β€” Transactional emails via Nodemailer
  • SMS Notifications β€” OTP and alerts via Twilio
  • Health Checks β€” Built-in health endpoint via @nestjs/terminus
  • API Documentation β€” Auto-generated docs via Compodoc

πŸ— Tech Stack

Layer Technology
Framework NestJS 8 (Node.js)
Language TypeScript 4
Database PostgreSQL (via TypeORM)
Cache Redis (cache-manager-redis-store)
Auth Passport.js + JWT + CASL
Validation class-validator + Joi
Containerization Docker + Docker Compose
Linting ESLint + Prettier + Husky
Testing Jest + Supertest

πŸ”Œ Third-Party Integrations

Provider Purpose
Paystack Deposits, withdrawals, bank verification, transfer recipients
Flutterwave Wallet balance, deposits, card payments
Monnify Virtual account generation for receiving payments
VTPass Airtime, data, electricity, TV subscriptions, WAEC PINs
Twilio SMS OTP and notifications
Nodemailer Transactional email delivery

πŸ“‚ Project Structure

src/
β”œβ”€β”€ ability/           # CASL permission definitions & guards
β”œβ”€β”€ account/           # Bank account linking & Monnify virtual accounts
β”œβ”€β”€ activities/        # Per-service activity logs (airtime, data, bills, TV)
β”œβ”€β”€ admin/             # Admin management & admin-specific endpoints
β”œβ”€β”€ airtime/           # Airtime purchase module
β”œβ”€β”€ announcement/      # In-app announcements
β”œβ”€β”€ auth/              # Authentication (login, JWT, transaction PIN)
β”œβ”€β”€ bank/              # Bank directory & account verification
β”œβ”€β”€ common/            # Shared guards, decorators, types, DTOs
β”œβ”€β”€ database/          # Database connection configuration
β”œβ”€β”€ electricitybill/   # Electricity bill payments
β”œβ”€β”€ email/             # Email entity & module
β”œβ”€β”€ flutterwave/       # Flutterwave integration service
β”œβ”€β”€ health/            # Health check endpoint
β”œβ”€β”€ log/               # Custom logger implementation
β”œβ”€β”€ mobiledata/        # Mobile data purchase module
β”œβ”€β”€ monnify/           # Monnify integration (virtual accounts)
β”œβ”€β”€ nodemailer/        # Nodemailer email service
β”œβ”€β”€ paystack/          # Paystack integration (payments, transfers)
β”œβ”€β”€ referral/          # Referral code system
β”œβ”€β”€ role/              # User roles management
β”œβ”€β”€ settings/          # App settings
β”œβ”€β”€ sms/               # SMS service
β”œβ”€β”€ transactions/      # Deposits, withdrawals, transaction records
β”œβ”€β”€ transfers/         # P2P transfers & transfer requests
β”œβ”€β”€ tvsubscription/    # TV subscription management
β”œβ”€β”€ twillio/           # Twilio SMS integration
β”œβ”€β”€ user/              # User registration, profiles, KYC
β”œβ”€β”€ utils/             # Shared utilities
β”œβ”€β”€ vtpass/            # VTPass integration (bills & services)
β”œβ”€β”€ wallet/            # Digital wallet management
β”œβ”€β”€ app.module.ts      # Root application module
β”œβ”€β”€ main.ts            # Application bootstrap
└── ormconfig.ts       # TypeORM configuration

πŸš€ Getting Started

Prerequisites

Installation

  1. Clone the repository

    git clone https://github.com/Preshy-Jones/kobovault-server.git
    cd kobovault-server
  2. Install dependencies

    npm install
  3. Configure environment variables

    cp env.example .env

    Fill in the required values in .env:

    Variable Description
    POSTGRES_* PostgreSQL connection credentials
    PGADMIN_* pgAdmin web interface credentials
    JWT_SECRET / JWT_EXPIRATION JWT signing secret and token TTL
    PAYSTACK_* Paystack API keys
    FLUTTERWAVE_* Flutterwave API keys
    MONNIFY_* Monnify API keys & contract code
    VTPASS_* VTPass API credentials
    TWILLIO_* Twilio account SID, auth token, and phone number
    REDIS_* Redis connection details
  4. Start the services

    docker compose up -d

    This spins up five containers:

    Service Port Description
    api 3000 NestJS application
    postgres 5432 PostgreSQL database
    pgadmin 8080 pgAdmin web UI
    redis 6379 Redis cache
    redis-commander 8081 Redis web UI
  5. Create the database

    Open pgAdmin in your browser and create the database matching your POSTGRES_DB env variable.

Running in Development

# With Docker (recommended)
docker compose up -d

# Without Docker
npm run start:dev

After Installing New Packages

Rebuild the containers to pick up new dependencies:

docker compose up -d -V --build

πŸ“œ Available Scripts

Command Description
npm run start:dev Start in watch mode
npm run start:debug Start in debug mode with inspector
npm run start:prod Start production build
npm run build Compile TypeScript to dist/
npm run lint Run ESLint with auto-fix
npm run format Format code with Prettier
npm test Run unit tests
npm run test:watch Run tests in watch mode
npm run test:cov Run tests with coverage
npm run test:e2e Run end-to-end tests
npm run documentation:serve Serve Compodoc API docs on port 9000
npm run typeorm:migrate Generate a TypeORM migration
npm run typeorm:run Run pending migrations

πŸ—„ Database

kobovault uses PostgreSQL with TypeORM as the ORM. Key entities include:

  • Customer β€” User profile, referral code, KYC level, wallets
  • Administrator β€” Admin user with elevated privileges
  • Wallet β€” Balance, currency, linked activities & transfers
  • Transaction (abstract) β†’ Deposit / Withdrawal
  • SendTransfer / ReceiveTransfer / TransferRequest
  • AirtimeActivity, MobileDataActivity, ElectricityBillActivity, TvSubscriptionActivity
  • MonnifyAccount, Referral, Announcement, Role

πŸ”’ Authentication & Authorization

  • Authentication: Passport.js with Local + JWT strategies
    • POST /auth/login/user β€” Customer login
    • POST /auth/login/admin β€” Admin login
    • POST /auth/pin β€” Set transaction PIN
  • Authorization: CASL ability-based guards applied globally
    • Fine-grained permissions like ReadUserPermission, EditUserPermission, ReadWithdrawalPermission
    • Public routes opted out via @Public() decorator

🩺 Health Check

GET /health

Powered by @nestjs/terminus for container orchestration readiness probes.

πŸ“š API Documentation

Generate and browse interactive API documentation:

npm run documentation:serve

Then open http://localhost:9000 in your browser.

Pre-built documentation is also available in the documentation/ directory.

🀝 Contributing

  1. Create a branch based on the issue title
  2. Make your changes following the existing code style
  3. Ensure linting passes: npm run lint
  4. Ensure tests pass: npm test
  5. Submit a pull request

πŸ“„ License

This project is UNLICENSED β€” proprietary and private.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages