Структура ПО:

  • ./exchanger-api/plugins - папка c плагинами для обменника

  • ./exchanger-api/config - папка c конфигурациями rest-api

  • ./exchanger-admin-web/config - папка c конфигурациями для клиентской части панели администратора

  • ./exchanger-client-web/config - папка c конфигурациями для клиентской части

Сервисы


  • nginx - сервис для быстрой и стабильной выдачи vue приложения, а также для proxy rest api и ws

  • mongodb - сервис основная база данных проекта

  • redis - сервис для оперативных данных, а также для уведомления других микро сервисов о новом событии;

  • nodejs - сервис основная платформа

  • (s) ex-api-http -сервис предоставляет REST-API (основной сервис работает в cluster режиме);

  • (s) ex-ws - сервис предоставляет WebSocket соединение с клиентами и админ-панелью, отвечающую за real-time действия;

  • (s) ex-parser-rate - сервис анализирует курс в разных источниках, обрабатывает их и обновляет в базе данных;

  • (s) ex-cron - сервис проверяет состояние сервера, считает количество посещений, производит очистку ненужных данных и создает резервную копию базы данных;

  • (s) ex-payout-service - сервис обрабатывает заявки, которые отмечены как оплаченные или готовы к выплате (если активен авто- или полуавтоматический обмен, и API платежных систем настроены);

  • (s) ex-notification-service -сервис отправляет уведомления клиенту и администратору посредством электронной почты и распространенных мессенджеров;

  • (s) ex-blacklist-bc - сервис сервис проверяет и обновляет состояние черного списка из сервиса bestchange.org

  • (s) ex-migrate - сервис проверяет актуальность данных в базе и приводит их к единому стандарту;

  • (s) ex-seed - сервис загружает основные данные в обменник;


Payout Module

Структура файлов:

  • plugins/payouts/__NAME_PAYOUT - папка с модулем
  • ./icon.png or ./icon.jpg - иконка модуля 1:1 (рекомендуемый 150px на 150px)
  • ./configure.js - файл правил конфигурация модуля также конфигурирование доступов
  • ./index.js - Класс модуля (точка входа в модуль)
  • ./template/admin.html - Шаблон админ страници настроек модуля (vue template)
  • ./template/admin.js - файл експорта клиентской логики js (vue js)

configure.js:

Пример файла и его функции

module.exports.type = 'payout'; //  тип  модуля (payout)
module.exports.title = 'Title of payout'; // заголовок модуля для отображения в админке (до 200 символов)
module.exports.name = 'Name service'; // Имя модуля для отображения в валютах (до 50 символов)
module.exports.required_npm = []; //массив необходимых npm модулей

//массив xml валют с которыми работает данный модуль
module.exports.allow_XML = [ 
  "CARDUSD",
  "WMZ",
];

// объект конфигурации по умолчание (будет установлен в config/app_config.json)
module.exports.default_config = { 
  clientID: '',
  clientSecret: '',
  clientPassword: '',
};

// типы данных в конфигурации где 1 публичный ключ 2 секретный (не будет передаваться каждый раз админу)
module.exports.required_config = {
  clientID: 1,
  clientSecret: 2, // hide
  clientPassword: 2, // hide
};

index.js:

Должен иметь экспортный класс

Как работать с конфигурацией:
const id_key = __dirname.split('/').slice(-1)[0];
const config = require('../main_config')(id_key);

const clientID = await config.get('clientID')  //получить конфигурацию по ключу clientID
Пример конструктора
constructor(API) {
    this.API = API;
    this.allowIPs = [];
    this.id_key = id_key;
    this.web_domain = config.get('domain');
    this.schema = config.get('schema');
  }

Function getFields(lang,xml){}

Param lang has Sting:

ru, en, etc... - Краткий ключ языка

Param xml has Sting:

Пример конструктора

Should Return Array (when xml is support)
// example 
     return [{
        _id: 'account_p',
        name: 'Advanced account USD',
        placeholder: 'U000000',
        regexp: '^U+[0-9]{6,12}$',
        regexp_error: "Account incorrect",
        required: true,
      }];
Should Return NULL (when xml is not support)

Function transfer(order){}

Param order has object:
key Type Required Value
order.uid Number YES order uid
order.outAmount Float YES order outAmount
order.outXML String YES XML of currency for withdrawal
order.outValues Object YES Order requisites
//пример объекта order.outValues

order.outValues ={
  account_p:'U000000'
}

// key its from getFields ._id
// value entered client
Should Return Promise -> resolve (when transfer success) {Object}
key Type Required Value
ok Number YES 1 - success
transaction String YES transaction id or transfer id
to String YES Wallet id or other requisites who received payment
currency String YES Currency ISO (example USD)
amount Float YES amount of transfer
fee Float No Fee of tx (will add comment for admin)
note String No Note for order (will show to user)
Should Return Promise -> reject (when transfer fail) {String}

Message of fail