digital-store/README.md
2020-01-25 20:31:49 +03:00

268 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<p align="center">
<a href="http://materializecss.com/">
<img src="https://svgshare.com/i/HWW.svg" width="150">
</a>
</p>
<h3 align="center">Digital Store</h3>
<p align="center">
Digital Store - это настраиваемый интернет-магазин на платформе NodeJS для продажи ваших цифровых товаров.<br>
<a href="https://polar-peak-95205.herokuapp.com/">Демонстрания функционирования интернет-магазина.</a>
<br>
<br>
<img alt="GitHub package.json version (branch)" src="https://img.shields.io/github/package-json/v/sergeyyarkov/digital-store/production?color=%2326a69a">
<img alt="GitHub release (latest by date)" src="https://img.shields.io/github/v/release/sergeyyarkov/digital-store">
<img alt="GitHub All Releases" src="https://img.shields.io/github/downloads/sergeyyarkov/digital-store/total">
<img alt="GitHub top language" src="https://img.shields.io/github/languages/top/sergeyyarkov/digital-store?color=%23f9a825">
<img alt="GitHub repo size" src="https://img.shields.io/github/repo-size/sergeyyarkov/digital-store"><br>
<a href="https://david-dm.org/sergeyyarkov/digital-store">
<img src="https://david-dm.org/sergeyyarkov/digital-store/status.svg" alt="dependencies Status badge">
</a>
<a href="https://david-dm.org/sergeyyarkov/digital-store#info=devDependencies">
<img src="https://david-dm.org/sergeyyarkov/digital-store/dev-status.svg" alt="devDependency Status badge">
</a>
<a href="https://github.com/sergeyyarkov/digital-store/blob/master/LICENSE">
<img alt="GitHub" src="https://img.shields.io/github/license/sergeyyarkov/digital-store">
</a>
</p>
## Содержание
- [О проекте](#О-проекте)
- [Структура репозитория](#Структура-репозитория)
- [Установка и найстройка скрипта](#Установка-и-найстройка-скрипта)
- [Запуск скрипта на локальном компьютере](#Запуск-скрипта-на-локальном-компьютере)
- [Запуск скрипта на удаленном сервере](#Запуск-скрипта-на-удаленном-сервере)
- [Переменные среды](#Переменные-среды)
- [API](#API)
- [Требования](#Требования)
- [Лицензия](#Лицензия)
## О проекте:
Этот проект представляет из себя интернет-магазин на платформе NodeJS, вы можете продавать свои цифровые товары именно скачав этот репозиторий, в [панели управления](#Панель-управления) вы сможете создавать, удалять и редактировать товары или категории . В проекте используется концепция REST API, поэтому для отдачи информации клиенту существует отдельный API. Информация о покупателях, товарах, категориях и т.д хранится в БД MongoDB (используется нативный драйвер).
### Функционал покупателя:
- Возможность выбирать интересующие категории, переход по одиночным страницам конкретного товара.
- Возможность комментировать как отдельный товар, так и весь магазин на отдельной странице через виджет [Commento.io](https://commento.io/)
- Возможность фильтровать интересующую категорию или все товары через фильтр.
- Покупатель может совершать одну или несколько покупок через корзину или через кнопку "Купить".
- Оплата осуществляется через сервис QIWI API.
- Результатом оплаты будут данные одного или нескольких товаров, все данные отсылаются на почту покупателя, которую он указывал при создании заказа.
- Покупатель может узнать все свои совершенные покупки в магазине на отдельной странице.
### Функционал администратора:
Для входа в админ-панель необходимо дописать в адресной строке `/admin`, после вы попадете на страницу авторизации где нужно вписать данные `email:password`. По умолчанию `admin@support.ru:admin`
- Пароль админа хэшируется через `bcrypt` для безопасности и записывается в БД.
- На главной странице есть небольшая статистика, где можно посмотреть: сумму проданных товаров, кол-во проданных товаров, кол-во товаров в наличии.
- На главной странце так же можно узнать подробные данные о покупателях: номер заказа, почта покупателя, способ оплаты, дата покупки, сумма и данные которые были высланы по почте.
- Возможность находить конкретного покупателя через поле (нужно знать номер заказа).
- Возможность добавлять, удалять или редактировать товары на странице "Товары", так же можно посмотреть и информацию о товаре.
- Поиск товаров через поле поиска (нужно знать частичное или полное название товара).
- Добавление, удаление и редактирование категорий через страницу "Категории", каждой категории присваивается собственная иконка, которую можно загрузить через страницу "Иконки".
- Возможность править контент, изменять общее оформление магазина (только цвет).
- Возможность изменять данные администратора: почта, пароль, имя.
## Структура репозитория:
В основе всего репозитория существуют две ветки. Ветка master предназначена для разработки приложения, для выгрузки готового приложения на сервер используйте ветку production.
## Установка и найстройка скрипта:
### Запуск скрипта на локальном компьютере:
- [Установите последний релиз Digital Store](https://github.com/sergeyyarkov/digital-store/releases) из GitHub репозитория.
- Или клонировать репозиторий `git clone https://github.com/sergeyyarkov/digital-store.git -b production`.
- Установите [Node.js](https://nodejs.org/ru/) не ниже версии 7.6.0, в процессе установки Node.js установите Node Package Manager.
- Установите БД MongoDB на ваш компьютер или создайте кластер на сайте [www.mongodb.com](https://www.mongodb.com/) и импортируйте туда дамп структуры БД, которые находится в корне приложения `/database_dump`.
- Перейдите на сайт [QIWI API](https://qiwi.com/p2p-admin/transfers/api) и создайте пару ключей авторизации. Сохраните секретный ключ.
- Если вы хотите настроить оформление формы приемов перевода, то перейдите [сюда](https://qiwi.com/p2p-admin/transfers/link) и скопируйте значение переменной `themeCode` и вставьте это значение по адресу `config/routes/payments/qiwi.payment.js`.
- Для работоспособности интернет-магазина необходимо установить зависимости. Выполните комманду `npm install`.
- Далле необходимо настроить переменные среды. Создайте файл `.env` в корне вашего интернет-магазина и запишите туда [значения для переменных](#Переменные-среды). Обратите внимание, что для выгрузки скрипта на production сервер, нужно устанавливать переменные среды для вашего сервера, файл `.env` создавать не нужно.
- Настройте почтовый сервис по адресу `config/nodemailer.config.js`:
```javascript
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` файл:
```bash
HOSTNAME_URI=
DATABASE_URI=
DATABASE_NAME=
QIWI_SECRET_KEY=
EMAIL_LOGIN=
EMAIL_PASSWORD=
```
## API:
### API представляет из себя различные URL, которые отвечают данными только в формате JSON. Здесь описаны основные `GET` запросы на сервер для получения данных:
#### Для просмотра всех товаров которые существуют в магазине отправляется запрос:
```bash
https://store-name.com/api/items
```
Ответ:
```javascript
[
{
_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"
},
]
```
### Для просмотра товаров в интересующей категории отправляется запрос:
```bash
https://store-name.com/api/items/{category}
```
Ответ:
```javascript
[
{
_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"
}
]
```
### Для просмотра информации о всех категориях отправляется запрос:
```bash
https://store-name.com/api/categories
```
Ответ:
```javascript
[
{
_id: "5df64563309e691f2c33d400",
title: "uplay",
img: "img-1576349954743.svg",
type: "type",
format: "format"
},
{
_id: "5e04ea023625771abc75fd14",
title: "fortnite",
img: "img-1576349989720.svg",
type: "type",
format: "format"
},
]
```
### Для просмотра информации о интересующей категории отправляется запрос:
```bash
https://store-name.com/api/category/{category}
```
Ответ:
```javascript
[
{
_id: "5df64563309e691f2c33d400",
title: "uplay",
img: "img-1576349954743.svg",
type: "type",
format: "format"
}
]
```
### Для просмотра данных всех товаров отправляется запрос: **Нужна авторизация для администратора.**
```bash
https://store-name.com/api/items/data
```
Ответ:
```javascript
[
{
_id: "5e15dbc415303a1980cd77a0",
title: "Тестовый товар №1",
data: ["login:pass", "login:pass", "login:pass"]
},
{
_id: "5e175c63b479600ac493ce88",
title: "Тестовый товар №2",
data: ["login:pass", "login:pass", "login:pass"]
}
]
```
### Для просмотра покупателей отправляется запрос: **Нужна авторизация для администратора.**
```bash
https://store-name.com/api/buyers
```
Ответ:
```javascript
[
{
_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"]
}
]
```
### Для просмотра списка иконок отправляется запрос: **Нужна авторизация для администратора.**
```bash
https://store-name.com/api/icons
```
Ответ:
```javascript
[
"img-1576349954743.svg",
"img-1576349989720.svg",
"img-1576420937629.svg",
"img-1576421960189.svg"
]
```
## Требования:
- Node.js v7.6.0 или выше
## Лицензия:
[MIT](https://github.com/sergeyyarkov/digital-store/blob/master/LICENSE)<br><br>