Digital Store
Digital Store - это настраиваемый интернет-магазин на платформе NodeJS для продажи ваших цифровых товаров.
Демонстрация функционирования интернет-магазина.

## 🐬 Установка через Docker:
-
### Настройка платежной системы:
В скрипте на данный момент доступна система оплаты через сервис QIWI, чтобы настроить оплату в вашем магазине следуйте следующим шагам:
- Перейдите на сайт [QIWI API](https://qiwi.com/p2p-admin/transfers/api) и создайте пару ключей авторизации. Сохраните секретный ключ.
- Если вы хотите настроить оформление формы приемов перевода, то перейдите [сюда](https://qiwi.com/p2p-admin/transfers/link) и скопируйте значение переменной `themeCode` и вставьте это значение по адресу `config/routes/payments/qiwi.payment.js`.
- Секретный ключ нужно указать в поле переменной среды `QIWI_SECRET_KEY`.
- Редирект после оплаты товара через QIWI на локальный адрес `localhost:3000` работать не будет, необходим домен.
### Настройка почтового сервиса:
Для отдачи данных товара на почту покупателя после покупки товара, нужно настроить nodemailer:
- Настройте почтовый сервис по адресу `config/nodemailer.config.js`:
```javascript
host: "smtp.mail.ru",
port: 465,
secure: true, // true для 465, false для остальных.
```
- Затем укажите переменные среды `EMAIL_LOGIN` и `EMAIL_PASSWORD`.
### Настройка системы комментариев:
В интернет магазине используется система комментариев [Disqus](https://disqus.com/):
- Добавьте свой домен на их сайт и замените embed код по адресу `dist/public/js/disqus.js`.
## Переменные среды:
Перменные среды нужны для работоспособности всего приложения, очень важно вписать верные данные для избежания возможных ошибок.
### Описание переменных:
| Переменная | Описание |
| --------------- | -------------------------------------------------------- |
| DATABASE_URI | Подключение к БД MongoDB |
| DATABASE_NAME | Имя БД |
| EMAIL_LOGIN | Логин от почты для отправки данных покупателю |
| EMAIL_PASSWORD | Пароль от почты |
| QIWI_SECRET_KEY | Секретный ключ QIWI для работоспособности системы оплаты |
`.env` файл:
```bash
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)