Digital Store
Digital Store - это настраиваемый интернет-магазин на платформе NodeJS для продажи ваших цифровых товаров.
Демонстрания функционирования интернет-магазина.
Содержание
- О проекте
- Структура репозитория
- Установка и найстройка скрипта
- Запуск скрипта на локальном компьютере
- Запуск скрипта на удаленном сервере
- Переменные среды
- API
- Требования
- Лицензия
О проекте:
Этот проект представляет из себя интернет-магазин на платформе NodeJS, вы можете продавать свои цифровые товары именно скачав этот репозиторий, в панели управления вы сможете создавать, удалять и редактировать товары или категории . В проекте используется концепция REST API, поэтому для отдачи информации клиенту существует отдельный API. Информация о покупателях, товарах, категориях и т.д хранится в БД MongoDB (используется нативный драйвер).
Функционал покупателя:
- Возможность выбирать интересующие категории, переход по одиночным страницам конкретного товара.
- Возможность комментировать как отдельный товар, так и весь магазин на отдельной странице через виджет Commento.io
- Возможность фильтровать интересующую категорию или все товары через фильтр.
- Покупатель может совершать одну или несколько покупок через корзину или через кнопку "Купить".
- Оплата осуществляется через сервис QIWI API.
- Результатом оплаты будут данные одного или нескольких товаров, все данные отсылаются на почту покупателя, которую он указывал при создании заказа.
- Покупатель может узнать все свои совершенные покупки в магазине на отдельной странице.
Функционал администратора:
Для входа в админ-панель необходимо дописать в адресной строке /admin, после вы попадете на страницу авторизации где нужно вписать данные email:password. По умолчанию admin@support.ru:admin
- Пароль админа хэшируется через
bcryptдля безопасности и записывается в БД. - На главной странице есть небольшая статистика, где можно посмотреть: сумму проданных товаров, кол-во проданных товаров, кол-во товаров в наличии.
- На главной странце так же можно узнать подробные данные о покупателях: номер заказа, почта покупателя, способ оплаты, дата покупки, сумма и данные которые были высланы по почте.
- Возможность находить конкретного покупателя через поле (нужно знать номер заказа).
- Возможность добавлять, удалять или редактировать товары на странице "Товары", так же можно посмотреть и информацию о товаре.
- Поиск товаров через поле поиска (нужно знать частичное или полное название товара).
- Добавление, удаление и редактирование категорий через страницу "Категории", каждой категории присваивается собственная иконка, которую можно загрузить через страницу "Иконки".
- Возможность править контент, изменять общее оформление магазина (только цвет).
- Возможность изменять данные администратора: почта, пароль, имя.
Структура репозитория:
В основе всего репозитория существуют две ветки. Ветка master предназначена для разработки приложения, для выгрузки готового приложения на сервер используйте ветку production.
Установка и найстройка скрипта:
Запуск скрипта на локальном компьютере:
- Установите последний релиз Digital Store из GitHub репозитория.
- Или клонировать репозиторий
git clone https://github.com/sergeyyarkov/digital-store.git -b production. - Установите Node.js не ниже версии 7.6.0, в процессе установки Node.js установите Node Package Manager.
- Установите БД MongoDB на ваш компьютер или создайте кластер на сайте www.mongodb.com и импортируйте туда дамп структуры БД, которые находится в корне приложения
/database_dump. - Перейдите на сайт QIWI API и создайте пару ключей авторизации. Сохраните секретный ключ.
- Если вы хотите настроить оформление формы приемов перевода, то перейдите сюда и скопируйте значение переменной
themeCodeи вставьте это значение по адресуconfig/routes/payments/qiwi.payment.js. - Для работоспособности интернет-магазина необходимо установить зависимости. Выполните комманду
npm install. - Далле необходимо настроить переменные среды. Создайте файл
.envв корне вашего интернет-магазина и запишите туда значения для переменных. Обратите внимание, что для выгрузки скрипта на production сервер, нужно устанавливать переменные среды для вашего сервера, файл.envсоздавать не нужно. - Настройте почтовый сервис по адресу
config/nodemailer.config.js:
host: "smtp.mail.ru",
port: 465,
secure: true, // true для 465, false для остальных.
- После этого, введите
npm run startи перейдите по адресуlocalhost:3000, вы увидите уже рабочий интернет-магазин который запущен у вас на локальном компьютере. - Редирект после оплаты товара через QIWI на локальный адрес работать не будет, необходим домен.
Запуск скрипта на удаленном сервере:
В данном примере на удаленном сервере будет использоваться связка Ubuntu 18.04, Nginx, MongoDB, PM2, NodeJS.
- ...
Переменные среды:
Перменные среды нужны для работоспособности всего приложения, очень важно вписать верные данные для избежания возможных ошибок.
Описание переменных:
| Переменная | Описание |
|---|---|
| HOSTNAME_URI | Ваше имя хоста: https://store-name.com |
| DATABASE_URI | Подключение к БД MongoDB |
| DATABASE_NAME | Имя БД |
| EMAIL_LOGIN | Логин от почты для отправки данных покупателю |
| EMAIL_PASSWORD | Пароль от почты |
| QIWI_SECRET_KEY | Секретный ключ QIWI для работоспособности системы оплаты |
.env файл:
HOSTNAME_URI=
DATABASE_URI=
DATABASE_NAME=
QIWI_SECRET_KEY=
EMAIL_LOGIN=
EMAIL_PASSWORD=
API:
API представляет из себя различные URL, которые отвечают данными только в формате JSON. Здесь описаны основные GET запросы на сервер для получения данных:
Для просмотра всех товаров которые существуют в магазине отправляется запрос:
https://store-name.com/api/items
Ответ:
[
{
_id: "5e15dbc415303a1980cd77a0",
title: "Тестовый товар №1",
count: 0,
price: 1,
category: "steam",
description: "-",
date: "2020-01-08T13:40:20.353Z"
},
{
_id: "5e15dcb4138c3339bcbc3719",
title: "Тестовый товар №2",
count: 0,
price: 1,
category: "uplay",
description: "-",
date: "2020-01-08T13:44:20.940Z"
},
]
Для просмотра товаров в интересующей категории отправляется запрос:
https://store-name.com/api/items/{category}
Ответ:
[
{
_id: "5e15dbc415303a1980cd77a0",
title: "Тестовый товар №1",
count: 0,
price: 1,
category: "steam",
description: "-",
date: "2020-01-08T13:40:20.353Z"
},
{
_id: "5e1ccf30d5b894228c86385a",
title: "Тестовый товар №2",
count: 10,
price: 1,
category: "steam",
description: "-",
date: "2020-01-13T20:12:32.814Z"
}
]
Для просмотра информации о всех категориях отправляется запрос:
https://store-name.com/api/categories
Ответ:
[
{
_id: "5df64563309e691f2c33d400",
title: "uplay",
img: "img-1576349954743.svg",
type: "type",
format: "format"
},
{
_id: "5e04ea023625771abc75fd14",
title: "fortnite",
img: "img-1576349989720.svg",
type: "type",
format: "format"
},
]
Для просмотра информации о интересующей категории отправляется запрос:
https://store-name.com/api/category/{category}
Ответ:
[
{
_id: "5df64563309e691f2c33d400",
title: "uplay",
img: "img-1576349954743.svg",
type: "type",
format: "format"
}
]
Для просмотра данных всех товаров отправляется запрос: Нужна авторизация для администратора.
https://store-name.com/api/items/data
Ответ:
[
{
_id: "5e15dbc415303a1980cd77a0",
title: "Тестовый товар №1",
data: ["login:pass", "login:pass", "login:pass"]
},
{
_id: "5e175c63b479600ac493ce88",
title: "Тестовый товар №2",
data: ["login:pass", "login:pass", "login:pass"]
}
]
Для просмотра покупателей отправляется запрос: Нужна авторизация для администратора.
https://store-name.com/api/buyers
Ответ:
[
{
_id: "5e1c97701b619a31f010062c",
bill_id: "9244e5ae-560a-432a-9882-bc1b941c8cca",
email: "test-email@mail.com",
method: "qiwi",
date: "2020-01-13T18:13:38.623+03:00",
amount: 2,
data: ["login:pass", "login:pass"]
}
]
Для просмотра списка иконок отправляется запрос: Нужна авторизация для администратора.
https://store-name.com/api/icons
Ответ:
[
"img-1576349954743.svg",
"img-1576349989720.svg",
"img-1576420937629.svg",
"img-1576421960189.svg"
]
Требования:
- Node.js v7.6.0 или выше