{"id":51038268,"url":"https://github.com/woookle/code-forge","last_synced_at":"2026-06-22T08:32:25.175Z","repository":{"id":343459665,"uuid":"1154137019","full_name":"woookle/code-forge","owner":"woookle","description":"CodeForge - веб-приложение для генерации шаблонного кода бэкенда на основе визуального проектирования сущностей данных. Проектируйте связи, настраивайте поля и получайте готовый к запуску проект за секунды","archived":false,"fork":false,"pushed_at":"2026-06-21T01:32:50.000Z","size":3803,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-21T03:14:05.982Z","etag":null,"topics":["asp-net","csharp","mongodb","nodejs","postgresql","react-tsx","react-vite-typescript","vite-ts"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/woookle.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-10T03:46:13.000Z","updated_at":"2026-06-21T01:32:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/woookle/code-forge","commit_stats":null,"previous_names":["woookle/code-forge"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/woookle/code-forge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/woookle%2Fcode-forge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/woookle%2Fcode-forge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/woookle%2Fcode-forge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/woookle%2Fcode-forge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/woookle","download_url":"https://codeload.github.com/woookle/code-forge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/woookle%2Fcode-forge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34641636,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asp-net","csharp","mongodb","nodejs","postgresql","react-tsx","react-vite-typescript","vite-ts"],"created_at":"2026-06-22T08:32:23.280Z","updated_at":"2026-06-22T08:32:25.166Z","avatar_url":"https://github.com/woookle.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"./CodeForgeUI/public/logo_white.svg\" alt=\"CodeForge\" width=\"120\" /\u003e\n\n# CodeForge\n\n**Визуальный дизайнер сущностей и генератор бэкенда**\n\n[![ASP.NET Core](https://img.shields.io/badge/ASP.NET_Core-9.0-512BD4?style=for-the-badge\u0026logo=dotnet\u0026logoColor=white)](https://dotnet.microsoft.com/)\n[![React](https://img.shields.io/badge/React-18.2-61DAFB?style=for-the-badge\u0026logo=react\u0026logoColor=black)](https://react.dev/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.2-3178C6?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-336791?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white)](https://www.postgresql.org/)\n[![Docker](https://img.shields.io/badge/Docker-Compose-2496ED?style=for-the-badge\u0026logo=docker\u0026logoColor=white)](https://www.docker.com/)\n[![Status](https://img.shields.io/badge/Статус-Активен-22c55e?style=for-the-badge)](.)\n\n\u003e Проектируйте модели данных через браузер — получайте готовый к запуску бэкенд за секунды.  \n\u003e Поддерживаются **монолит** и **микросервисная** архитектура для стеков **C# + PostgreSQL** и **Node.js + MongoDB**.\n\n\u003c/div\u003e\n\n---\n\n## 📋 Содержание\n\n- [О проекте](#-о-проекте)\n- [Возможности](#-возможности)\n- [Технологический стек](#-технологический-стек)\n- [Архитектура приложения](#-архитектура-приложения)\n- [Установка и запуск](#-установка-и-запуск)\n- [Структура проекта](#-структура-проекта)\n- [API приложения](#-api-приложения)\n- [Генерация кода](#-генерация-кода)\n- [Настройка окружения](#-настройка-окружения)\n\n---\n\n## 🧩 О проекте\n\n**CodeForge** — это full-stack веб-приложение, которое позволяет разработчикам быстро проектировать структуру данных через удобный визуальный интерфейс и мгновенно получать полностью рабочий backend-проект.\n\nВместо написания однотипного шаблонного кода — просто создайте сущности, настройте поля и связи, выберите стек и архитектуру, и скачайте готовый ZIP с проектом.\n\n```\nСоздал сущности → Настроил поля → Нажал «Скачать» → Запустил docker-compose up\n```\n\n---\n\n## ✨ Возможности\n\n### 🏗 Проектирование и генерация\n\n| Возможность | Описание |\n|---|---|\n| **Визуальный редактор** | Создание сущностей и полей через интуитивный UI без написания кода |\n| **Связи между сущностями** | Поддержка *One-to-Many*, *One-to-One*, *Many-to-Many* |\n| **Мультистековая генерация** | C# + PostgreSQL (ASP.NET Core + EF Core) и Node.js + MongoDB (Express + Mongoose) |\n| **Два типа архитектуры** | Монолит и микросервисная архитектура |\n| **Визуальный предпросмотр** | Интерактивная схема архитектуры прямо в Dashboard |\n| **Скачивание ZIP** | Готовый к запуску проект в одном архиве |\n| **Swagger-документация** | Авто-сгенерированная OpenAPI спецификация в каждом проекте |\n\n### 🔐 Аутентификация (генерируемая)\n\nПри включении аутентификации в проекте генерируется:\n\n- **JWT Access + Refresh Tokens** с настраиваемым временем жизни\n- **Ролевая модель** (User, Admin, кастомные роли)\n- **Email-верификация** при регистрации\n- **Сброс пароля** через Email\n- **Идентификатор пользователя**: email / username / оба\n- **Защита маршрутов** по сущностям и HTTP-методам\n- **Отдельный auth-service** в режиме микросервисов\n\n### 🔀 Микросервисная архитектура\n\n- Каждой сущности назначается **имя сервиса** — сущности с одинаковым именем группируются\n- Каждый сервис получает **собственную базу данных**\n- Межсервисное взаимодействие через **RabbitMQ** (topic exchange, durable queues)\n- **Автоматический routing** событий: `entity.created`, `entity.updated`, `entity.deleted`\n- Генерируется `docker-compose.yml` со всеми сервисами, базами и RabbitMQ\n\n### 👤 Платформа CodeForge\n\n- **Регистрация и вход** с подтверждением Email\n- **Двухфакторная аутентификация (2FA)** через Google Authenticator (TOTP)\n- **Профиль пользователя** с аватаром и темной темой\n- **Admin Panel** для управления пользователями и их проектами\n- **Тёмная / светлая тема** с сохранением предпочтения\n\n---\n\n## 🛠 Технологический стек\n\n### Платформа CodeForge\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003cth\u003eСлой\u003c/th\u003e\n\u003cth\u003eТехнология\u003c/th\u003e\n\u003cth\u003eВерсия\u003c/th\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eFrontend\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eReact + TypeScript + Vite\u003c/td\u003e\n\u003ctd\u003e18.2 / 5.2 / 5.0\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eState\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eRedux Toolkit\u003c/td\u003e\n\u003ctd\u003e2.0\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eHTTP\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eAxios\u003c/td\u003e\n\u003ctd\u003e1.6\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eBackend\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eASP.NET Core Web API\u003c/td\u003e\n\u003ctd\u003e9.0\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eORM\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eEntity Framework Core + Npgsql\u003c/td\u003e\n\u003ctd\u003e9.0\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eБаза данных\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003ePostgreSQL\u003c/td\u003e\n\u003ctd\u003e16\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eАутентификация\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eJWT Bearer + BCrypt.Net + Otp.NET\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eEmail\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eMailKit (Gmail SMTP)\u003c/td\u003e\n\u003ctd\u003e4.3\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eДокументация\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eSwashbuckle / OpenAPI\u003c/td\u003e\n\u003ctd\u003e6.9\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eQR-коды\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eQRCoder\u003c/td\u003e\n\u003ctd\u003e1.6\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eКонтейнеризация\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eDocker + Docker Compose\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n### Что генерируется для C# + PostgreSQL\n\n```\nASP.NET Core 9.0 · Entity Framework Core 9.0 · Npgsql 9.0\nSwashbuckle 6.9 · JWT Bearer · BCrypt.Net · HealthChecks\nDocker (.NET 9 + port 8080) · docker-compose с PostgreSQL\n```\n\n### Что генерируется для Node.js + MongoDB\n\n```\nExpress 4 · Mongoose 8 · jsonwebtoken · bcryptjs · amqplib (RabbitMQ)\nswagger-jsdoc + swagger-ui-express · express-validator · dotenv\nDocker (node:18-alpine) · docker-compose с MongoDB (+ RabbitMQ для микросервисов)\n```\n\n---\n\n## 🏛 Архитектура приложения\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│                        БРАУЗЕР                                  │\n│                                                                 │\n│   ┌──────────────────────────────────────────────────────┐     │\n│   │  React SPA  (Vite + TypeScript + Redux Toolkit)       │     │\n│   │                                                       │     │\n│   │  Dashboard · Profile · Admin Panel                    │     │\n│   │  Редактор сущностей · Предпросмотр архитектуры        │     │\n│   └───────────────────────┬──────────────────────────────┘     │\n└───────────────────────────┼─────────────────────────────────────┘\n                            │ HTTP/JSON (axios + cookie JWT)\n                            ▼\n┌─────────────────────────────────────────────────────────────────┐\n│               ASP.NET Core 9.0 Web API                         │\n│                                                                 │\n│  ┌──────────────┐  ┌─────────────┐  ┌───────────────────────┐  │\n│  │  AuthController│  │ProjectsCtrl │  │   EntitiesController  │  │\n│  │  /api/auth   │  │/api/projects│  │   /api/entities       │  │\n│  └──────────────┘  └──────┬──────┘  └───────────┬───────────┘  │\n│                            │                      │             │\n│  ┌─────────────────────────▼──────────────────────▼──────────┐  │\n│  │            CodeGeneratorService                            │  │\n│  │   CSharpPostgreSQLGenerator  · NodeJSMongoDBGenerator      │  │\n│  │   CSharpMicroservicesGenerator · NodeMicroservicesGenerator │  │\n│  └────────────────────────────────────────────────────────────┘  │\n└───────────────────────────┬─────────────────────────────────────┘\n                            │ EF Core\n                            ▼\n                   ┌─────────────────┐\n                   │   PostgreSQL 16  │\n                   │  (AppDbContext)  │\n                   └─────────────────┘\n```\n\n---\n\n## 🚀 Установка и запуск\n\n### Предварительные требования\n\n- [Docker Desktop](https://www.docker.com/products/docker-desktop/) — для запуска через Compose\n- [.NET 9.0 SDK](https://dotnet.microsoft.com/download/dotnet/9.0) — для локальной разработки\n- [Node.js 18+](https://nodejs.org/) — для локальной разработки фронтенда\n\n---\n\n### ⚡ Вариант 1: Docker Compose (рекомендуется)\n\n```bash\n# Клонируйте репозиторий\ngit clone \u003curl\u003e CodeForge\ncd CodeForge\n\n# Запустите все сервисы\ndocker-compose up --build\n```\n\n| Сервис | URL |\n|---|---|\n| 🌐 Frontend | http://localhost:5173 |\n| ⚙️ Backend API | http://localhost:5123 |\n| 📄 Swagger UI | http://localhost:5123/swagger |\n\n---\n\n### 🔧 Вариант 2: Локальная разработка\n\n#### 1. Backend\n\n```bash\ncd CodeForgeAPI\n\n# Создайте локальный файл конфигурации из шаблона\n# Windows (PowerShell):\ncopy appsettings.example.json appsettings.json\n# Linux / macOS:\n# cp appsettings.example.json appsettings.json\n\n# Откройте appsettings.json и укажите свои значения:\n# - ConnectionStrings:DefaultConnection — PostgreSQL\n# - EmailSettings:SenderEmail / Password — SMTP (для регистрации и сброса пароля)\n# - JwtSettings:Secret — секретный ключ JWT (минимум 32 символа)\n\n# Примените миграции\ndotnet ef database update\n\n# Запустите API\ndotnet run\n# → http://localhost:5123\n# → Swagger: http://localhost:5123/swagger\n```\n\n\u003e **Важно:** файл `appsettings.json` добавлен в `.gitignore` и **не попадает в репозиторий** — в git хранится только `appsettings.example.json` с placeholder-значениями. Каждый разработчик создаёт свой локальный `appsettings.json` из шаблона.\n\n#### 2. Frontend\n\n```bash\ncd CodeForgeUI\n\n# Скопируйте и настройте переменные окружения\ncp .env.example .env\n# VITE_API_URL=http://localhost:5123/api\n# VITE_IMG_URL=http://localhost:5123\n\nnpm install\nnpm run dev\n# → http://localhost:5173\n```\n\n---\n\n## 📂 Структура проекта\n\n```\nCodeForge/\n├── 📁 CodeForgeAPI/                  # Backend — ASP.NET Core 9.0\n│   ├── Controllers/\n│   │   ├── AuthController.cs         # Аутентификация, 2FA, Email-верификация\n│   │   ├── ProjectsController.cs     # CRUD проектов, генерация ZIP\n│   │   ├── EntitiesController.cs     # CRUD сущностей\n│   │   ├── FieldsController.cs       # CRUD полей\n│   │   ├── RelationshipsController.cs\n│   │   └── UsersController.cs        # Управление пользователями (Admin)\n│   ├── Models/\n│   │   ├── User.cs · Project.cs · Entity.cs\n│   │   ├── Field.cs · Relationship.cs\n│   │   └── AuthConfig.cs             # JSON-конфиг аутентификации\n│   ├── DTOs/                         # Data Transfer Objects\n│   ├── Services/\n│   │   ├── CodeGeneratorService.cs   # Оркестратор генерации\n│   │   └── Generators/\n│   │       ├── CSharpPostgreSQLGenerator.cs          # C# монолит\n│   │       ├── CSharpPostgreSQLMicroservicesGenerator.cs\n│   │       ├── NodeJSMongoDBGenerator.cs             # Node.js монолит\n│   │       └── NodeJSMongoDBMicroservicesGenerator.cs\n│   ├── Data/\n│   │   └── ApplicationDbContext.cs\n│   ├── Migrations/                   # EF Core миграции\n│   ├── Utilities/\n│   │   └── NameValidator.cs\n│   ├── appsettings.example.json      # Шаблон конфигурации (коммитится в git)\n│   ├── appsettings.json              # Локальные секреты (создаётся вручную, в .gitignore)\n│   ├── Dockerfile\n│   └── Program.cs\n│\n├── 📁 CodeForgeUI/                   # Frontend — React + TypeScript\n│   ├── src/\n│   │   ├── app/\n│   │   │   ├── store.ts              # Redux store\n│   │   │   └── hooks.ts\n│   │   ├── features/\n│   │   │   ├── auth/authSlice.ts     # Аутентификация\n│   │   │   └── projects/projectsSlice.ts\n│   │   ├── components/\n│   │   │   ├── auth/                 # Аутентификация\n│   │   │   │   ├── Login.tsx\n│   │   │   │   ├── VerificationModal.tsx\n│   │   │   │   ├── ResetPasswordModal.tsx\n│   │   │   │   ├── PersonalDataModal.tsx\n│   │   │   │   ├── TotpModal.tsx\n│   │   │   │   └── TwoFactorSetupModal.tsx\n│   │   │   ├── dashboard/            # Рабочая область / проекты\n│   │   │   │   ├── Dashboard.tsx     # Главная страница\n│   │   │   │   ├── ERDiagram.tsx     # ER-диаграмма\n│   │   │   │   ├── FAQWidget.tsx\n│   │   │   │   ├── MicroservicesPreview.tsx  # Схема микросервисов\n│   │   │   │   ├── MonolithPreview.tsx       # Схема монолита\n│   │   │   │   ├── ProjectTemplatesModal.tsx # Шаблоны проектов\n│   │   │   │   └── GenerationHistoryModal.tsx\n│   │   │   ├── profile/\n│   │   │   │   └── Profile.tsx       # Профиль пользователя\n│   │   │   ├── admin/\n│   │   │   │   └── AdminPanel.tsx    # Админ-панель\n│   │   │   └── common/               # Общие компоненты\n│   │   │       ├── ConfirmModal.tsx\n│   │   │       ├── AchievementToast.tsx\n│   │   │       └── SplashScreen.tsx\n│   │   ├── context/\n│   │   │   └── ConfirmContext.tsx\n│   │   ├── data/\n│   │   │   └── projectTemplates.ts   # Шаблоны готовых проектов\n│   │   ├── types/\n│   │   │   ├── index.ts\n│   │   │   └── auth.ts\n│   │   └── utils/\n│   │       ├── api.ts                # Axios instance\n│   │       ├── generationHistory.ts  # История генераций\n│   │       └── entityRelationships.ts\n│   └── public/\n│       ├── logo.svg\n│       └── logo_white.svg\n│\n├── docker-compose.yml\n└── README.md\n```\n\n---\n\n## 📡 API приложения\n\nБазовый URL: `http://localhost:5123/api`\n\n### Аутентификация\n\n| Метод | Маршрут | Описание |\n|---|---|---|\n| `POST` | `/auth/register` | Регистрация с Email-подтверждением |\n| `POST` | `/auth/login` | Вход (возвращает JWT или требует 2FA) |\n| `POST` | `/auth/login-2fa` | Вход с TOTP-кодом |\n| `POST` | `/auth/logout` | Выход (инвалидация refresh-токена) |\n| `GET`  | `/auth/me` | Данные текущего пользователя |\n| `POST` | `/auth/send-code` | Отправка кода верификации Email |\n| `POST` | `/auth/forgot-password` | Запрос сброса пароля |\n| `POST` | `/auth/reset-password` | Сброс пароля по коду |\n| `POST` | `/auth/2fa/setup` | Инициализация 2FA (генерация QR) |\n| `POST` | `/auth/2fa/enable` | Активация 2FA |\n| `POST` | `/auth/2fa/disable` | Отключение 2FA |\n| `POST` | `/auth/avatar` | Загрузка аватара |\n\n### Проекты\n\n| Метод | Маршрут | Описание |\n|---|---|---|\n| `GET`    | `/projects` | Список проектов пользователя |\n| `GET`    | `/projects/{id}` | Детали проекта с сущностями |\n| `POST`   | `/projects` | Создание проекта |\n| `PUT`    | `/projects/{id}` | Обновление проекта / настройка auth |\n| `DELETE` | `/projects/{id}` | Удаление проекта |\n| `POST`   | `/projects/{id}/generate` | Генерация ZIP-архива |\n\n### Сущности, Поля, Связи\n\n| Метод | Маршрут | Описание |\n|---|---|---|\n| `GET`    | `/entities/project/{projectId}` | Сущности проекта |\n| `POST`   | `/entities/project/{projectId}` | Создание сущности |\n| `PUT`    | `/entities/{id}` | Редактирование сущности |\n| `DELETE` | `/entities/{id}` | Удаление (FK → null, не каскад) |\n| `POST`   | `/fields/entity/{entityId}` | Создание поля |\n| `PUT`    | `/fields/{id}` | Редактирование поля |\n| `DELETE` | `/fields/{id}` | Удаление поля |\n| `POST`   | `/relationships` | Создание связи |\n| `DELETE` | `/relationships/{id}` | Удаление связи |\n\n---\n\n## ⚙️ Генерация кода\n\n### C# + PostgreSQL — Монолит\n\n```\nMyProject/\n├── Models/\n│   ├── Product.cs              # EF Core модель с аннотациями\n│   └── Category.cs\n├── Controllers/\n│   ├── ProductController.cs    # CRUD + фильтрация + пагинация\n│   └── AuthController.cs       # (если auth включён)\n├── DTOs/\n│   ├── ProductDto.cs           # Request / Response DTO\n│   └── AuthDtos.cs\n├── Data/\n│   └── ApplicationDbContext.cs\n├── Services/\n│   ├── IAuthService.cs + AuthService.cs\n│   └── ITokenService.cs + TokenService.cs\n├── Middleware/\n│   └── ErrorHandlerMiddleware.cs\n├── Properties/\n│   └── launchSettings.json\n├── appsettings.json            # JWT, ConnectionStrings\n├── Program.cs                  # DI, Swagger, Auth, EF\n├── MyProject.csproj            # .NET 9.0 + NuGet-пакеты\n├── Dockerfile                  # aspnet:9.0 · EXPOSE 8080\n├── docker-compose.yml          # API + PostgreSQL\n└── README.md\n```\n\n### Node.js + MongoDB — Монолит\n\n```\nMyProject/\n├── src/\n│   ├── models/\n│   │   ├── Product.js          # Mongoose-схема с валидацией\n│   │   └── User.js             # (если auth включён)\n│   ├── controllers/\n│   │   ├── productController.js\n│   │   └── authController.js\n│   ├── routes/\n│   │   ├── productRoutes.js    # Swagger JSDoc-аннотации\n│   │   └── authRoutes.js\n│   ├── middleware/\n│   │   ├── authMiddleware.js   # JWT verify\n│   │   ├── roleMiddleware.js   # Ролевая защита\n│   │   ├── errorHandler.js\n│   │   └── notFound.js\n│   ├── config/\n│   │   ├── database.js\n│   │   └── swagger.js\n│   └── app.js\n├── server.js\n├── package.json                # Express, Mongoose, JWT, Swagger\n├── .env.example\n├── Dockerfile\n├── docker-compose.yml\n└── README.md\n```\n\n### Микросервисная архитектура\n\n```\nMyProject/\n├── services/\n│   ├── product-service/        # Сущности группы \"product\"\n│   │   ├── src/\n│   │   │   ├── models/\n│   │   │   ├── controllers/\n│   │   │   ├── routes/\n│   │   │   ├── messaging/\n│   │   │   │   ├── publisher.js    # Публикация событий в RabbitMQ\n│   │   │   │   └── subscriber.js   # Подписка на события других сервисов\n│   │   │   ├── config/\n│   │   │   │   ├── database.js\n│   │   │   │   └── swagger.js\n│   │   │   └── app.js\n│   │   ├── server.js\n│   │   ├── package.json\n│   │   └── Dockerfile\n│   │\n│   ├── order-service/          # Другая группа сервисов\n│   │   └── ...\n│   │\n│   └── auth-service/           # Если включена аутентификация\n│       ├── src/\n│       │   ├── models/User.js\n│       │   ├── controllers/authController.js\n│       │   ├── routes/authRoutes.js\n│       │   ├── messaging/\n│       │   │   ├── publisher.js\n│       │   │   └── subscriber.js\n│       │   └── app.js\n│       ├── server.js\n│       ├── package.json        # Включает swagger-jsdoc\n│       └── Dockerfile\n│\n├── docker-compose.yml          # Все сервисы + MongoDB×N + RabbitMQ\n└── README.md\n```\n\n### Поддерживаемые типы данных\n\n| Тип | C# | Node.js / MongoDB |\n|---|---|---|\n| `String` | `string` | `String` |\n| `Integer` | `int` | `Number` |\n| `Long` | `long` | `Number` |\n| `Float` | `float` | `Number` |\n| `Decimal` | `decimal` | `Number` (mongoose) |\n| `Boolean` | `bool` | `Boolean` |\n| `DateTime` | `DateTime` | `Date` |\n| `Text` | `string [MaxLength(5000)]` | `String` |\n| `Guid` | `Guid` | `String` (UUID) |\n| `Relationship` | FK + Navigation | `ObjectId` (ref) |\n\n---\n\n## 🔑 Настройка окружения\n\n### Backend — `appsettings.json`\n\nФайл `appsettings.json` **не хранится в репозитории**. Скопируйте шаблон и заполните своими данными:\n\n```bash\ncd CodeForgeAPI\ncopy appsettings.example.json appsettings.json   # Windows\n# cp appsettings.example.json appsettings.json   # Linux / macOS\n```\n\nПример содержимого (`appsettings.example.json`):\n\n```json\n{\n  \"ConnectionStrings\": {\n    \"DefaultConnection\": \"Host=localhost;Database=codeforge;Username=postgres;Password=YOUR_DB_PASSWORD\"\n  },\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft.AspNetCore\": \"Warning\"\n    }\n  },\n  \"AllowedHosts\": \"*\",\n  \"EmailSettings\": {\n    \"MailServer\": \"smtp.gmail.com\",\n    \"MailPort\": 587,\n    \"UseSsl\": true,\n    \"UseStartTls\": true,\n    \"SenderName\": \"CodeForge\",\n    \"SenderEmail\": \"your-email@gmail.com\",\n    \"Password\": \"your-app-password\"\n  },\n  \"JwtSettings\": {\n    \"Secret\": \"YourSuperSecretKeyThatIsAtLeast32CharactersLong!@#$%\",\n    \"Issuer\": \"CodeForgeAPI\",\n    \"Audience\": \"CodeForgeUI\",\n    \"ExpirationMinutes\": 1440\n  }\n}\n```\n\n| Параметр | Описание |\n|---|---|\n| `ConnectionStrings:DefaultConnection` | Строка подключения к PostgreSQL |\n| `EmailSettings:SenderEmail` | Email отправителя (Gmail и др.) |\n| `EmailSettings:Password` | App Password для SMTP (не обычный пароль аккаунта) |\n| `JwtSettings:Secret` | Секрет для подписи JWT-токенов (≥ 32 символов) |\n\n\u003e Для Gmail создайте [App Password](https://myaccount.google.com/apppasswords) в настройках Google-аккаунта с включённой 2FA.\n\n### Frontend — `.env`\n\n```env\nVITE_API_URL=http://localhost:5123/api\nVITE_IMG_URL=http://localhost:5123\n```\n\n---\n\n## 🗄 База данных\n\n### Схема (основные таблицы)\n\n```\nUsers ──────────\u003c Projects ──────────\u003c Entities ──────────\u003c Fields\n  id               id                   id                   id\n  email            userId               projectId            entityId\n  passwordHash     name                 name                 name\n  role             targetStack          description          dataType\n  firstName        architectureType     serviceName          isRequired\n  lastName         authConfig           displayOrder         isUnique\n  twoFactorEnabled createdAt            createdAt            relatedEntityId\n  avatarUrl                                                  relationshipType\n  isDarkMode                                                 displayOrder\n\n                              Relationships\n                              id · sourceEntityId · targetEntityId\n                              relationshipType · sourceFieldName\n```\n\n### Применение миграций\n\n```bash\ncd CodeForgeAPI\ndotnet ef migrations add \u003cНазвание\u003e\ndotnet ef database update\n```\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"https://media1.tenor.com/m/oKZVauJ1LWEAAAAd/anime-fern.gif\" width=\"260\" alt=\"fern\" /\u003e\n\n\u003ch3\u003eхорошего дня 😊\u003c/h3\u003e\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwoookle%2Fcode-forge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwoookle%2Fcode-forge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwoookle%2Fcode-forge/lists"}