{"id":50996538,"url":"https://github.com/droptrigger/vogu-map","last_synced_at":"2026-06-20T10:02:22.137Z","repository":{"id":359877334,"uuid":"1246596629","full_name":"droptrigger/vogu-map","owner":"droptrigger","description":"REST API для управления интерактивной картой планов корпусов.","archived":false,"fork":false,"pushed_at":"2026-06-04T11:28:11.000Z","size":67,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-04T13:14:03.776Z","etag":null,"topics":["asp-net","c-sharp","clean-architecture","docker","rest-api"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/droptrigger.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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-05-22T10:58:11.000Z","updated_at":"2026-06-04T11:28:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/droptrigger/vogu-map","commit_stats":null,"previous_names":["droptrigger/vogu-map"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/droptrigger/vogu-map","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/droptrigger%2Fvogu-map","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/droptrigger%2Fvogu-map/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/droptrigger%2Fvogu-map/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/droptrigger%2Fvogu-map/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/droptrigger","download_url":"https://codeload.github.com/droptrigger/vogu-map/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/droptrigger%2Fvogu-map/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34565244,"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-20T02:00:06.407Z","response_time":98,"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","c-sharp","clean-architecture","docker","rest-api"],"created_at":"2026-06-20T10:02:21.538Z","updated_at":"2026-06-20T10:02:22.131Z","avatar_url":"https://github.com/droptrigger.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vogu Map API\n\nREST API для управления интерактивной картой планов корпусов.\n\n## Требования\n\n### Системные требования\n\n| Компонент | Версия |\n|-----------|--------|\n| .NET SDK | 10.0 или выше |\n| Docker | 20.10 или выше |\n| Docker Compose | 2.0 или выше |\n| PostgreSQL | 18 (используется в Docker) |\n\n### Установка зависимостей\n\n**На Windows/macOS/Linux:**\n- Установите [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n- Установите [Docker Desktop](https://www.docker.com/products/docker-desktop/)\n\n## Стек технологий\n\n- **.NET 10** / ASP.NET Core 10 - веб-фреймворк\n- **Docker** + Docker Compose - контейнеризация и оркестрация\n- **PostgreSQL 18** + Entity Framework Core 10 (Npgsql) - база данных и ORM\n- **Swagger / OpenAPI** - документация API\n- **AutoMapper 16** - маппинг между DTOs и сущностями\n- **xUnit 2.9** - фреймворк для тестирования\n\n## Архитектура\n\nПроект построен по принципам **Clean Architecture** и разбит на 4 слоя:\n\n```\nsrc/\n├── VoguMap.Web              # Точка входа: контроллеры, middleware, DI\n├── VoguMap.Application      # Бизнес-логика: сервисы, DTO, AutoMapper-профили\n├── VoguMap.Domain           # Ядро: сущности, интерфейсы, исключения\n├── VoguMap.Infrastructure   # Инфраструктура: EF Core, репозитории, контекст БД\n└── VoguMap.Tests            # Тесты: интеграционные и юнит-тесты\n```\n\n## Быстрый старт\n\n### Docker (рекомендуется)\n\n1. Запуск проекта в Docker:\n\n```bash\ndocker compose up --build\n```\n\n2. Проверка доступности сервисов:\n\n| Сервис   | Адрес                              |\n|----------|-----------------------------------|\n| API      | http://localhost:8080             |\n| Swagger UI | http://localhost:8080/swagger    |\n| PostgreSQL | localhost:5432 (контейнер)      |\n\n\u003e База данных `postgres` поднимается автоматически в Docker-контейнере.  \n\u003e В режиме **Development** миграции применяются самим приложением при старте.\n\n### Локально\n\n1. Установи [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) и [PostgreSQL 18](https://www.postgresql.org/download/).\n\n2. В корне проекта создай файл `.env` на основе `.env.example`:\n\n```bash\ncp .env.example .env\n```\n\nОтредактируй `.env` с правильными параметрами:\n\n```env\nDB_HOST=localhost\nDB_PORT=5432\nDB_NAME=vogumap\nDB_USER=postgres\nDB_PASSWORD=your_password\nASPNETCORE_ENVIRONMENT=Development\nASPNETCORE_URLS=http://0.0.0.0:5000\n```\n\n3. Примени миграции базы данных:\n\n```bash\ndotnet ef database update --project src/VoguMap.Infrastructure\n```\n\n4. Запусти API:\n\n```bash\ndotnet run --project src/VoguMap.Web\n```\n\nAPI будет доступен на `http://localhost:5000`, Swagger на `http://localhost:5000/swagger`.\n\n---\n\n## Переменные окружения\n\nФайл `.env` в корне проекта содержит переменные окружения для API и БД.\n\n| Переменная                | Описание                                              | Пример |\n|---------------------------|-------------------------------------------------------|--------|\n| `DB_HOST`                 | Host базы данных (в Docker `postgres`, локально `localhost`) | `postgres` |\n| `DB_PORT`                 | Порт базы данных | `5432` |\n| `DB_NAME`                 | Имя базы данных | `vogumap` |\n| `DB_USER`                 | Пользователь PostgreSQL | `postgres` |\n| `DB_PASSWORD`             | Пароль PostgreSQL | `password123` |\n| `ASPNETCORE_ENVIRONMENT`  | Окружение ASP.NET Core (`Development`/`Production`) | `Production` |\n| `ASPNETCORE_URLS`         | URL, на котором слушает Kestrel | `http://0.0.0.0:80` |\n\n---\n\n## Тестирование\n\n### Запуск всех тестов\n\n```bash\ndotnet test\n```\n\n### Запуск тестов с подробным выводом\n\n```bash\ndotnet test --verbosity normal\n```\n\n### Запуск специфичного набора тестов\n\n```bash\ndotnet test --filter \"Category=Integration\"\n```\n\n### Структура тестов\n\n```\nsrc/VoguMap.Tests/\n├── IntegrationTests/\n│   ├── BuildingServiceIntegrationTests.cs    # Тесты сервиса корпусов\n│   └── RoomServiceIntegrationTests.cs        # Тесты сервиса помещений\n├── Repositories/\n│   └── *RepositoryTests.cs                   # Юнит-тесты репозиториев\n├── Context/\n│   └── InMemoryDbContext.cs                  # InMemory контекст для тестов\n└── Factories/\n    └── *Factory.cs                           # Фабрики для создания тестовых данных\n```\n\n### Примеры тестовых команд\n\n**Запуск интеграционных тестов:**\n```bash\ndotnet test src/VoguMap.Tests/VoguMap.Tests.csproj --filter \"FullyQualifiedName~IntegrationTests\"\n```\n\n**Запуск конкретного теста:**\n```bash\ndotnet test src/VoguMap.Tests/VoguMap.Tests.csproj --filter \"FullyQualifiedName~BuildingServiceIntegrationTests\"\n```\n\n---\n\n## Доменная модель\n\n### Building (Учебный корпус)\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `Id` | int | Первичный ключ |\n| `Name` | string | Название корпуса |\n| `Address` | string | Адрес корпуса |\n| `Rooms` | List\u003cRoom\u003e | Помещения в корпусе (навигационное свойство) |\n| `CreatedAt` | DateTime | Дата создания |\n| `UpdatedAt` | DateTime? | Дата последнего обновления |\n\n### Room (Помещение)\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `Id` | int | Первичный ключ |\n| `Name` | string | Название помещения |\n| `Floor` | int | Номер этажа |\n| `Capacity` | int | Вместимость помещения |\n| `BuildingId` | int | Внешний ключ на Building |\n| `Building` | Building | Навигационное свойство на корпус |\n| `CreatedAt` | DateTime | Дата создания |\n| `UpdatedAt` | DateTime? | Дата последнего обновления |\n\n---\n\n## Мониторинг и логирование\n\n### Встроенное логирование\n\nПриложение использует встроенную систему логирования ASP.NET Core. Логи выводятся в консоль.\n\n### Просмотр логов контейнера\n\n```bash\ndocker compose logs webapi\n```\n\n**Просмотр логов в реальном времени:**\n```bash\ndocker compose logs -f webapi\n```\n\n**Просмотр логов только PostgreSQL:**\n```bash\ndocker compose logs postgres\n```\n\n---\n\n## Развертывание\n\n### Production окружение\n\n1. **Подготовка переменных окружения:**\n\nСоздай `.env` файл с Production переменными:\n\n```env\nDB_HOST=your-production-db-host\nDB_PORT=5432\nDB_NAME=vogumap_prod\nDB_USER=prod_user\nDB_PASSWORD=strong_password_here\nASPNETCORE_ENVIRONMENT=Production\nASPNETCORE_URLS=http://0.0.0.0:80\n```\n\n2. **Сборка и запуск в Docker:**\n\n```bash\ndocker compose -f docker-compose.yml up -d\n```\n\n3. **Проверка статуса контейнеров:**\n\n```bash\ndocker compose ps\n```\n\n### Backup базы данных\n\n**Создание бэкапа:**\n```bash\ndocker exec vogumap-postgres pg_dump -U $DB_USER $DB_NAME \u003e backup.sql\n```\n\n**Восстановление из бэкапа:**\n```bash\ndocker exec -i vogumap-postgres psql -U $DB_USER $DB_NAME \u003c backup.sql\n```\n\n---\n\n## Структура проекта (подробно)\n\n```\nsrc/\n├── VoguMap.Web/\n│   ├── Controllers/v1/         # REST-контроллеры (Building, Room)\n│   ├── Middlewares/            # Промежуточные слои (ExceptionHandler)\n│   ├── appsettings.json        # Конфигурация приложения\n│   └── Program.cs              # Точка входа, конфигурация DI\n│\n├── VoguMap.Application/\n│   ├── Common/                 # Базовые классы (PagedResultDto, BaseService)\n│   ├── DTOs/                   # Data Transfer Objects (BuildingDto, RoomDto)\n│   ├── Helpers/                # Вспомогательные классы\n│   ├── Mappings/               # AutoMapper-профили (BuildingProfile, RoomProfile)\n│   └── Services/               # Интерфейсы и реализации сервисов\n│       ├── Interfaces/         # IBuildingService, IRoomService\n│       └── Implementations/    # BuildingService, RoomService\n│\n├── VoguMap.Domain/\n│   ├── Entities/               # EF Core-сущности (Building, Room)\n│   ├── Interfaces/             # Интерфейсы (IRepository, IUnitOfWork)\n│   ├── Filters/                # Классы для фильтрации (RoomFilterDto)\n│   └── Exceptions/             # Пользовательские исключения\n│\n├── VoguMap.Infrastructure/\n│   └── Persistence/\n│       ├── Context/            # VoguMapContext (DbContext)\n│       ├── Repositories/       # Реализации репозиториев (GenericRepository, BuildingRepository)\n│       ├── Migrations/         # EF Core-миграции\n│       ├── Seed/               # Заполнение справочных данных (ApplicationDbSeeder)\n│       └── Factories/          # Фабрика для создания контекста\n│\n└── VoguMap.Tests/\n    ├── Context/                # Имитации DbContext (InMemory)\n    ├── Factories/              # Фабрики создания тестовых сущностей\n    ├── IntegrationTests/       # Интеграционные тесты сервисов\n    │   ├── BuildingServiceIntegrationTests.cs\n    │   └── RoomServiceIntegrationTests.cs\n    └── Repositories/           # Юнит-тесты репозиториев\n        ├── BuildingRepositoryTests.cs\n        └── RoomRepositoryTests.cs\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdroptrigger%2Fvogu-map","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdroptrigger%2Fvogu-map","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdroptrigger%2Fvogu-map/lists"}