Разработать CRUD Web API для работы с мероприятиями (создание, изменение, удаление, получение), проект должен выполняться на .Net Core, с использованием EF Core.
- Получение списка всех событий;
- Получение определённого события по его Id;
- Регистрация нового события;
- Изменение информации о существующем событии;
- Удаление события.
- Название / тема;
- Описание, план;
- Организатор, спикер;
- Время и место проведения.
- .Net 5.0+;
- Entity Framework Core;
- MS SQL DB;
- AutoMapper;
- Authentication via bearer token;
- Swagger.
Программа запускается через Swagger UI.
Для грамотного тестирования, а также для тестирования другими пользователями, в проект была добавлена своего рода заглушка -
MockMeetupRepository
, которая предоставит возможность тестировать API пользователям, не имея доступа к моей локальной БД. Для взаимодействия с локальной БД, был создан отдельный класс -SqlMeetupRepository
, который предоставляет возможность работать с базой данных на локальном ПКp.s. Для работы с тем или иным репозиторием, один из них нужно закомментировать в
Program.cs
Перед тем, как использовать
Endpoints
приложения, необходимо сначала получитьToken
через методGET
контроллераTokenProvider
, после чего скопировать полученный токен, и вставить его в соответствующее поле (Появится после нажатия кнопкиAuthorize
, расположенной вверху приложения) в формате"Bearer abcdefg"
, гдеabcdefg
- сгенерированный программой токен. После этого, клиент может спокойно пользоваться всем функционалом приложения.
В программе были реализованы такие
Endpoints
, как:
URI | Метод | Операция | Описание | Успешное выполнение | Ошибка |
---|---|---|---|---|---|
api/events | GET | READ | Чтение всех событий | 200 ОК | 404 Bad Request / 404 Not Found |
api/events/{id} | GET | READ | Чтение единичного события по id | 200 ОК | 404 Bad Request / 404 Not Found |
api/events | POST | CREATE | Создание нового события | 201 Created | 404 Bad Request / 404 Not Found |
api/events/{id} | PUT | UPDATE | Обновление всего объекта события | 204 No Content | 404 Bad Request / 404 Not Found |
api/events/{id} | PATCH | UPDATE | Обновление какой-то части объекта события | 204 No Content | 404 Bad Request / 404 Not Found |
api/events/{id} | DELETE | DELETE | Удаление события по id | 200 ОК \ 204 No Content | 404 Bad Request / 404 Not Found |
Архитектура была построена таким образом, чтоб можно было разграничить предметные области, а также сделать так, чтоб компоненты имели слабую связь по отношению друг к другу.
Клиент, желая получить информацию, посылает HTTP Request
к EventController.cs
, котрый в свою очередь взаимодействует одним из SqlMeetupRepository.cs
или MockMeetupRepository.cs
. В случае использования SqlMeetupRepository.cs
, появляется MeetupDbContext.cs
, который выполняет роль промежуточного слоя, через который приложение взаимодействует с БД, по факту, предоставляе доступ к данным БД, в моём случае MS SQL Server-а
. Как только поступает тот или иной запрос, в ход вступает AutoMapper
, функции которого в моём проетке выполняет EventsProfile.cs
. В нём чётко расписаны правила, по которым один объект может быть реконструирован в другой (Роль этих объектов выполняют DTOs
, или Data Transfer Objects
, в моей программе представленные как EventReadDto.cs
, EventCreateDto.cs
и EventUpdateDto.cs
, в которых описаны те поля, которые должны быть доступны на том или ином уровне, будь то добавление события, обновление или чтение). При формировании ответа сервером, происходит отправка HTTP Response
в формате JSON
.