Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

6 Commits

Repository files navigation

CodeForge

CodeForge

Визуальный дизайнер сущностей и генератор бэкенда

ASP.NET CoreReactTypeScriptPostgreSQLDockerStatus

Проектируйте модели данных через браузер — получайте готовый к запуску бэкенд за секунды.
Поддерживаются монолит и микросервисная архитектура для стеков C# + PostgreSQL и Node.js + MongoDB.


📋 Содержание


🧩 О проекте

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

👤 Платформа CodeForge

  • Регистрация и вход с подтверждением Email
  • Двухфакторная аутентификация (2FA) через Google Authenticator (TOTP)
  • Профиль пользователя с аватаром и темной темой
  • Admin Panel для управления пользователями и их проектами
  • Тёмная / светлая тема с сохранением предпочтения

🛠 Технологический стек

Платформа CodeForge

СлойТехнологияВерсия
FrontendReact + TypeScript + Vite18.2 / 5.2 / 5.0
StateRedux Toolkit2.0
HTTPAxios1.6
BackendASP.NET Core Web API9.0
ORMEntity Framework Core + Npgsql9.0
База данныхPostgreSQL16
АутентификацияJWT Bearer + BCrypt.Net + Otp.NET
EmailMailKit (Gmail SMTP)4.3
ДокументацияSwashbuckle / OpenAPI6.9
QR-кодыQRCoder1.6
КонтейнеризацияDocker + Docker Compose

Что генерируется для C# + PostgreSQL

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

Что генерируется для Node.js + MongoDB

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+ — для локальной разработки фронтенда

⚡ Вариант 1: Docker Compose (рекомендуется)

# Клонируйте репозиторий
git clone <url> CodeForge
cd CodeForge
# Запустите все сервисы
docker-compose up --build
СервисURL
🌐 Frontendhttp://localhost:5173
⚙️ Backend APIhttp://localhost:5123
📄 Swagger UIhttp://localhost:5123/swagger

🔧 Вариант 2: Локальная разработка

1. Backend

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 из шаблона.

2. Frontend

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:5173

📂 Структура проекта

CodeForge/
├── 📁 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

📡 API приложения

Базовый 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}Удаление связи

⚙️ Генерация кода

C# + PostgreSQL — Монолит

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

Node.js + MongoDB — Монолит

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
StringstringString
IntegerintNumber
LonglongNumber
FloatfloatNumber
DecimaldecimalNumber (mongoose)
BooleanboolBoolean
DateTimeDateTimeDate
Textstring [MaxLength(5000)]String
GuidGuidString (UUID)
RelationshipFK + NavigationObjectId (ref)

🔑 Настройка окружения

Backend — appsettings.json

Файл 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:SenderEmailEmail отправителя (Gmail и др.)
EmailSettings:PasswordApp Password для SMTP (не обычный пароль аккаунта)
JwtSettings:SecretСекрет для подписи JWT-токенов (≥ 32 символов)

Для Gmail создайте App Password в настройках Google-аккаунта с включённой 2FA.

Frontend — .env

VITE_API_URL=http://localhost:5123/apiVITE_IMG_URL=http://localhost:5123

🗄 База данных

Схема (основные таблицы)

Users ──────────< 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

fern

хорошего дня 😊

About

CodeForge - веб-приложение для генерации шаблонного кода бэкенда на основе визуального проектирования сущностей данных. Проектируйте связи, настраивайте поля и получайте готовый к запуску проект за секунды

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages