DarkElectro74 / bjs-diplom

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Дипломное задание к курсу «Основы JavaScript»

Задание

Вы помогаете крипто-стартапу сделать сайт-биржу, на котором можно обменивать деньги на внутреннюю валюту этой компании (она называется Неткоины) и передавать эту валюту между пользователям сервиса. Так как вы присоединяетесь к существующему проекту, часть его уже реализована. Нужно, используя наработки другого программиста, продолжить и завершить разработку проекта.

Ваша задача состоит в том, чтобы написать класс Profile, содержащий все необходимые методы, и функцию main, выполняющую операции с пользователями и деньгами.

Методы класса Profile описаны в Части 1. Операции, которые должна выполнить функция, описаны в Части 2.

Программа, которую требуется реализовать, состоит из двух частей:

Часть 1

  1. Класс «Пользователь» (Profile). Он должен уметь выполнять все основные операции. Для этого реализуйте методы:
  • Добавление нового пользователя.
  • Авторизация.
  • Добавление денег в личный кошелек.
  • Конвертация валют.
  • Перевод денег другому пользователю.
  1. Функция, которая возвращает текущий курс Неткоинов по отношению к другим валютам. Курс потребуется для метода конвертации валют.

Часть 2

Функция (main), которая последовательно выполнит следующие операции:

  • Создание двух разных пользователей.
  • Авторизация одного пользователя.
  • Зачисление авторизованному пользователю на счет 500 000 в выбранной валюте (доступные валюты: рубль (RUB), доллар (USD), евро (USD)).
  • Конвертация денег на счету пользователя из текущей валюты в Неткоины.
  • Перевод Неткоинов от авторизованного пользователя второму пользователю.

Выполнение задания

1. Начало работы

  1. Установите NodeJS для своей операционной системы. Если NodeJS уже был установлен ранее, обновите его до последней версии.
  2. Склонируйте данный репозиторий.
  3. Откройте терминал и перейдите в папку со склонированным репозиторием.
  4. Выполните команду npm install.
  5. Выполните команду npm i -g nodemon.

Убедитесь, что выполняете команды с правами администратора.

Работа с сервером

Запуск сервера

Чтобы запустить сервер биржи:

  1. Выполните команду npm start из терминала в папке с репозиторием. Убедитесь, что в консоли в увидели надпись App is listening on port 1337.
  2. Перейдите по ссылке и убедитесь, что видите надпись Биржа Нетоинов

Завершение работы сервера

Чтобы остановить работу сервера:

  1. Остановите процесс, запущенный при помощи команды npm start, нажатием комбинации клавиш Ctrl + C в терминале. После этого все данные будут утеряны.
  2. Перейдите по ссылке и убедитесь, что не видите надпись Биржа "Неткоин"

Обратите внимание, что в консоли может появляться ошибка о том, что пользователь уже существует:

Ошибка: пользователь уже создан

Ошибка сопровождается соответствующим сообщением в терминале:

{ code: 409, message: 'User already exists' }

Эта ошибка решается перезапуском сервера.

2. Решение задания

В папке с проектом находятся два файла: ./static/api-connector.js и ./static/main.js.

В файле ./static/api-connector.js реализован класс ApiConnector, который умеет делать все необходимые запросы к серверу. Каждый метод данного класса выполняет только две вещи: отправляет запрос на сервер и принимает его ответ.

Используйте методы данного класса при реализации методов класса Profile. Только так данные будут записаны на сервер. Самостоятельно писать функционал связи с сервером не нужно, поскольку в данном курсе эта тема не изучалась.

Ваша задача, используя методы класса ApiConnector для взаимодействия с сервером, реализовать методы класса Profile для выполнения необходимых операций.

Файл ./static/main.js предназначен для вашего кода.

Решение первой части задания

  1. В файле main.js объявите класс Profile.
  2. Реализуйте конструктор класса. Экземпляр класса принимает на вход объект со следующими ключами:
  • Имя пользователя — строка.
  • Реальное имя — объект с ключами "имя" и "фамилия".
  • Пароль — строка.
  1. Реализуйте метод Добавление нового пользователя — метод вызывается с данными, полученными из конструктора класса.
  2. Реализуйте метод Авторизация — метод вызывается с данными, полученными из конструктора класса.
  3. Реализуйте метод Добавление денег в личный кошелек — метод принимает на вход объект с двумя ключами: валюта (строка) и количество денег (число).
  4. Реализуйте метод Конвертация валют — метод принимает на вход объект с тремя ключами: из какой валюты конвертируем (строка), в какую валюту конвертируем (строка), конвертированная (целевая) сумма (число).
  5. Реализуйте метод Перевод токенов другому пользователю — метод принимает на вход объект с двумя ключами: кому (строка, имя пользователя), количество денег (число).

При реализации методов активно используйте коллбэки (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);
        });
    }
  1. После реализации всех методов класса 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"
}

Решение второй части задания

  1. В файле main.js, после класса Profile и функции получения курса валют, объявите функцию main.
  2. Функция не принимает параметров.
  3. Внутри функции объявите две переменные с экземплярами класса Profile. Передайте любые выдуманные значения в качестве аргументов.
  4. Вызовите метод создания пользователя для одной из созданых переменных. В результате на сервере будет создан новый пользователь.
  5. В случае удачного создания пользователя вызовите метод авторизации для того же пользователя, которого вы только что создали.
  6. В случае удачной авторизации вызовите метод добавления денег на счёт для авторизованного пользователя.
  7. В случае удачного добавления денег на счёт вызовите метод конвертации денег из текущей валюты в Неткоины. Обратите внимание, что для корректной работы метода необходимо передавать уже конвертированную (целевую) сумму. Для вычисления конвертированной суммы получите курс текущей валюты к Неткоину с помощью функции получения курса валют с сервера.
  8. В случае удачной конвертации вызовите метод создания второго пользователя, используя вторую переменную с экземпляром класса Profile.
  9. После удачного создания второго пользователя вызовите метод перевода денег у первого пользователя.
  10. В конце файла вызовите функцию.

Заготовка для функции:

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 500000 euros to Ivan`);
        });
}

main();

По ходу выполнения диплома проверяйте корректность работы кода в консоли браузера. При возникновении ошибки внимательно прочитайте текст ошибки в браузере и в терминале и постарайтесь самостоятельно найти и решить проблему, вызывающую появление ошибки.

Пример выводов в консоль успешно решенного задания

Пример вывода


Исходный код дипломной работы нужно разместить на GitHub.

Как правильно задавать вопросы дипломному руководителю?

Что следует делать, чтобы все получилось:

  • Попробуйте найти ответ в лекциях, материалах и домашних заданиях курса. После этого воспользуйтесь Гуглом. В случае любой сложности вы можете задать вопрос дипломному руководителю. Но лучше иметь «на руках» несколько попыток самостоятельного решения проблемы.
  • В одном вопросе лучше описывать одну проблему. Так ответ дипломного руководителя будет максимально эффективным и полезным.
  • По возможности прикрепляйте к вопросу скриншоты и стрелочкой показывайте где не получается. Программу для этого можно скачать здесь https://app.prntscr.com/ru/.
  • По возможности задавайте вопросы в комментариях к коду.
  • Начинайте работу над дипломом как можно раньше! Чтобы было больше времени на правки.
  • Делайте диплом по частям, а не всё сразу. Иначе есть шанс, что нужно будет всё переделывать 🙂

Что следует делать, чтобы ничего не получилось:

  • Писать вопросы вида «Ничего не работает. Не запускается. Всё сломалось.»
  • Откладывать диплом на последний момент.

About


Languages

Language:JavaScript 95.8%Language:HTML 4.2%