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

  • ./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