Files
store-platform/USAGE.md
T
2025-12-07 13:34:02 +03:00

243 lines
5.7 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.
# Руководство по использованию
## Быстрый старт
### 1. Установка зависимостей
```bash
npm install
```
###2. Настройка базы данных
Создайте базу данных PostgreSQL:
```sql
CREATE DATABASE shop_platform;
```
Выполните SQL скрипты:
```bash
psql -U postgres -d shop_platform -f sql/schema.sql
psql -U postgres -d shop_platform -f sql/indexes.sql
psql -U postgres -d shop_platform -f sql/triggers.sql
psql -U postgres -d shop_platform -f sql/seed_data.sql
```
### 3. Настройка переменных окружения
Создайте файл `.env`:
```env
DB_HOST=localhost
DB_PORT=5432
DB_NAME=shop_platform
DB_USER=postgres
DB_PASSWORD=your_password
PORT=3000
HOST=0.0.0.0
NODE_ENV=development
```
### 4. Запуск сервера
```bash
npm run dev
```
## Использование API
### Получить список товаров
```bash
curl http://localhost:3000/products
```
### Получить товар по ID
```bash
curl http://localhost:3000/products/1
```
### Создать товар
```bash
curl -X POST http://localhost:3000/products \
-H "Content-Type: application/json" \
-d '{
"name": "Новый товар",
"slug": "new-product",
"sku": "SKU-001",
"price": 1000,
"stock_quantity": 10
}'
```
### Получить категории
```bash
curl http://localhost:3000/categories
```
## Работа с DAO
### Пример использования ProductDAO
```javascript
import { ProductDAO } from './dao/ProductDAO.js';
const productDAO = new ProductDAO();
// Получить товар по ID
const product = await productDAO.findById(1);
// Получить товары с деталями
const products = await productDAO.findAllWithDetails({
limit: 20,
offset: 0,
categoryId: 1,
isFeatured: true
});
// Поиск товаров
const searchResults = await productDAO.search('телефон', {
limit: 10,
offset: 0
});
// Создать товар
const newProduct = await productDAO.create({
name: 'Новый товар',
slug: 'new-product',
sku: 'SKU-001',
price: 1000,
stock_quantity: 10
});
// Обновить товар
const updated = await productDAO.update(1, {
price: 1200
});
// Удалить товар
await productDAO.delete(1);
```
### Пример использования CategoryDAO
```javascript
import { CategoryDAO } from './dao/CategoryDAO.js';
const categoryDAO = new CategoryDAO();
// Получить все категории с иерархией
const categories = await categoryDAO.findAllWithHierarchy();
// Получить дерево категорий
const tree = await categoryDAO.findTree();
// Получить дочерние категории
const children = await categoryDAO.findChildren(1);
```
## Добавление новых роутов
### 1. Создайте DAO класс
```javascript
// src/dao/ReviewDAO.js
import { BaseDAO } from './BaseDAO.js';
export class ReviewDAO extends BaseDAO {
constructor() {
super('reviews');
}
async findByProductId(productId) {
const query = `
SELECT r.*, u.first_name, u.last_name
FROM reviews r
JOIN users u ON r.user_id = u.id
WHERE r.product_id = $1 AND r.is_approved = TRUE
ORDER BY r.created_at DESC
`;
const result = await this.query(query, [productId]);
return result.rows;
}
}
```
### 2. Создайте схемы валидации
```javascript
// src/schemas/review.schema.js
export const reviewSchemas = {
createReview: {
body: {
type: 'object',
required: ['product_id', 'rating'],
properties: {
product_id: { type: 'integer' },
rating: { type: 'integer', minimum: 1, maximum: 5 },
title: { type: 'string' },
comment: { type: 'string' }
}
}
}
};
```
### 3. Создайте роуты
```javascript
// src/routes/reviews.routes.js
import { ReviewDAO } from '../dao/ReviewDAO.js';
import { reviewSchemas } from '../schemas/review.schema.js';
export async function reviewRoutes(fastify, options) {
const reviewDAO = new ReviewDAO();
fastify.get('/products/:productId/reviews', {
schema: {
tags: ['reviews'],
summary: 'Получить отзывы на товар'
}
}, async (request, reply) => {
const { productId } = request.params;
const reviews = await reviewDAO.findByProductId(productId);
return { success: true, data: reviews };
});
}
```
### 4. Зарегистрируйте роуты
```javascript
// src/server.js
import { reviewRoutes } from './routes/reviews.routes.js';
async function registerRoutes() {
await fastify.register(productRoutes);
await fastify.register(categoryRoutes);
await fastify.register(reviewRoutes); // Добавьте это
}
```
## Swagger документация
После запуска сервера откройте в браузере:
- http://localhost:3000/docs
Здесь вы найдете интерактивную документацию API с возможностью тестирования запросов.
## Обработка ошибок
Все ошибки автоматически обрабатываются и возвращаются в формате:
```json
{
"success": false,
"error": "Описание ошибки"
}
```
## Безопасность
- Все запросы валидируются через схемы
- Rate limiting ограничивает количество запросов
- Helmet защищает от распространенных уязвимостей
- CORS настроен для безопасных кросс-доменных запросов