Add complete CKE Project implementation with news management system
This commit is contained in:
269
DATABASE_SETUP.md
Normal file
269
DATABASE_SETUP.md
Normal file
@ -0,0 +1,269 @@
|
||||
# Настройка базы данных и системы управления новостями
|
||||
|
||||
## Обзор системы
|
||||
|
||||
Система управления новостями для 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 и является собственностью компании.
|
Reference in New Issue
Block a user