Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/milovidov983/social-network-api
https://github.com/milovidov983/social-network-api
Last synced: 2 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/milovidov983/social-network-api
- Owner: milovidov983
- License: mit
- Created: 2021-06-26T17:47:03.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2021-06-28T05:30:11.000Z (over 3 years ago)
- Last Synced: 2024-10-11T18:25:54.102Z (about 1 month ago)
- Language: C#
- Size: 32.2 KB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# social-network-api
## Требования
Разработать WebAPI сервис для соцсети, который позволяет сделать следующее:
- Зарегистрировать нового клиента. Клиент при регистрации указывает только имя. Имя должно состоять из букв и пробелов и быть не длиннее 64 символов
- Подписать одного клиента на другого
- Выбрать топ наиболее популярных клиентов. Вызывающий может указать требуемое количество записей## Описание реализации
### Введение
Приложение состоит из 3-х проектов: сама Api и два проекта с тестами, юнит тесты и интеграционные.
100% покрытия тестами делать не стал, из того что написал, вероятно, можно будет сделать вывод о знакомстве с технологиями.### Библиотеки
Для целей тестирования были задейстованы библиотеки: [XUnit](https://xunit.net), [AutoFixture](https://github.com/AutoFixture/AutoFixture), [Moq](https://github.com/Moq/moq4/).
Использованные библиотеки в основном приложении:
- Связующий паттерн посредник - библиотека [MediatR](https://github.com/jbogard/MediatR)
- Валидация входящих данных - библиотека [FluentValidation](https://fluentvalidation.net/)
- Доступ к данным - [Dapper](https://dapperlib.github.io/Dapper/) и самописный набор библиотек для типизации SQL запросов [DapperHelpers](https://github.com/milovidov983/DapperHelpers). Почему именно такой выбор, а не [EF](https://github.com/dotnet/efcore) например? Ответ состоит из двух частей, первая часть ответа находиться в введении README проекта [DapperHelpers](https://github.com/milovidov983/DapperHelpers), вторая часть ответа сотоит в том, что с ним я хуже знаком и мне проще оперировать чистым SQL, не переживая за то, что мне может наворотить ORM при построении запроса.### Описание структуры проекта
Основное приложение разделено на три слоя:
- `Core`
- `Application`
- `Infrastructure`#### Core
Слой `Core` находится в одноименной директории `Core` и содержит описание основных команд и бизнес логику с основными бизнес моделями. Для своей работы данный слой требует реализованного кем-либо интерфейса `IUsersRepository` для доступа к данным. В директории `Commands` описаны команды, реализующие требования ТЗ, их обработчики и валидаторы входящих данных на основе требований бизнес правил и других ограничений.
#### Application
Основной код слоя `Application` находится в одноименной директории `Application` и реализует API контроллеры, также в нём содержатся описания моделей запросов к API. К этому же слою стоит отнести и файлы `Startup.cs` с логикой запуска и инициализации приложения и файл `Settings.cs` с настройками.
#### Infrastructure
Код слоя `Infrastructure` находится в одноименной директории `Infrastructure`. Он реализует интерфейс `IUsersRepository`, требуемый на уровне бизнес слоя.
В нем описана схема хранения данных, названия таблиц, SQL запросы и логика работы с транзакциями. Так же в слое `Infrastructure` находится реализация поведения валидатора `ValidatorPipelineBehavior`