269 lines
7.5 KiB
Markdown
269 lines
7.5 KiB
Markdown
# Настройка базы данных и системы управления новостями
|
||
|
||
## Обзор системы
|
||
|
||
Система управления новостями для ckeproekt.ru включает:
|
||
|
||
- **База данных**: PostgreSQL с Prisma ORM
|
||
- **API**: REST API и GraphQL endpoints
|
||
- **Админ-панель**: Полнофункциональная панель управления
|
||
- **Безопасность**: JWT аутентификация и авторизация
|
||
- **Функциональность**: CRUD операции, пагинация, поиск, фильтрация
|
||
|
||
## Требования
|
||
|
||
- Node.js 18+
|
||
- PostgreSQL 12+
|
||
- npm или yarn
|
||
|
||
## Установка и настройка
|
||
|
||
### 1. Установка зависимостей
|
||
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
### 2. Настройка базы данных
|
||
|
||
1. Создайте PostgreSQL базу данных:
|
||
```sql
|
||
CREATE DATABASE ckeproject;
|
||
```
|
||
|
||
2. Обновите файл `.env` с вашими данными:
|
||
```env
|
||
DATABASE_URL="postgresql://username:password@localhost:5432/ckeproject?schema=public"
|
||
NEXTAUTH_SECRET="your-secret-key-here"
|
||
NEXTAUTH_URL="http://localhost:3000"
|
||
```
|
||
|
||
### 3. Инициализация Prisma
|
||
|
||
```bash
|
||
# Генерация Prisma Client
|
||
npm run db:generate
|
||
|
||
# Применение схемы к базе данных
|
||
npm run db:push
|
||
|
||
# Заполнение базы данных начальными данными
|
||
npm run db:seed
|
||
```
|
||
|
||
### 4. Запуск приложения
|
||
|
||
```bash
|
||
npm run dev
|
||
```
|
||
|
||
## Структура базы данных
|
||
|
||
### Таблица `users`
|
||
- `id` - Уникальный идентификатор
|
||
- `email` - Email (уникальный)
|
||
- `username` - Имя пользователя (уникальное)
|
||
- `password` - Хешированный пароль
|
||
- `role` - Роль (USER, ADMIN, EDITOR)
|
||
- `name` - Полное имя
|
||
- `avatar` - URL аватара
|
||
- `createdAt` - Дата создания
|
||
- `updatedAt` - Дата обновления
|
||
|
||
### Таблица `news`
|
||
- `id` - Уникальный идентификатор
|
||
- `title` - Заголовок новости
|
||
- `slug` - URL-слаг (уникальный)
|
||
- `summary` - Краткое описание
|
||
- `content` - Полное содержание
|
||
- `category` - Категория новости
|
||
- `imageUrl` - URL изображения
|
||
- `featured` - Рекомендуемая новость
|
||
- `published` - Статус публикации
|
||
- `publishedAt` - Дата публикации
|
||
- `authorId` - ID автора
|
||
- `views` - Количество просмотров
|
||
- `likes` - Количество лайков
|
||
- `tags` - Массив тегов
|
||
- `createdAt` - Дата создания
|
||
- `updatedAt` - Дата обновления
|
||
|
||
### Таблица `categories`
|
||
- `id` - Уникальный идентификатор
|
||
- `name` - Название категории
|
||
- `slug` - URL-слаг (уникальный)
|
||
- `description` - Описание
|
||
- `color` - Цвет категории
|
||
- `createdAt` - Дата создания
|
||
- `updatedAt` - Дата обновления
|
||
|
||
## API Endpoints
|
||
|
||
### REST API
|
||
|
||
#### Новости
|
||
- `GET /api/news` - Получить список новостей
|
||
- `POST /api/news` - Создать новость
|
||
- `GET /api/news/[id]` - Получить новость по ID
|
||
- `PUT /api/news/[id]` - Обновить новость
|
||
- `DELETE /api/news/[id]` - Удалить новость
|
||
|
||
#### Категории
|
||
- `GET /api/categories` - Получить список категорий
|
||
- `POST /api/categories` - Создать категорию
|
||
- `PUT /api/categories/[id]` - Обновить категорию
|
||
- `DELETE /api/categories/[id]` - Удалить категорию
|
||
|
||
#### Аутентификация
|
||
- `POST /api/auth/login` - Вход в систему
|
||
- `POST /api/auth/register` - Регистрация
|
||
- `POST /api/auth/logout` - Выход из системы
|
||
|
||
### GraphQL API
|
||
|
||
GraphQL endpoint доступен по адресу `/api/graphql`
|
||
|
||
#### Примеры запросов
|
||
|
||
```graphql
|
||
# Получить список новостей
|
||
query {
|
||
newsList(page: 1, limit: 10, category: "company") {
|
||
news {
|
||
id
|
||
title
|
||
summary
|
||
publishedAt
|
||
author {
|
||
name
|
||
}
|
||
}
|
||
total
|
||
totalPages
|
||
}
|
||
}
|
||
|
||
# Создать новость
|
||
mutation {
|
||
createNews(input: {
|
||
title: "Новая новость"
|
||
slug: "novaya-novost"
|
||
summary: "Краткое описание"
|
||
content: "Полное содержание"
|
||
category: "company"
|
||
featured: true
|
||
}) {
|
||
id
|
||
title
|
||
slug
|
||
}
|
||
}
|
||
```
|
||
|
||
## Админ-панель
|
||
|
||
Админ-панель доступна по адресу `/admin`
|
||
|
||
### Пользователи по умолчанию
|
||
|
||
После выполнения `npm run db:seed` будут созданы:
|
||
|
||
1. **Администратор**
|
||
- Email: `admin@ckeproekt.ru`
|
||
- Пароль: `admin123`
|
||
- Роль: ADMIN
|
||
|
||
2. **Редактор**
|
||
- Email: `editor@ckeproekt.ru`
|
||
- Пароль: `editor123`
|
||
- Роль: EDITOR
|
||
|
||
### Функциональность админ-панели
|
||
|
||
- ✅ Создание, редактирование и удаление новостей
|
||
- ✅ Управление категориями
|
||
- ✅ Загрузка изображений
|
||
- ✅ Визуальный редактор содержимого
|
||
- ✅ Система тегов
|
||
- ✅ Управление публикацией
|
||
- ✅ Поиск и фильтрация
|
||
- ✅ Пагинация
|
||
- ✅ Статистика
|
||
|
||
## Безопасность
|
||
|
||
### Аутентификация
|
||
- JWT токены для авторизации
|
||
- Хеширование паролей с bcrypt
|
||
- Защищенные API endpoints
|
||
|
||
### Авторизация
|
||
- Роли пользователей (USER, ADMIN, EDITOR)
|
||
- Проверка прав доступа на уровне API
|
||
- Middleware для защиты маршрутов
|
||
|
||
### Валидация
|
||
- Проверка входных данных
|
||
- Санитизация контента
|
||
- Защита от XSS и SQL инъекций
|
||
|
||
## Развертывание в продакшн
|
||
|
||
### 1. Настройка переменных окружения
|
||
|
||
```env
|
||
DATABASE_URL="postgresql://user:password@host:5432/database"
|
||
NEXTAUTH_SECRET="strong-secret-key"
|
||
NEXTAUTH_URL="https://your-domain.com"
|
||
```
|
||
|
||
### 2. Сборка приложения
|
||
|
||
```bash
|
||
npm run build
|
||
```
|
||
|
||
### 3. Миграция базы данных
|
||
|
||
```bash
|
||
npm run db:migrate
|
||
npm run db:seed
|
||
```
|
||
|
||
### 4. Запуск с PM2
|
||
|
||
```bash
|
||
npm run pm2:start
|
||
```
|
||
|
||
## Мониторинг и обслуживание
|
||
|
||
### Prisma Studio
|
||
Для просмотра и редактирования данных:
|
||
```bash
|
||
npm run db:studio
|
||
```
|
||
|
||
### Логи
|
||
Логи доступны через PM2:
|
||
```bash
|
||
pm2 logs
|
||
```
|
||
|
||
### Резервное копирование
|
||
Регулярно создавайте резервные копии базы данных:
|
||
```bash
|
||
pg_dump ckeproject > backup.sql
|
||
```
|
||
|
||
## Миграция с существующей системы
|
||
|
||
Скрипт `scripts/init-database.ts` автоматически мигрирует данные из `lib/news-data.ts` в базу данных.
|
||
|
||
## Поддержка
|
||
|
||
Для получения поддержки или сообщения об ошибках обращайтесь к разработчикам системы.
|
||
|
||
## Лицензия
|
||
|
||
Система разработана специально для ckeproekt.ru и является собственностью компании. |