Skip to content

woookle/code-forge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CodeForge

CodeForge

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

ASP.NET Core React TypeScript PostgreSQL Docker Status

Проектируйте модели данных через браузер — получайте готовый к запуску бэкенд за секунды.
Поддерживаются монолит и микросервисная архитектура для стеков 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

Слой Технология Версия
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
Email MailKit (Gmail SMTP) 4.3
Документация Swashbuckle / OpenAPI 6.9
QR-коды QRCoder 1.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
🌐 Frontend http://localhost:5173
⚙️ Backend API http://localhost:5123
📄 Swagger UI http://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
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)

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

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

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

Frontend — .env

VITE_API_URL=http://localhost:5123/api
VITE_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

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors