Skip to content

kshirish/graphql-project

Repository files navigation

Merchant UI GraphQL Service

A Node.js GraphQL service migrated from the Golang merchantuiapisvc project. This service provides GraphQL APIs for EPOS operations.

🚀 Project Overview

This project is a minimal viable product (MVP) that migrates the EPOS functionality from a Golang-based REST API service to a modern Node.js GraphQL service using TypeScript and Apollo Server.

Key Features

  • Terminal Management: CRUD operations for merchant terminals
  • Role Management: Manage merchant roles and permissions
  • GraphQL API: Modern GraphQL API with type safety
  • TypeScript: Full TypeScript support for better development experience
  • Middleware: Authentication, logging, rate limiting, and security
  • Error Handling: Comprehensive error handling and logging

📁 Project Structure

src/
├── config/          # Application configuration
├── datasources/     # Data access layer (equivalent to repos in Golang)
├── graphql/         # GraphQL schemas, resolvers, and scalars
│   ├── resolvers/   # GraphQL resolvers
│   ├── schemas/     # GraphQL schema definitions
│   └── scalars.ts   # Custom scalar types
├── middlewares/     # Express and GraphQL middlewares
├── models/          # TypeScript interfaces and types
├── server/          # Server setup and initialization
├── services/        # Business logic layer
└── utils/           # Utility functions (logger, HTTP client, etc.)

🔧 Technologies Used

  • Node.js with TypeScript
  • Apollo Server for GraphQL
  • Express.js for HTTP server
  • Axios for HTTP client communication
  • Winston for logging
  • Jest for testing
  • ESLint + Prettier for code quality

🚀 Getting Started

Prerequisites

  • Node.js (v16 or higher)
  • npm or yarn
  • Access to the EPOS microservice (backend)

Installation

  1. Clone the repository:
git clone <repository-url>
cd graphql-project
  1. Install dependencies:
npm install
  1. Set up environment variables:
cp .env.example .env
# Edit .env with your configuration
  1. Build the project:
npm run build
  1. Start the development server:
npm run dev

The GraphQL playground will be available at http://localhost:4000/graphql

📝 Environment Configuration

Create a .env file with the following variables:

# Environment
NODE_ENV=development

# Server Configuration
PORT=4000
HOST=localhost

# Logging
LOG_LEVEL=info

# External Services (Epos Microservice)
EPOS_SERVICE_BASE_URL=http://localhost:8080
EPOS_SERVICE_TIMEOUT=30000

# Security
JWT_SECRET=your-jwt-secret-here
CORS_ORIGIN=http://localhost:3000

# Rate Limiting
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=100

🔗 GraphQL API

Queries

  • getTerminals(input: TerminalListInput): Get list of terminals

Mutations

  • NA

CURL:

curl --location --request POST 'http://localhost:4000/graphql' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJraWQiOiJUT2RTc2huMXNRcnZhMjdQVWszM0lUNWVDblBIWENxcU42ZUE3V2s5NWVVPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiIyOTE2MDQ0NC1hNTNjLTQ3YWQtOGI1Yi00N2I3MTEzMDQ3ZDIiLCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAuYXAtc291dGgtMS5hbWF6b25hd3MuY29tXC9hcC1zb3V0aC0xXzRSaHgwZ2V4eCIsImNsaWVudF9pZCI6IjMzYm9mOGc3MDA5ZWo0cHRjaTZybGtybnZqIiwib3JpZ2luX2p0aSI6ImI2MWYxZmNkLThiZmMtNGMzYi1iMDIwLWU1ZGZmOWZhNzVlOCIsImV2ZW50X2lkIjoiOTIyNTE4M2YtOWFjOS00OTg0LTk2ZGUtMzdmYzkxZGY4NGY0IiwidG9rZW5fdXNlIjoiYWNjZXNzIiwic2NvcGUiOiJhd3MuY29nbml0by5zaWduaW4udXNlci5hZG1pbiIsImF1dGhfdGltZSI6MTc2MzM3OTEwNCwiZXhwIjoxNzYzMzg2MzA0LCJpYXQiOjE3NjMzNzkxMDQsImp0aSI6ImQ3ODcwODA3LTdlZGYtNDZjOS05YzQxLWEwMzYxMzBlYjMyOSIsInVzZXJuYW1lIjoibWVyY2hhbnRfb3duZXI6NzMwMDAifQ.F60NcrH_5XdEJuWVDRt41YiegG8QeQ6TFRk_2MO-cjFiqZ6zsyvLg_9SGxMLhOZEdMHnLj8ixOigkqvQ7Pwaya0IzRffK7OO0E6DipkcL18FlA1oqbQUWTmizVQTQkEGy2N3uz4a-0rVDF-QHDUASK4OMH0Rq-QbbX4YJ1tU_KImNHpv27tIBmuFoW2TB6X9gUXJWaxuNC-csYGbOWPJrv9TFIrUnq8V6yR6V2yxNMZin5w8WNYcstkTB537x15RLyxWl7gINwfUNg6Pl_oVqvM1JOAD3J-dKLCRq_Iaiv16jWS7Alp7kodf_ct4R6PvG5MLdhDu60dBui-_PLqxww'
{
  "data": {
    "getTerminals": {
      "status": "SUCCESS",
      "message": "Terminal list for merchant fetched successfully!",
      "data": [
        {
          "terminalId": "1965",
          "merchantId": "73000",
          "agentName": "sdf"
        },
        {
          "terminalId": "3752",
          "merchantId": "73000",
          "agentName": "asd"
        },
        {
          "terminalId": "2035",
          "merchantId": "73000",
          "agentName": "fyfjhfvj"
        }
      ]
    }
  }
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages