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

## 🐬 Установка через Docker:
### Для установки интернет магазина через Docker необходимо выполнить несколько шагов:
Вам потребуется VPS с установленным приложением Docker. VPS на Linux купите у reg ru [здесь](https://www.reg.ru?rlink=reflink-5311069) обязательно с виртуализацией XEN.
1. После того, как вы зашли на сервер создайте папку с вашим приложением, скачайте магазин с github и отконфигурируйте файлы.
```
mkdir app
cd ./app
git clone https://github.com/sergeyyarkov/digital-store.git -b digital-store-docker .
```
2. Настройте переменные среды в файле `docker-compose.yml`. Найдите сервис nodejs и заполните строки в `enviroment`
Чтобы выйти и сохранить `ctrl + x` далее `y` и `enter`
```
nano docker-compose.yml`
```
3. Отконфигурируйте файл с почтовым сервисом. Укажите свой сервер SMTP, Port.
```
nano ./server/config/nodemailer.config.js
```
4. Настройте скрипт с сертификацией Lets-encrypt. Замените почту и домен на свои.
```
nano ./init-letsencrypt.sh
```
5. Далее настройте файл конфигурации nginx. Замените везде домены на свои.
```
nano ./data/nginx/app.conf
```
6. Запустите скрипт `./init-letsencrypt.sh`. Если выводит `Permission denied`, то `chmod u+x init-letsencrypt.sh` затем еще раз запустите скрипт. Если сертификация успешно прошла то у вас не должно высветится ошибок.
7. Импортируйте базу данных:
```
docker exec -it mongodb bash
cd ./backup
mongorestore --username root --password secret -d digital_store --drop /backup/digital_store/
exit
```
✔️ Теперь приложение полностью настроено и готово к работе. Ваш SSL сертификат будет автоматически обновляться, когда ему это потребуется.
Некоторые команды которые могут пригодится.
```
docker-compose up -d - запустить приложение в detach режиме
docker-compose stop - остановить приложение
mongodump --username root --password secret --db plunderweb --out=/backup/ - выполнить backup БД. Перед тем как выполнить эту команду, зайдите в контейнер с mongodb в папку backup.
docker-compose up -d --no-deps --build nodejs - если вы изменили чтото в файлах, то после этого необходимо выполнить эту команду чтобы изменения отображались на вашем сайте.
```
### Настройка платежной системы:
В скрипте на данный момент доступна система оплаты через сервис 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 | Пароль от почты |
| HOSTNAME_URI | Ссылка на ваш сайт `https://domain.ru` |
| QIWI_SECRET_KEY | Секретный ключ QIWI для работоспособности системы оплаты |
`.env` файл:
```bash
DATABASE_URI=
DATABASE_NAME=
QIWI_SECRET_KEY=
HOSTNAME_URI=
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)