https://github.com/fey/xsolla-summer-school-2021-nodejs-example
https://github.com/fey/xsolla-summer-school-2021-nodejs-example
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/fey/xsolla-summer-school-2021-nodejs-example
- Owner: fey
- Created: 2021-08-15T18:10:42.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2021-08-15T18:22:15.000Z (almost 5 years ago)
- Last Synced: 2025-03-26T19:47:38.779Z (over 1 year ago)
- Language: JavaScript
- Size: 37.3 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# xsolla_summer2021_be
Тестовое задание к летней школе Xsolla Summer School Backend 2021
## Задание:
Задача: реализация системы управления товарами для площадки электронной коммерции (от англ. e-commerce) с поддержкой RESTful API.
Для реализации прототипа системы напишите:
Методы API для управления товарами(CRUD):
Создание товара. Метод генерирует и возвращает уникальный идентификатор товара.
Редактирование товара. Метод изменяет все данные о товаре по его идентификатору или SKU.
Удаление товара по его идентификатору или SKU.
Получение информации о товаре по его идентификатору или SKU.
Получение каталога товаров. Метод возвращает список всех добавленных товаров.
## Реализация.
Для реализации прототипа выбрана связка NodeJS(Express) и MongoDB через библиотеку Mongoose.
## Установка
1. Скачать и развернуть репозиторий.
2. Установить необходимые зависимости:
`$ npm istall`
3. В терминале введите команду для запуска сервера:
`$ npm run serve`
## Использование
### Модель товара:
Товар определяется уникальным идентификатором(_id) и обязательно должен иметь SKU, имя, тип, стоимость.
Пример:
```
{
"_id": "60e6e5500b3f9952357096ff",
"sku": "G11C22P5",
"type": "game",
"name": "The Last of us 2",
"price": "55"
}
```
### Методы API для управления товарами(CRUD):
* #### Создание товара (CREATE)
Для создания товара необходимо передать объект товара в формате JSON в теле запроса.
- Тип запроса: POST
- URL: `http://localhost:5000/api/products`
- В body запроса необходмио передать создаваемый объект JSON:
```
{
"_id": "60e6e5500b3f9952357096ff",
"sku": "G11C22P5",
"type": "game",
"name": "The Last of us 2",
"price": "55"
}
```
В ответ сервер вернет уникальный идентификатор товара (60f006edcac6edea0962318e)
* #### Получение товара по SKU или уникальному идентификатору или списка товаров (READ)
Для получения товара по SKU необходимо передать соответствующий get-параметр sku.
- Тип запроса: GET
- URL: `http://localhost:5000/api/products?sku=G11C21P5`
В ответ сервер вернет объект товара:
```
{
"_id": "60e6e30e0b3f9952357096f8",
"sku": "G11C21P5",
"type": "game",
"name": "The Last of us",
"price": 57,
"__v": 0
}
```
Для получения товара по уникальному идентификатору необходимо передать сам уникальный идентификатор.
- Тип запроса: GET
- URL: `http://localhost:5000/api/products/60eed470aa7711da2e229137`
В ответ сервер вернет объект товара:
```
{
"_id": "60eed470aa7711da2e229137",
"sku": "G23C5P5",
"type": "game",
"name": "Detroit: Become Human",
"price": 45,
"__v": 0
}
```
* #### Изменение товара по SKU или уникальному идентификатору (UPDATE)
Для изменения товара по SKU или уникальному идентификатор необходимо передать измененный объект товара в теле запроса.
- Тип запроса: PUT
- URL: `http://localhost:5000/api/products`
- В body запроса необходмио передать создаваемый объект JSON:
```
{
"_id": "60e6e30e0b3f9952357096f8",
"sku": "G11C25P5",
"type": "game",
"name": "The Last of us",
"price": 55,
"__v": 0
}
```
В ответ сервер вернет обновленный объект товара.
* #### Удаление товара по SKU или уникальному идентификатору (DELETE)
Для удаления товара по SKU необходимо передать sku в строке запроса.
- Тип запроса: DELETE
- URL: `http://localhost:5000/api/products?sku=G5C3P5`
В ответ сервер вернет null.
Для удаления товара по уникальному идентификатору необходимо передать уникальный идентификатор в строке запроса.
- Тип запроса: DELETE
- URL: `http://localhost:5000/api/products/60f006edcac6edea0962318e`
В ответ сервер вернет null.
## Дополнительно
Приложение развернуто на публичном хостинге Heroku:
https://whispering-meadow-42322.herokuapp.com/