Files
ckeproekt/DATABASE_SETUP.md

269 lines
7.5 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.

# Настройка базы данных и системы управления новостями
## Обзор системы
Система управления новостями для 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 и является собственностью компании.