Визуальный дизайнер сущностей и генератор бэкенда
Проектируйте модели данных через браузер — получайте готовый к запуску бэкенд за секунды.
Поддерживаются монолит и микросервисная архитектура для стеков C# + PostgreSQL и Node.js + MongoDB.
- О проекте
- Возможности
- Технологический стек
- Архитектура приложения
- Установка и запуск
- Структура проекта
- API приложения
- Генерация кода
- Настройка окружения
CodeForge — это full-stack веб-приложение, которое позволяет разработчикам быстро проектировать структуру данных через удобный визуальный интерфейс и мгновенно получать полностью рабочий backend-проект.
Вместо написания однотипного шаблонного кода — просто создайте сущности, настройте поля и связи, выберите стек и архитектуру, и скачайте готовый ZIP с проектом.
Создал сущности → Настроил поля → Нажал «Скачать» → Запустил docker-compose up
| Возможность | Описание |
|---|---|
| Визуальный редактор | Создание сущностей и полей через интуитивный UI без написания кода |
| Связи между сущностями | Поддержка One-to-Many, One-to-One, Many-to-Many |
| Мультистековая генерация | C# + PostgreSQL (ASP.NET Core + EF Core) и Node.js + MongoDB (Express + Mongoose) |
| Два типа архитектуры | Монолит и микросервисная архитектура |
| Визуальный предпросмотр | Интерактивная схема архитектуры прямо в Dashboard |
| Скачивание ZIP | Готовый к запуску проект в одном архиве |
| Swagger-документация | Авто-сгенерированная OpenAPI спецификация в каждом проекте |
При включении аутентификации в проекте генерируется:
- JWT Access + Refresh Tokens с настраиваемым временем жизни
- Ролевая модель (User, Admin, кастомные роли)
- Email-верификация при регистрации
- Сброс пароля через Email
- Идентификатор пользователя: email / username / оба
- Защита маршрутов по сущностям и HTTP-методам
- Отдельный auth-service в режиме микросервисов
- Каждой сущности назначается имя сервиса — сущности с одинаковым именем группируются
- Каждый сервис получает собственную базу данных
- Межсервисное взаимодействие через RabbitMQ (topic exchange, durable queues)
- Автоматический routing событий:
entity.created,entity.updated,entity.deleted - Генерируется
docker-compose.ymlсо всеми сервисами, базами и RabbitMQ
- Регистрация и вход с подтверждением Email
- Двухфакторная аутентификация (2FA) через Google Authenticator (TOTP)
- Профиль пользователя с аватаром и темной темой
- Admin Panel для управления пользователями и их проектами
- Тёмная / светлая тема с сохранением предпочтения
| Слой | Технология | Версия |
|---|---|---|
| Frontend | React + TypeScript + Vite | 18.2 / 5.2 / 5.0 |
| State | Redux Toolkit | 2.0 |
| HTTP | Axios | 1.6 |
| Backend | ASP.NET Core Web API | 9.0 |
| ORM | Entity Framework Core + Npgsql | 9.0 |
| База данных | PostgreSQL | 16 |
| Аутентификация | JWT Bearer + BCrypt.Net + Otp.NET | — |
| MailKit (Gmail SMTP) | 4.3 | |
| Документация | Swashbuckle / OpenAPI | 6.9 |
| QR-коды | QRCoder | 1.6 |
| Контейнеризация | Docker + Docker Compose | — |
ASP.NET Core 9.0 · Entity Framework Core 9.0 · Npgsql 9.0
Swashbuckle 6.9 · JWT Bearer · BCrypt.Net · HealthChecks
Docker (.NET 9 + port 8080) · docker-compose с PostgreSQL
Express 4 · Mongoose 8 · jsonwebtoken · bcryptjs · amqplib (RabbitMQ)
swagger-jsdoc + swagger-ui-express · express-validator · dotenv
Docker (node:18-alpine) · docker-compose с MongoDB (+ RabbitMQ для микросервисов)
┌─────────────────────────────────────────────────────────────────┐
│ БРАУЗЕР │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ React SPA (Vite + TypeScript + Redux Toolkit) │ │
│ │ │ │
│ │ Dashboard · Profile · Admin Panel │ │
│ │ Редактор сущностей · Предпросмотр архитектуры │ │
│ └───────────────────────┬──────────────────────────────┘ │
└───────────────────────────┼─────────────────────────────────────┘
│ HTTP/JSON (axios + cookie JWT)
▼
┌─────────────────────────────────────────────────────────────────┐
│ ASP.NET Core 9.0 Web API │
│ │
│ ┌──────────────┐ ┌─────────────┐ ┌───────────────────────┐ │
│ │ AuthController│ │ProjectsCtrl │ │ EntitiesController │ │
│ │ /api/auth │ │/api/projects│ │ /api/entities │ │
│ └──────────────┘ └──────┬──────┘ └───────────┬───────────┘ │
│ │ │ │
│ ┌─────────────────────────▼──────────────────────▼──────────┐ │
│ │ CodeGeneratorService │ │
│ │ CSharpPostgreSQLGenerator · NodeJSMongoDBGenerator │ │
│ │ CSharpMicroservicesGenerator · NodeMicroservicesGenerator │ │
│ └────────────────────────────────────────────────────────────┘ │
└───────────────────────────┬─────────────────────────────────────┘
│ EF Core
▼
┌─────────────────┐
│ PostgreSQL 16 │
│ (AppDbContext) │
└─────────────────┘
- Docker Desktop — для запуска через Compose
- .NET 9.0 SDK — для локальной разработки
- Node.js 18+ — для локальной разработки фронтенда
# Клонируйте репозиторий
git clone <url> CodeForge
cd CodeForge
# Запустите все сервисы
docker-compose up --build| Сервис | URL |
|---|---|
| 🌐 Frontend | http://localhost:5173 |
| ⚙️ Backend API | http://localhost:5123 |
| 📄 Swagger UI | http://localhost:5123/swagger |
cd CodeForgeAPI
# Создайте локальный файл конфигурации из шаблона
# Windows (PowerShell):
copy appsettings.example.json appsettings.json
# Linux / macOS:
# cp appsettings.example.json appsettings.json
# Откройте appsettings.json и укажите свои значения:
# - ConnectionStrings:DefaultConnection — PostgreSQL
# - EmailSettings:SenderEmail / Password — SMTP (для регистрации и сброса пароля)
# - JwtSettings:Secret — секретный ключ JWT (минимум 32 символа)
# Примените миграции
dotnet ef database update
# Запустите API
dotnet run
# → http://localhost:5123
# → Swagger: http://localhost:5123/swaggerВажно: файл
appsettings.jsonдобавлен в.gitignoreи не попадает в репозиторий — в git хранится толькоappsettings.example.jsonс placeholder-значениями. Каждый разработчик создаёт свой локальныйappsettings.jsonиз шаблона.
cd CodeForgeUI
# Скопируйте и настройте переменные окружения
cp .env.example .env
# VITE_API_URL=http://localhost:5123/api
# VITE_IMG_URL=http://localhost:5123
npm install
npm run dev
# → http://localhost:5173CodeForge/
├── 📁 CodeForgeAPI/ # Backend — ASP.NET Core 9.0
│ ├── Controllers/
│ │ ├── AuthController.cs # Аутентификация, 2FA, Email-верификация
│ │ ├── ProjectsController.cs # CRUD проектов, генерация ZIP
│ │ ├── EntitiesController.cs # CRUD сущностей
│ │ ├── FieldsController.cs # CRUD полей
│ │ ├── RelationshipsController.cs
│ │ └── UsersController.cs # Управление пользователями (Admin)
│ ├── Models/
│ │ ├── User.cs · Project.cs · Entity.cs
│ │ ├── Field.cs · Relationship.cs
│ │ └── AuthConfig.cs # JSON-конфиг аутентификации
│ ├── DTOs/ # Data Transfer Objects
│ ├── Services/
│ │ ├── CodeGeneratorService.cs # Оркестратор генерации
│ │ └── Generators/
│ │ ├── CSharpPostgreSQLGenerator.cs # C# монолит
│ │ ├── CSharpPostgreSQLMicroservicesGenerator.cs
│ │ ├── NodeJSMongoDBGenerator.cs # Node.js монолит
│ │ └── NodeJSMongoDBMicroservicesGenerator.cs
│ ├── Data/
│ │ └── ApplicationDbContext.cs
│ ├── Migrations/ # EF Core миграции
│ ├── Utilities/
│ │ └── NameValidator.cs
│ ├── appsettings.example.json # Шаблон конфигурации (коммитится в git)
│ ├── appsettings.json # Локальные секреты (создаётся вручную, в .gitignore)
│ ├── Dockerfile
│ └── Program.cs
│
├── 📁 CodeForgeUI/ # Frontend — React + TypeScript
│ ├── src/
│ │ ├── app/
│ │ │ ├── store.ts # Redux store
│ │ │ └── hooks.ts
│ │ ├── features/
│ │ │ ├── auth/authSlice.ts # Аутентификация
│ │ │ └── projects/projectsSlice.ts
│ │ ├── components/
│ │ │ ├── auth/ # Аутентификация
│ │ │ │ ├── Login.tsx
│ │ │ │ ├── VerificationModal.tsx
│ │ │ │ ├── ResetPasswordModal.tsx
│ │ │ │ ├── PersonalDataModal.tsx
│ │ │ │ ├── TotpModal.tsx
│ │ │ │ └── TwoFactorSetupModal.tsx
│ │ │ ├── dashboard/ # Рабочая область / проекты
│ │ │ │ ├── Dashboard.tsx # Главная страница
│ │ │ │ ├── ERDiagram.tsx # ER-диаграмма
│ │ │ │ ├── FAQWidget.tsx
│ │ │ │ ├── MicroservicesPreview.tsx # Схема микросервисов
│ │ │ │ ├── MonolithPreview.tsx # Схема монолита
│ │ │ │ ├── ProjectTemplatesModal.tsx # Шаблоны проектов
│ │ │ │ └── GenerationHistoryModal.tsx
│ │ │ ├── profile/
│ │ │ │ └── Profile.tsx # Профиль пользователя
│ │ │ ├── admin/
│ │ │ │ └── AdminPanel.tsx # Админ-панель
│ │ │ └── common/ # Общие компоненты
│ │ │ ├── ConfirmModal.tsx
│ │ │ ├── AchievementToast.tsx
│ │ │ └── SplashScreen.tsx
│ │ ├── context/
│ │ │ └── ConfirmContext.tsx
│ │ ├── data/
│ │ │ └── projectTemplates.ts # Шаблоны готовых проектов
│ │ ├── types/
│ │ │ ├── index.ts
│ │ │ └── auth.ts
│ │ └── utils/
│ │ ├── api.ts # Axios instance
│ │ ├── generationHistory.ts # История генераций
│ │ └── entityRelationships.ts
│ └── public/
│ ├── logo.svg
│ └── logo_white.svg
│
├── docker-compose.yml
└── README.md
Базовый URL: http://localhost:5123/api
| Метод | Маршрут | Описание |
|---|---|---|
POST |
/auth/register |
Регистрация с Email-подтверждением |
POST |
/auth/login |
Вход (возвращает JWT или требует 2FA) |
POST |
/auth/login-2fa |
Вход с TOTP-кодом |
POST |
/auth/logout |
Выход (инвалидация refresh-токена) |
GET |
/auth/me |
Данные текущего пользователя |
POST |
/auth/send-code |
Отправка кода верификации Email |
POST |
/auth/forgot-password |
Запрос сброса пароля |
POST |
/auth/reset-password |
Сброс пароля по коду |
POST |
/auth/2fa/setup |
Инициализация 2FA (генерация QR) |
POST |
/auth/2fa/enable |
Активация 2FA |
POST |
/auth/2fa/disable |
Отключение 2FA |
POST |
/auth/avatar |
Загрузка аватара |
| Метод | Маршрут | Описание |
|---|---|---|
GET |
/projects |
Список проектов пользователя |
GET |
/projects/{id} |
Детали проекта с сущностями |
POST |
/projects |
Создание проекта |
PUT |
/projects/{id} |
Обновление проекта / настройка auth |
DELETE |
/projects/{id} |
Удаление проекта |
POST |
/projects/{id}/generate |
Генерация ZIP-архива |
| Метод | Маршрут | Описание |
|---|---|---|
GET |
/entities/project/{projectId} |
Сущности проекта |
POST |
/entities/project/{projectId} |
Создание сущности |
PUT |
/entities/{id} |
Редактирование сущности |
DELETE |
/entities/{id} |
Удаление (FK → null, не каскад) |
POST |
/fields/entity/{entityId} |
Создание поля |
PUT |
/fields/{id} |
Редактирование поля |
DELETE |
/fields/{id} |
Удаление поля |
POST |
/relationships |
Создание связи |
DELETE |
/relationships/{id} |
Удаление связи |
MyProject/
├── Models/
│ ├── Product.cs # EF Core модель с аннотациями
│ └── Category.cs
├── Controllers/
│ ├── ProductController.cs # CRUD + фильтрация + пагинация
│ └── AuthController.cs # (если auth включён)
├── DTOs/
│ ├── ProductDto.cs # Request / Response DTO
│ └── AuthDtos.cs
├── Data/
│ └── ApplicationDbContext.cs
├── Services/
│ ├── IAuthService.cs + AuthService.cs
│ └── ITokenService.cs + TokenService.cs
├── Middleware/
│ └── ErrorHandlerMiddleware.cs
├── Properties/
│ └── launchSettings.json
├── appsettings.json # JWT, ConnectionStrings
├── Program.cs # DI, Swagger, Auth, EF
├── MyProject.csproj # .NET 9.0 + NuGet-пакеты
├── Dockerfile # aspnet:9.0 · EXPOSE 8080
├── docker-compose.yml # API + PostgreSQL
└── README.md
MyProject/
├── src/
│ ├── models/
│ │ ├── Product.js # Mongoose-схема с валидацией
│ │ └── User.js # (если auth включён)
│ ├── controllers/
│ │ ├── productController.js
│ │ └── authController.js
│ ├── routes/
│ │ ├── productRoutes.js # Swagger JSDoc-аннотации
│ │ └── authRoutes.js
│ ├── middleware/
│ │ ├── authMiddleware.js # JWT verify
│ │ ├── roleMiddleware.js # Ролевая защита
│ │ ├── errorHandler.js
│ │ └── notFound.js
│ ├── config/
│ │ ├── database.js
│ │ └── swagger.js
│ └── app.js
├── server.js
├── package.json # Express, Mongoose, JWT, Swagger
├── .env.example
├── Dockerfile
├── docker-compose.yml
└── README.md
MyProject/
├── services/
│ ├── product-service/ # Сущности группы "product"
│ │ ├── src/
│ │ │ ├── models/
│ │ │ ├── controllers/
│ │ │ ├── routes/
│ │ │ ├── messaging/
│ │ │ │ ├── publisher.js # Публикация событий в RabbitMQ
│ │ │ │ └── subscriber.js # Подписка на события других сервисов
│ │ │ ├── config/
│ │ │ │ ├── database.js
│ │ │ │ └── swagger.js
│ │ │ └── app.js
│ │ ├── server.js
│ │ ├── package.json
│ │ └── Dockerfile
│ │
│ ├── order-service/ # Другая группа сервисов
│ │ └── ...
│ │
│ └── auth-service/ # Если включена аутентификация
│ ├── src/
│ │ ├── models/User.js
│ │ ├── controllers/authController.js
│ │ ├── routes/authRoutes.js
│ │ ├── messaging/
│ │ │ ├── publisher.js
│ │ │ └── subscriber.js
│ │ └── app.js
│ ├── server.js
│ ├── package.json # Включает swagger-jsdoc
│ └── Dockerfile
│
├── docker-compose.yml # Все сервисы + MongoDB×N + RabbitMQ
└── README.md
| Тип | C# | Node.js / MongoDB |
|---|---|---|
String |
string |
String |
Integer |
int |
Number |
Long |
long |
Number |
Float |
float |
Number |
Decimal |
decimal |
Number (mongoose) |
Boolean |
bool |
Boolean |
DateTime |
DateTime |
Date |
Text |
string [MaxLength(5000)] |
String |
Guid |
Guid |
String (UUID) |
Relationship |
FK + Navigation | ObjectId (ref) |
Файл appsettings.json не хранится в репозитории. Скопируйте шаблон и заполните своими данными:
cd CodeForgeAPI
copy appsettings.example.json appsettings.json # Windows
# cp appsettings.example.json appsettings.json # Linux / macOSПример содержимого (appsettings.example.json):
{
"ConnectionStrings": {
"DefaultConnection": "Host=localhost;Database=codeforge;Username=postgres;Password=YOUR_DB_PASSWORD"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"EmailSettings": {
"MailServer": "smtp.gmail.com",
"MailPort": 587,
"UseSsl": true,
"UseStartTls": true,
"SenderName": "CodeForge",
"SenderEmail": "your-email@gmail.com",
"Password": "your-app-password"
},
"JwtSettings": {
"Secret": "YourSuperSecretKeyThatIsAtLeast32CharactersLong!@#$%",
"Issuer": "CodeForgeAPI",
"Audience": "CodeForgeUI",
"ExpirationMinutes": 1440
}
}| Параметр | Описание |
|---|---|
ConnectionStrings:DefaultConnection |
Строка подключения к PostgreSQL |
EmailSettings:SenderEmail |
Email отправителя (Gmail и др.) |
EmailSettings:Password |
App Password для SMTP (не обычный пароль аккаунта) |
JwtSettings:Secret |
Секрет для подписи JWT-токенов (≥ 32 символов) |
Для Gmail создайте App Password в настройках Google-аккаунта с включённой 2FA.
VITE_API_URL=http://localhost:5123/api
VITE_IMG_URL=http://localhost:5123Users ──────────< Projects ──────────< Entities ──────────< Fields
id id id id
email userId projectId entityId
passwordHash name name name
role targetStack description dataType
firstName architectureType serviceName isRequired
lastName authConfig displayOrder isUnique
twoFactorEnabled createdAt createdAt relatedEntityId
avatarUrl relationshipType
isDarkMode displayOrder
Relationships
id · sourceEntityId · targetEntityId
relationshipType · sourceFieldName
cd CodeForgeAPI
dotnet ef migrations add <Название>
dotnet ef database update