Requete - это веб-API приложение на ASP.NET Core 10.0, предназначенное для управления системой обучения. Проект предоставляет REST API для работы с курсами, пользователями, сессиями обучения и связанными данными.
- Платформа: .NET 10.0
- Фреймворк: ASP.NET Core
- Базы данных: Microsoft SQL Server, PostgreSQL
- Кэширование: Redis
- ORM: Entity Framework Core 10.0
- Документация API: OpenAPI (Swagger) с Scalar UI
CoursesController- Управление курсамиLearningsController- Управление процессом обученияUsersController- Управление пользователямиSessionController- Управление сессиямиDefaultController- Базовый контроллер
CourseService- Сервис для работы с курсамиLearningService- Сервис для работы с обучениемUserService- Сервис для работы с пользователямиRedisSessionService- Сервис для управления сессиями через Redis
Проект содержит обширную модель данных HCM (Human Capital Management) включающую:
- Управление пользователями и аккаунтами
- Системы обучения и курсов
- Управление оценками и сертификатами
- Календарные события и уведомления
- Блоги и статьи
- И многое другое
- .NET 10.0 SDK
- SQL Server или PostgreSQL
- Redis (для кэширования и сессий)
-
Клонирование репозитория
git clone <repository-url> cd requete
-
Настройка конфигурации
Отредактируйте
appsettings.jsonиappsettings.Development.json:{ "Database": { "Provider": "SqlServer" // или "PostgreSQL" }, "ConnectionStrings": { "DefaultConnection": "ваша_строка_подключения_sql_server", "PostgresConnection": "ваша_строка_подключения_postgres" } } -
Установка зависимостей
dotnet restore
-
Применение миграций базы данных
dotnet ef database update
-
Запуск приложения
dotnet run
Приложение поддерживает:
- SQL Server (по умолчанию)
- PostgreSQL
Выбор осуществляется через параметр Database:Provider в конфигурации.
Redis используется для:
- Кэширования данных
- Управления пользовательскими сессиями
SessionAuthenticationMiddleware- Middleware для аутентификации сессий
Приложение использует простую систему аутентификации на основе сессий с использованием Redis:
- Cookie-based аутентификация: Система использует cookie с именем
SessionIDдля передачи идентификатора сессии - Redis-хранилище: Все сессии хранятся в Redis и проверяются при каждом запросе
- Middleware проверка:
SessionAuthenticationMiddlewareперехватывает все входящие запросы и проверяет наличие действующей сессии
- Получение SessionID: Middleware извлекает
SessionIDиз cookies запроса - Проверка в Redis: Выполняется запрос к Redis для поиска данных сессии по ключу SessionID
- Создание Claims: При найденной сессии создаются claims с
SessionIdиUserId - Установка контекста: Данные сессии сохраняются в
HttpContext.Items["SessionData"]
Middleware пропускает проверку аутентификации для:
- Статических файлов (favicon.ico)
- API документации (
/scalar/v1,/openapi/v1.json) - OPTIONS запросов
- Эндпоинтов с атрибутом
[AllowAnonymous]
Все контроллеры наследуются от SessionControllerBase, который предоставляет доступ к данным текущей сессии через свойство SessionData.
public class MyController : SessionControllerBase
{
public IActionResult GetUserData()
{
var userId = SessionData.UserId; // Доступ к данным сессии
// ...
}
}После запуска приложения документация API доступна по адресу:
- Scalar UI:
http://localhost:5000/scalar/v1 - OpenAPI JSON:
http://localhost:5000/openapi/v1.json
├── Controllers/ # API контроллеры
│ ├── Base/ # Базовые контроллеры
├── Data/ # Контексты Entity Framework
├── DTOs/ # Объекты передачи данных
│ └── Responses/ # DTO для ответов API
├── Extensions/ # Расширения для DI
├── Middleware/ # Пользовательские middleware
├── Models/ # Модели данных
│ └── HCM/ # Модели HCM системы
├── Services/ # Бизнес-логика
└── Resources/ # Ресурсы локализации
- Форматирование кода:
dotnet format - Сборка проекта:
dotnet build
Apache License 2.0