Разработка API Личного кабинета
БД:
БД:
ШАГ 1: Создание проекта
ШАГ 1: Создание проекта
ШАГ 1: Создание проекта
ШАГ 1: Создание проекта
ШАГ 2: Установка пакетов
ШАГ 3: Настройка строки подключения
ШАГ 4: Использование команды Scaffold-DbContext для генерации моделей и контекста
ШАГ 5: Добавление контекста в Program.cs
ШАГ 6: Добавление поля Name в модели сотрудника и создание класса UserLoginDto и CommentDto
ШАГ 7: Установка пакета Microsoft.AspNetCore.Authentication.JwtBearer
ШАГ 8: Создание настроек токена в appsettings.json
ШАГ 9: Настройка JWT в Program.cs
ШАГ 10: Создание контроллера в папке Controllers
ШАГ 11: Пишем контроллер SignIn
ШАГ 11: Пишем контроллер SignIn
ШАГ 12: Пишем контроллер Documents
ШАГ 12: Пишем контроллер Documents
ШАГ 12: Пишем контроллер Documents
ШАГ 12: Пишем контроллер Documents
4.59M

API

1. Разработка API Личного кабинета

2. БД:

СВЯЗЬ ОТ ЮЗЕРА К
СОТРУДНИКУ!!!!!

3. БД:

4. ШАГ 1: Создание проекта

5. ШАГ 1: Создание проекта

6. ШАГ 1: Создание проекта

7. ШАГ 1: Создание проекта

8. ШАГ 2: Установка пакетов

• Microsoft.EntityFrameworkCore.SqlServer: Основной пакет
для работы с SQL Server через Entity Framework Core
(ORM).
• Microsoft.EntityFrameworkCore.Tools: Инструменты для
работы с миграциями и генерации кода (например, на
основе существующей БД).
• Microsoft.EntityFrameworkCore.Design: Необходим для
некоторых команд инструментов EF Core, особенно для
scaffold (генерации моделей на основе БД).

9. ШАГ 3: Настройка строки подключения

• appsettings.json: Это стандартный файл для конфигурации приложения. Он отлично подходит
для хранения строки подключения в разработке.
• Замените your_server_name, your_database_name, your_username, your_password на ваши
реальные данные
• Server= your_server_name;Database=your_database_name;Trusted_Connection=True;
TrustServerCertificate=True;
(Если у вас windows authentication)
• Server=your_server_name;Database=your_database_name;User
Id=your_username;Password=your_password;TrustServerCertificate=True;
(Если у вас sql authentication)

10. ШАГ 4: Использование команды Scaffold-DbContext для генерации моделей и контекста

ШАГ 4: Использование команды ScaffoldDbContext для генерации моделей и контекста
Параметры команды:
• Scaffold-DbContext – Объявление команды
• "Server=your_server_name;Database=your_database_name;User
Id=your_username;Password=your_password;Trusted_Connection=True;TrustServerCertificate=True; — ваша
строка подключения к базе данных.
• Microsoft.EntityFrameworkCore.SqlServer — провайдер для SQL Server.
• -OutputDir Models — папка, в которую будут помещены сгенерированные классы сущностей. Вы
можете изменить имя папки на любое другое по вашему желанию.
• -ContextDir Data — папка, в которую будет помещен сгенерированный контекст БД. Вы можете
изменить имя папки на любое другое по вашему желанию.
• -Context AppDbContext — имя класса контекста, который будет создан.
• -Force - перезаписывает существующие файлы, если они уже существуют.

11. ШАГ 5: Добавление контекста в Program.cs

Предварительно удалите строку подключения из контекста

12. ШАГ 6: Добавление поля Name в модели сотрудника и создание класса UserLoginDto и CommentDto

DTO (Data Transfer Object) простыми
словами можно определить как объект,
который используется для передачи
данных между подсистемами
приложения.
Он содержит только поля и методы для
доступа к ним, не содержит бизнес-логики
и используется только для передачи
данных.

13. ШАГ 7: Установка пакета Microsoft.AspNetCore.Authentication.JwtBearer

Пакет Microsoft.AspNetCore.Authentication.JwtBearer предназначен для реализации аутентификации с
использованием JWT (JSON Web Tokens) в приложениях ASP.NET Core. Он позволяет вашему приложению
принимать и обрабатывать JWT в качестве механизма аутентификации.
Пакет System.IdentityModel.Tokens.Jwt предоставляет поддержку для создания,
сериализации и валидации JSON Web Tokens (JWT).

14. ШАГ 8: Создание настроек токена в appsettings.json

• Key в JWT (JSON Web Token) — это ключ, который будет применяться для создания токена
• Рекомендуется использовать как минимум 256 бит (32 байта) для HMAC, что соответствует длине
ключа 32 символа, если использовать Base64 кодировку (что дает чуть больше 44 символов).

15. ШАГ 9: Настройка JWT в Program.cs

16. ШАГ 10: Создание контроллера в папке Controllers

17. ШАГ 11: Пишем контроллер SignIn

• Указываем путь
• Получаем контекст и
конфигурацию

18. ШАГ 11: Пишем контроллер SignIn

Логика метода SignIn для аутентификации пользователя
1.Получение данных о пользователе:
•В первой строке используется метод FirstOrDefault, чтобы найти пользователя по
имени и паролю, переданным в теле запроса (userLogin.Name и userLogin.Password).
•Для этого выполняется соединение с таблицей Employee, которая связана с
таблицей User через навигационное свойство Employee. Это позволяет получить
информацию о сотруднике пользователя.
•В запросе происходит конкатенация FirstName и SecondName сотрудника, чтобы
проверить, совпадает ли имя пользователя.
2.Проверка на наличие пользователя:
•Если пользователь не найден (user == null), возвращается ответ с кодом 401
(Unauthorized) и сообщением "Неверные данные для авторизации". Это
предотвращает дальнейшие действия, если данные пользователя неверные.
3.Создание JWT токена:
•Если пользователь найден, создаются клеймы (claims) для токена. Клеймы — это
данные, которые будут сохранены в токене:
•ClaimTypes.Name: полное имя сотрудника (FirstName + SecondName).
•ClaimTypes.NameIdentifier: уникальный идентификатор пользователя
(user.Id).
•Токен будет подписан с использованием секретного ключа из конфигурации
(_configuration["Jwt:SecretKey"]), что гарантирует его подлинность.
•Устанавливается срок действия токена — 1 день (expires:
DateTime.Now.AddDays(1)).
4.Возврат токена:
•После создания токена используется JwtSecurityTokenHandler для его сериализации
в строку.
•Возвращается объект с полем token, содержащим JWT токен, который может быть
использован для аутентификации в дальнейших запросах.

19. ШАГ 12: Пишем контроллер Documents

• Устанавливаем путь
• Делаем доступ к методу только с помощью
токена
• Получаем контекст

20. ШАГ 12: Пишем контроллер Documents


Логика метода GetDocuments для получения списка документов
Запрос к базе данных:
В методе используется async и await для выполнения асинхронного запроса к базе данных, чтобы не
блокировать выполнение других операций в приложении.
В запросе вызывается метод _context.Documents, который обращается к таблице Documents в базе данных
через Entity Framework.
Выбор необходимых полей:
Метод Select используется для проекции (выбора) только тех полей, которые нам нужны:
Id: Идентификатор документа.
Title: Название документа.
DateCreated: Дата создания документа.
DateUpdated: Дата последнего обновления документа.
Category: Категория документа.
HasComments: Булево значение, показывающее, есть ли у документа комментарии.
Эти поля выбираются, чтобы в ответе вернуть только минимально необходимую информацию о документах.
Получение данных из базы данных:
Метод ToListAsync выполняет асинхронное извлечение данных из базы данных и преобразует результаты в
список объектов.
Возврат ответа:
После того как данные получены, они возвращаются в виде JSON-ответа с кодом 200 (OK) через return
Ok(documents).
Это означает, что клиент получит список документов в формате JSON, содержащий только выбранные поля
(идентификатор, название, даты и т. д.).

21. ШАГ 12: Пишем контроллер Documents


HttpGet("{documentId}/Comments")]: Атрибут маршрутизации указывает, что это
метод для обработки GET запроса по пути
/api/v1/Document/{documentId}/Comments, где {documentId} — это параметр,
который будет передан в метод.
public IActionResult GetComments(int documentId): Метод возвращает
IActionResult, что позволяет вернуть разные типы ответов. Параметр documentId
передается из URL запроса.
var comments = _context.Comments: Это запрос к базе данных, который
использует контекст _context для доступа к таблице Comments.
.Where(c => c.DocumentId == documentId): Фильтрация комментариев по
DocumentId. Мы выбираем только те комментарии, которые относятся к
конкретному документу, чей ID передан в параметре documentId.
.Select(c => new {...}): Формирование нового анонимного объекта, включающие
поля ниже
.ToList(): Выполняет запрос к базе данных и возвращает список комментариев.
if (comments == null): Проверка, есть ли комментарии. В случае с LINQ и EF Core
этот блок вряд ли будет срабатывать, так как ToList() вернет пустой список, а не
null. Но если бы был использован другой метод, например, FirstOrDefault(), то
проверка на null была бы актуальна.
return NotFound(new { message = "Нет комментариев для этого документа" });:
Если комментарии не найдены, возвращаем HTTP статус

22. ШАГ 12: Пишем контроллер Documents


Проверка данных комментария:
Проверяется, что текст комментария не пустой. Если пустой, возвращается
ошибка 400 (Bad Request).
Проверка существования документа:
Ищем документ по documentId в базе. Если документ не найден, возвращается
ошибка 404 (Not Found).
Извлечение идентификатора пользователя (из токена JWT):
Получаем userId из токена, который был передан в запросе (через
ClaimTypes.NameIdentifier). Если токен не найден, возвращается ошибка 401
(Unauthorized).
Создание комментария:
Создается новый объект Comment, где:
Устанавливаются поля: DocumentId, Text, DateCreated, DateUpdated и AuthorId.
AuthorId извлекается из токена.
Устанавливается флаг HasComments на true у документа.
Добавление комментария и сохранение изменений:
Новый комментарий добавляется в базу данных, и изменения сохраняются.
Возвращение успешного ответа:
Возвращается сообщение о том, что комментарий был успешно добавлен.
English     Русский Rules