Вы помогаете крипто-стартапу сделать сайт-биржу, на котором можно обменивать деньги на внутреннюю валюту этой компании (она называется Неткоины) и передавать эту валюту между пользователям сервиса. Так как вы присоединяетесь к существующему проекту, часть его уже реализована. Нужно, используя наработки другого программиста, продолжить и завершить разработку проекта.
Ваша задача состоит в том, чтобы написать класс Profile
, содержащий все необходимые методы, и функцию main
, выполняющую операции с пользователями и деньгами.
Методы класса Profile
описаны в Части 1. Операции, которые должна выполнить функция, описаны в Части 2.
Программа, которую требуется реализовать, состоит из двух частей:
- Класс «Пользователь» (
Profile
). Он должен уметь выполнять все основные операции. Для этого реализуйте методы:
- Добавление нового пользователя.
- Авторизация.
- Добавление денег в личный кошелек.
- Конвертация валют.
- Перевод денег другому пользователю.
- Функция, которая возвращает текущий курс Неткоинов по отношению к другим валютам. Курс потребуется для метода конвертации валют.
Функция (main
), которая последовательно выполнит следующие операции:
- Создание двух разных пользователей.
- Авторизация одного пользователя.
- Зачисление авторизованному пользователю на счет 500 000 в выбранной валюте (доступные валюты: рубль (
RUB
), доллар (USD
), евро (USD
)). - Конвертация денег на счету пользователя из текущей валюты в Неткоины.
- Перевод Неткоинов от авторизованного пользователя второму пользователю.
- Установите NodeJS для своей операционной системы. Если NodeJS уже был установлен ранее, обновите его до последней версии.
- Склонируйте данный репозиторий.
- Откройте терминал и перейдите в папку со склонированным репозиторием.
- Выполните команду
npm install
. - Выполните команду
npm i -g nodemon
.
Убедитесь, что выполняете команды с правами администратора.
Чтобы запустить сервер биржи:
- Выполните команду
npm start
из терминала в папке с репозиторием. Убедитесь, что в консоли в увидели надписьApp is listening on port 1337
. - Перейдите по ссылке и убедитесь, что видите надпись Биржа Нетоинов
Чтобы остановить работу сервера:
- Остановите процесс, запущенный при помощи команды
npm start
, нажатием комбинации клавишCtrl + C
в терминале. После этого все данные будут утеряны. - Перейдите по ссылке и убедитесь, что не видите надпись Биржа "Неткоин"
Обратите внимание, что в консоли может появляться ошибка о том, что пользователь уже существует:
Ошибка сопровождается соответствующим сообщением в терминале:
{ code: 409, message: 'User already exists' }
Эта ошибка решается перезапуском сервера.
В папке с проектом находятся два файла: ./static/api-connector.js
и ./static/main.js
.
В файле ./static/api-connector.js
реализован класс ApiConnector
, который умеет делать все необходимые запросы к серверу. Каждый метод данного класса выполняет только две вещи: отправляет запрос на сервер и принимает его ответ.
Используйте методы данного класса при реализации методов класса Profile
. Только так данные будут записаны на сервер.
Самостоятельно писать функционал связи с сервером не нужно, поскольку в данном курсе эта тема не изучалась.
Ваша задача, используя методы класса ApiConnector
для взаимодействия с сервером, реализовать методы класса Profile
для выполнения необходимых операций.
Файл ./static/main.js
предназначен для вашего кода.
- В файле
main.js
объявите классProfile
. - Реализуйте конструктор класса. Экземпляр класса принимает на вход объект со следующими ключами:
- Имя пользователя — строка.
- Реальное имя — объект с ключами "имя" и "фамилия".
- Пароль — строка.
- Реализуйте метод Добавление нового пользователя — метод вызывается с данными, полученными из конструктора класса.
- Реализуйте метод Авторизация — метод вызывается с данными, полученными из конструктора класса.
- Реализуйте метод Добавление денег в личный кошелек — метод принимает на вход объект с двумя ключами: валюта (строка) и количество денег (число).
- Реализуйте метод Конвертация валют — метод принимает на вход объект с тремя ключами: из какой валюты конвертируем (строка), в какую валюту конвертируем (строка), конвертированная (целевая) сумма (число).
- Реализуйте метод Перевод токенов другому пользователю — метод принимает на вход объект с двумя ключами: кому (строка, имя пользователя), количество денег (число).
При реализации методов активно используйте коллбэки (callback
). Это позволит последовательно выполнять действия внутри функции из Часть 2.
Пример правильного метода:
addMoney({ currency, amount }, callback) {
console.log(`Adding ${amount} of ${currency} to ${this.username}`);
return ApiConnector.addMoney({ currency, amount }, (err, data) => {
console.log(`Added ${amount} of ${currency} to ${this.username}`);
callback(err, data);
});
}
- После реализации всех методов класса
Profile
за его пределами реализуйте функцию получения курса валют с сервера.
В данной функции нужно использовать методgetStocks
классаApiConnector
. Сохраните данные, полученные в результате вызоваgetStocks
, в переменную.
МетодgetStocks
возвращает массив из 100 объектов следующего вида:
{
EUR_NETCOIN: "0.072"
NETCOIN_EUR: "13.889"
NETCOIN_RUB: "1000.000"
NETCOIN_USD: "15.152"
RUB_NETCOIN: "0.001"
USD_NETCOIN: "0.066"
}
- В файле
main.js
, после классаProfile
и функции получения курса валют, объявите функциюmain
. - Функция не принимает параметров.
- Внутри функции объявите две переменные с экземплярами класса
Profile
. Передайте любые выдуманные значения в качестве аргументов. - Вызовите метод создания пользователя для одной из созданых переменных. В результате на сервере будет создан новый пользователь.
- В случае удачного создания пользователя вызовите метод авторизации для того же пользователя, которого вы только что создали.
- В случае удачной авторизации вызовите метод добавления денег на счёт для авторизованного пользователя.
- В случае удачного добавления денег на счёт вызовите метод конвертации денег из текущей валюты в Неткоины. Обратите внимание, что для корректной работы метода необходимо передавать уже конвертированную (целевую) сумму. Для вычисления конвертированной суммы получите курс текущей валюты к Неткоину с помощью функции получения курса валют с сервера.
- В случае удачной конвертации вызовите метод создания второго пользователя, используя вторую переменную с экземпляром класса
Profile
. - После удачного создания второго пользователя вызовите метод перевода денег у первого пользователя.
- В конце файла вызовите функцию.
Заготовка для функции:
function main(){
const Ivan = new Profile({
username: 'ivan',
name: { firstName: 'Ivan', lastName: 'Chernyshev' },
password: 'ivanspass',
});
// сначала создаем и авторизуем пользователя
// после того, как мы авторизовали пользователя, добавляем ему денег в кошелек
Ivan.addMoney({ currency: 'RUB', amount: 100 }, (err, data) => {
if (err) {
console.error('Error during adding money to Ivan');
} else {
console.log(`Added 100 rubles to Ivan`);
});
}
main();
По ходу выполнения диплома проверяйте корректность работы кода в консоли браузера. При возникновении ошибки внимательно прочитайте текст ошибки в браузере и в терминале и постарайтесь самостоятельно найти и решить проблему, вызывающую появление ошибки.
Исходный код дипломной работы нужно разместить на GitHub.
Что следует делать, чтобы все получилось:
- Попробуйте найти ответ в лекциях, материалах и домашних заданиях курса. После этого воспользуйтесь Гуглом. В случае любой сложности вы можете задать вопрос дипломному руководителю. Но лучше иметь «на руках» несколько попыток самостоятельного решения проблемы.
- В одном вопросе лучше описывать одну проблему. Так ответ дипломного руководителя будет максимально эффективным и полезным.
- По возможности прикрепляйте к вопросу скриншоты и стрелочкой показывайте где не получается. Программу для этого можно скачать здесь https://app.prntscr.com/ru/.
- По возможности задавайте вопросы в комментариях к коду.
- Начинайте работу над дипломом как можно раньше! Чтобы было больше времени на правки.
- Делайте диплом по частям, а не всё сразу. Иначе есть шанс, что нужно будет всё переделывать 🙂
Что следует делать, чтобы ничего не получилось:
- Писать вопросы вида «Ничего не работает. Не запускается. Всё сломалось.»
- Откладывать диплом на последний момент.