Add complete CKE Project implementation with news management system

This commit is contained in:
albivkt
2025-07-13 01:34:11 +03:00
parent c9317555ca
commit a84810c6b9
32 changed files with 8901 additions and 811 deletions

269
DATABASE_SETUP.md Normal file
View 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 и является собственностью компании.