Публичные адреса:
Пользовательские сценарии:
- регистрация и авторизация;
- личный профиль и публичные профили участников;
- создание и редактирование команд;
- заявки на вступление в команду и их принятие/отклонение;
- каталог мероприятий и подписки на события;
- уведомления по email.
- Frontend: Angular 21, TypeScript, Less, Taiga UI, RxJS
- Backend: ASP.NET Core 8, Entity Framework Core 8, Npgsql
- База данных: PostgreSQL
- Инфраструктура: Dockerfiles для UI и API, Swagger
.
├── docs/ # документация
├── studhack-ui/ # Angular-приложение
│ ├── src/app/core/ # auth, api clients, config, stores
│ ├── src/app/features/ # лендинг, профили, события, команды, уведомления
│ └── docker/ # runtime-config и nginx для контейнера
└── studhack-api/ # .NET solution
├── StudHack.Api/ # Web API
├── StudHack.Application/ # прикладные сервисы
├── StudHack.Domain/ # доменная модель и абстракции
├── StudHack.DataAccess/ # EF Core, миграции, репозитории
├── FillDatabase/ # заполнение справочников
├── StudHack.MessageSender/ # SMTP-отправка сообщений
└── StudHack.MessageSenderService/ # фоновые задачи
- Node.js 22+
- npm 10+
- .NET SDK 8.0
- PostgreSQL
- Docker (опционально)
Фронтенд по умолчанию работает в mock-режиме, поэтому его можно поднять без API и без PostgreSQL.
cd studhack-ui
npm ci
npm startПосле запуска приложение будет доступно на http://localhost:4200.
Нужен инстанс PostgreSQL. Подключение API к нему настраивается через env:
export ConnectionStrings__Postgres='Host=localhost;Port=5432;Database=studhack;Username=postgres;Password=postgres'Запуск API:
cd studhack-api
dotnet restore StudHack.Api.sln
dotnet run --project StudHack.Api/StudHack.Api.csproj --launch-profile httpЧто важно:
- профиль
httpзадаетAuth.ApiUrl,Auth.IssuerиAuth.Audience- нужны для работы авторизации; - локально Swagger будет доступен по адресу
http://localhost:5059/swagger.
Применение миграций:
curl -X POST http://localhost:5059/api/v1/migrationsЗаполнение справочников:
curl -X POST http://localhost:5059/api/v1/parse-dataЧтобы подключить UI к API, нужно поменять конфигурацию в файле
studhack-ui/public/runtime-config.js (и не коммитить эти изменения):
window.__STUDHACK_RUNTIME_CONFIG__ = {
apiMode: 'real',
apiBaseUrl: 'http://localhost:5059',
disableNonceCheck: true,
disableOAuth2StateCheck: true,
};После смены конфигурации нужен перезапуск UI:
cd studhack-ui
npm startОсновные переменные окружения для API:
| Переменная | Назначение |
|---|---|
ConnectionStrings__Postgres |
подключение к PostgreSQL |
Auth__ApiUrl / Auth.ApiUrl |
URL OAuth OIDC сервера |
Auth__Issuer / Auth.Issuer |
issuer для JWT |
Auth__Audience / Auth.Audience |
audience для JWT |
Опциональные SMTP-параметры для отправки email:
Smtp__HostSmtp__PortSmtp__UserSmtp__EmailSmtp__PasswordSmtp__UseDefaultCredentialsSmtp__EnableSsl
Фронтенд читает конфиг из runtime-config.js. При запуске через Docker этот файл
заполняется переменными окружения контейнера:
STUDHACK_AUTH_ISSUERSTUDHACK_AUTH_CLIENT_IDSTUDHACK_AUTH_CLIENT_SECRETSTUDHACK_API_BASE_URLSTUDHACK_API_MODESTUDHACK_AUTH_REDIRECT_URISTUDHACK_AUTH_POST_LOGOUT_REDIRECT_URISTUDHACK_AUTH_DISABLE_NONCE_CHECKSTUDHACK_AUTH_DISABLE_OAUTH2_STATE_CHECK
Примечание: текущая интеграция с OAuth OIDC провайдером предполагает использование clientSecret
даже для SPA, поэтому он присутствует в конфиге.
Для обеих частей проекта есть Dockerfiles:
docker build -t studhack-ui ./studhack-ui
docker build -t studhack-api ./studhack-apidocker-compose.yml в репозитории нет, поэтому оркестрировать сервисы нужно отдельно.
Основные эндпоинты:
/api/v1/dictionaries/api/v1/users/api/v1/teams/api/v1/team-requests/api/v1/events/api/v1/notifications
Служебные эндпоинты:
POST /api/v1/migrationsPOST /api/v1/parse-data
Схема компонентов системы:
Схема базы данных:
Исходники схем лежат в репозитории в формате Draw.io:
docs/Components.drawiodocs/DB.drawio
Проект распространяется по лицензии MIT. Подробности — в файле LICENSE.
