Skip to content

TimaCherezov/SocialNetwork

Repository files navigation

Social Network Backend

Учебный backend социальной сети, построенный на ASP.NET Core с акцентом на архитектуру, разделение ответственности и расширяемость системы.

Архитектура

Проект организован по принципам Clean Architecture и разделён на независимые слои.

Core
├── Domain
└── Application

Infrastructure
├── DI
├── PostgreSql
├── JwtToken
├── LoginNotification
└── Redis
└── Messaging.Kafka

Web
└── Api

Domain

Содержит основные сущности приложения, бизнес-правила и контракты, необходимые для работы предметной области.

Application

Содержит прикладную логику:

  • обработчики команд и запросов;
  • DTO;
  • абстракции сервисов;
  • обработчики доменных событий.

Infrastructure

Реализации внешних зависимостей:

  • PostgreSQL через Entity Framework Core;
  • JWT-аутентификация;
  • Redis;
  • SignalR-интеграции;
  • асинхронный обмен сообщениями через Apache Kafka;
  • регистрация зависимостей.

Api

Точка входа приложения:

  • REST API;
  • SignalR Hub.

Используемые подходы

Clean Architecture

Зависимости направлены внутрь приложения.

  • Доменные модели не зависят от инфраструктурных реализаций.

Dependency Injection

Все внешние зависимости подключаются через интерфейсы и внедрение зависимостей.

SOLID

При проектировании проекта используются принципы SOLID для уменьшения связанности компонентов и повышения расширяемости системы.

Domain Events

Для обработки побочных действий используются доменные события.

После выполнения бизнес-операций создаются события, которые обрабатываются через dispatcher и зарегистрированные обработчики.

Это позволяет отделять основную бизнес-логику от уведомлений, интеграций и других вторичных процессов.

Event-Driven Architecture с Apache Kafka

Доменные события публикуются в Kafka и обрабатываются асинхронно фоновыми консьюмерами.

Repository + Unit of Work

Доступ к данным организован через репозитории и Unit of Work.

Это позволяет изолировать бизнес-логику от конкретной реализации хранения данных и выполнять связанные операции в рамках одной транзакции.


Реализованный функционал

Аутентификация

  • JWT Access Token;
  • JWT Refresh Token;
  • защита API-эндпоинтов.

Посты

  • создание постов;
  • сохранение в PostgreSQL;
  • публикация доменных событий в Kafka после создания.

Уведомления

Уведомления реализованы через SignalR.

Поддерживается доставка событий пользователям в режиме реального времени. Обработка событий создания уведомлений выполняется асинхронно через Kafka-консьюмер.

Чат

Реализована система диалогов между пользователями:

  • создание диалогов;
  • отправка сообщений;
  • получение сообщений в реальном времени через SignalR.

Leaderboard

Для рейтинга пользователей используется Redis.

Применяются:

  • Sorted Sets для хранения рейтинга;
  • Hashes для хранения дополнительной информации о пользователях.

Рейтинг формируется на основе количества созданных постов. Обновление рейтинга выполняется асинхронно через Kafka-консьюмер.


Технологии

  • ASP.NET Core
  • Entity Framework Core
  • PostgreSQL
  • SignalR
  • Redis
  • Apache Kafka (Confluent.Kafka)
  • JWT Authentication
  • Dependency Injection

Цели проекта

Проект создавался для практики современных подходов к построению backend-приложений:

  • проектирование многослойной архитектуры;
  • работа с real-time коммуникацией через SignalR;
  • использование Redis для высокопроизводительных сценариев;
  • применение событийной модели внутри приложения;
  • внедрение Event-Driven Architecture с брокером сообщений Kafka;
  • реализация асинхронной обработки событий с гарантией доставки;
  • построение расширяемой и поддерживаемой кодовой базы.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages