Проект направлен на воссоздание серверной части Jellyfish, важнейшего компонента приложения для обмена сообщениями Jellyfish, разработанного для платформ Android и iOS. Бэкэнд тщательно разработан в соответствии с принципами предметно-ориентированного проектирования и чистой архитектуры. Коммуникация внутри системы организуется с помощью библиотеки Meditr, в которой особое внимание уделяется разделению команд и запросов (CQS) для повышения ясности кода и разделения задач.
Хотя нынешнее развертывание работает как монолит, архитектура по своей сути является гибкой. Он может быстро адаптироваться к парадигме микросервисов за счет включения таких инструментов, как шлюзы API (например, Ocelot, YARP), разделение ответственности за команды и запросы (CQRS) и фоновые процессы синхронизации баз данных. Последний использует оптимистическую блокировку с управлением версиями строк для обеспечения согласованности между базами данных чтения и записи.
В ожидании будущих улучшений архитектура предусматривает реализацию асинхронной связи через AMQP поверх RabbitMQ. Это позволит системе эффективно обрабатывать события через очереди, закладывая основу для надежного поведения публикации/подписки.
Модульное тестирование — это фундаментальная практика, применяемая в этом проекте для проверки правильности и функциональности методов и потоков процессов. Хотя признается, что не каждый метод тестируется индивидуально, применяется сбалансированный подход. Принцип заключается в том, чтобы избегать чрезмерного проектирования и чрезмерного тестирования, находя золотую середину, которая гарантирует тщательное тестирование критически важных процессов и методов.
Поведение модульного тестирования соответствует стандартной методологии arrange, act, assertion , которая является распространенным и эффективным подходом в тестировании программного обеспечения. Эта методология обеспечивает структурированную основу для настройки условий тестирования, выполнения конкретных действий и проверки ожидаемых результатов.
Сквозное тестирование с помощью Postman:
Сквозное тестирование проводится с использованием Postman с использованием импортированной созданной документации Swagger API. Postman служит мощным инструментом для комплексного тестирования API, позволяющим проверить функциональность всей системы. Интеграция документации Swagger API повышает эффективность процесса тестирования, предоставляя понятный и интерактивный интерфейс для изучения и проверки конечных точек API.
Документация
Обширная документация:
В проекте особое внимание уделяется комплексной документации, чтобы облегчить ее использование и понимание для всех заинтересованных сторон. На данный момент документация включает в себя:
Документация по диаграмме сущностей-отношений (EER):
Подробная документация EER была подготовлена, чтобы дать представление о модели данных и отношениях внутри системы. Эта документация служит ценным ресурсом для разработчиков, помогая четко понять основную структуру базы данных.
Документация Swagger:
В проекте используется документация Swagger для обеспечения подробной и интерактивной документации по API. Swagger предоставляет интуитивно понятный и удобный интерфейс для изучения и понимания доступных конечных точек API, параметров и ответов. Эта документация важна для разработчиков, поскольку обеспечивает плавную интеграцию и взаимодействие с предоставленными API.
Развертывание
Наследие через двоичный файл или с докер-контейнером.
Мотивация и цели проекта
Тестирование NET MAUI на нескольких мобильных платформах:
Основной мотивацией запуска этого проекта является тщательное тестирование NET MAUI на различных мобильных платформах. Это включает в себя комплексное тестирование и оптимизацию для обеспечения безупречной производительности и совместимости на указанных платформах, что дает ценную информацию сообществу NET MAUI.
Предоставление пользователям возможности размещать собственную инфраструктуру обмена сообщениями:
Одна из ключевых целей этого проекта — расширить возможности пользователей, предоставив им возможность самостоятельно размещать свою инфраструктуру обмена сообщениями. Это направлено на демократизацию доступности служб обмена сообщениями, позволяя пользователям контролировать свою коммуникационную среду.
Оптимальное использование ресурсов:
Примечательным побочным эффектом этой инициативы является акцент на обеспечении хостинга инфраструктуры обмена сообщениями с минимальными аппаратными ресурсами. В частности, проект нацелен на эффективное использование, позволяя пользователям запускать инфраструктуру на доступном оборудовании, таком как Raspberry Pi. Этот акцент на эффективности использования ресурсов согласуется с приверженностью проекта обеспечению доступности и устойчивости.
Безопасность и будущие функции
Сквозное шифрование и защита конфиденциальности:
Обеспечение безопасности пользовательских данных имеет первостепенное значение. Предстоящие шаги перед выпуском первой производственной версии будут включать в себя тщательную реализацию сквозного шифрования. Это обеспечит надежный уровень защиты конфиденциальной пользовательской информации. Кроме того, внедрение шаблона «забываемой полезной нагрузки» еще больше повысит конфиденциальность за счет минимизации хранения данных в соответствии с передовыми практиками обеспечения конфиденциальности.
Боты поддержки ИИ:
Учитывая будущее взаимодействия с пользователем, планируется интегрировать в систему ботов поддержки искусственного интеллекта (ИИ). Рассматривается возможность использования передовых технологий искусственного интеллекта, таких как Google Llama или ChatGPT. Эти боты, управляемые искусственным интеллектом, повысят вовлеченность пользователей, оптимизируют процессы поддержки и будут способствовать созданию интеллектуального и оперативного пользовательского опыта.
Блокчейн-инфраструктура:
Изучая передовые технологии, существует перспективная концепция исследования возможности размещения инфраструктуры системы на блокчейне. Будут оценены преимущества технологии блокчейн, включая повышенную безопасность, децентрализацию и прозрачность. Этот дальновидный подход направлен на то, чтобы подготовить систему к будущему и привести ее в соответствие с новыми тенденциями в области безопасных и децентрализованных архитектур.
Сделать
Бэкэнд:
Docker.compose для JellyfishBackend, PostgreSql
Ограничитель скорости для конкретных действий
IModelBinder + IModelBinderProvider для HttpQuery и HttpBody для разрешения и проверки данных, находящихся внутри «ApiDataTransferObject».
CRUD + Фильтр поиска (переход от http-запроса (json) к модели фильтра dto к выражению linq в sql)
Выражения Linq в sql: переопределять/создавать операторы в объектах значений и моделях домена и переводить их в выражения linq.
Функциональность кэша (в настоящее время IMemoryCache)
Конечная точка сброса пароля: включите сброс пароля с помощью функции «Редактировать пользователя»; изменение логики домена: UpdateUser, команда updateuser + обновление обработчика.
Шифрование пароля в базе данных с использованием передового метода шифрования.
Аутентификация/авторизация: сопоставление данных Jwt (претензий и т. д.) с базой данных.
Запускайте события, если утверждения токенов не соответствуют ролям из базы данных или если местоположение IP (географический IP-адрес для IPv4+v6 или пользовательский агент, отличный от создания токена) сильно отличается. Уведомляйте пользователей по электронной почте.
Загрузка файлов / изображения профиля пользователя / вложения из сообщений или медиа-файлов Jellyfish / стратегия хранения: избегайте хранения в базе данных из соображений производительности. Внедрите стратегию кэширования, создайте кеш во время запуска серверной части. Проведите проверку на вирусы, используя контент и внешнюю службу искусственного интеллекта (ссылка Azure=, AWS), чтобы обнаружить загрузки материалов с содержанием насилия или порнографии.
Цепочка ответственности за вирусы и недопустимый/насильственный контент (реализована абстракция)
Домен: реализация проверок бизнес-логики чата.
GDPR: модуль GDPR, позволяющий сделать доступными все действия GDPR (отчетность, удаление и т. д.).
Реализация представления/инфраструктуры/применения запросов чата/сообщения/дружбы с объектом домена: используйте SignalR для уведомления целевых пользователей и т. д. → Обработчик событий
Сквозное шифрование для пользователей Jellyfish. Последовательность: пользователи, которые будут взаимодействовать друг с другом, будут делиться открытыми ключами. Когда сообщение будет создано пользователем-A, оно будет зашифровано открытым ключом пользователя-B. Сообщение будет отправлено на серверную часть и будет сохранено (зашифровано) в базе данных. Пользователь-B получил сообщение по сигналу или опрашивает все неподтвержденные сообщения из серверной части (опрос путем повторного подключения, когда соединение пропало, например, потеряно соединение с радиосотой). Пользователь-Б подтверждает отправку сообщения на серверную часть (полученный рейк будет показан в приложении пользователя-А). Пользователь-Б расшифровывает сообщение с помощью закрытого ключа.
Удалить сообщения, которые успешно доставлены в цель
SSL-шифрование для серверной части.
Документация Swagger
Перезапишите некоторые ответные сообщения ASP.NET Core по умолчанию с помощью фильтра: например, ошибка HTTP 422 или несанкционированный ответ -> перезапишите в ответ об ошибке JSONAPI ----------> Presentation.Extension.JsonApiResultExtension.
FluentValidation: подготовьте валидаторы с обработкой ответов для ответа на ошибку JSONAPI из-за ошибок проверки. CommandHandlerValidators уже реализованы: ValidationPipelineBehavior; только правило проверки требует определения в конструкторах каждого CommandValidation.
Реализации ограничивающего контекста чата:
POST: /api/v1/chat, Создать чат (только с друзьями, требования доменной логики определяют правило, согласно которому для существования чата необходимо хотя бы одно сообщение)
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен (состояние завершения удалено из-за правила «Новый бизнес»)
Выполнение
Тест (Юнит-тест)
GET: /api/v1/chat/{chatId}, получает чат
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
PUT: /api/v1/chat/{chatId}. Обновите информацию о чате, такую как описание и имя.
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
УДАЛИТЬ: /api/v1/chat/{chatId}, Удалить чат
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
PUT: /api/v1/chat/{chatId}/picture/{messageId}, устанавливает изображение чата.
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
PUT: /api/v1/chat/{chatId}/member/{userId}, добавить пользователя в чат (новый участник)
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
УДАЛИТЬ: /api/v1/chat/{chatId}/member/{userId}, удалить участника из чата
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
PUT: /api/v1/chat/{chatId}/admin/{userId}, назначить действие администратора
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
УДАЛИТЬ: /api/v1/chat/{chatId}/admin/{userId}, отменить действие администратора
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
POST: /api/v1/chat/{chatId}/message, действие создания сообщения
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
PUT: /api/v1/chat/{chatId}/message/{messageId}, действие обновления сообщения
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
УДАЛЕНИЕ: /api/v1/chat/{chatId}/message/{messageId}, действие удаления сообщения
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
Реализации пользовательского ограничивающего контекста:
POST: /api/v1/user/password/reset/request, создает запросы на сброс пароля.
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
POST: /api/v1/user/password/change/{id?}, изменение конечной точки пароля для пользовательского интерфейса администратора.
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
POST: /api/v1/user/password/reset/{base64Token}, сбрасывает пароль с помощью полученного пользователем URL-адреса для сброса пароля (ссылка из почты)
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
POST: /api/v1/user/activation/{base64Token}. Активируйте пользователя с помощью полученного им URL-адреса активации (ссылка из почты).
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
GET: /api/v1/user/user-types, получить все доступные типы пользователей.
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
GET: /api/v1/user/messenger/{guid}, получить профиль мессенджера от пользователя (меньше информации, чем в профиле пользователя по умолчанию)
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
POST: /api/v1/user/friend/request, Создать запрос на дружбу
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
УДАЛИТЬ: /api/v1/user/friend/request, удалить запрос на дружбу
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
GET: /api/v1/user/friend/request, Получить запросы на дружбу
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
POST: /api/v1/user/friend/request/accept, принять запрос на дружбу
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
ПОЛУЧИТЬ: /api/v1/user/friend, найти друзей
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
УДАЛИТЬ: /api/v1/user/friend, Удалить друга
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
PUT: /api/v1/user/{id}/profile-picture, Добавить изображение профиля
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
УДАЛИТЬ: /api/v1/user/{id}/profile-picture, Удалить изображение профиля
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
ИСПРАВЛЕНИЕ: /api/v1/user/{id}/role, назначить роль пользователю
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
УДАЛИТЬ: /api/v1/user/{id}/role, отозвать роль у пользователя
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
POST: /api/v1/user/, Создать пользователя
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
GET: /api/v1/user/{id}, получить пользователя
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
PUT: /api/v1/user/{id}, обновить пользователя
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
УДАЛИТЬ: /api/v1/user/{id}, удалить пользователя
Презентация
Выполнение
Тест (тест серого ящика)
Инфраструктура
Выполнение
Тест (тест серого ящика)
Приложение
Команда/запрос
Валидация (Fluentvalidation)
Обработчик
Обработка событий
Домен
Выполнение
Тест (Юнит-тест)
Веб-интерфейс:
Проверьте все http-запросы к серверной части и отловите все состояния, прежде всего ошибки, поэтому http-коды 4xx и 5xx.
Иконки: Иконки MudBlazor.
Навбар:
Функции
Конфиденциальность
Раздел помощи:
NavBar как боковая панель со справочными точками
Тело с поиском точек помощи
Популярные статьи
Вкладки «Справка» для Android и iOS в разделе «Помощь».
Блог:
Последняя информация о медузах
Скачать:
Ссылка на магазины приложений
Нижний колонтитул:
Медуза значок
Авторское право
Условия использования и политика конфиденциальности
Иконки социальных сетей с каналами
Возможности (из веб-интерфейса):
Снэкбар для уведомлений (любое действие, например, изменение пользователя, получение уведомления об услуге x/y и т. д.) => https://mudblazor.com/comComponents/snackbar#5ac08464-80c3-4c34-8cac-24f0947275e7
Страница входа с функцией восстановления пароля
Выходные данные
GDPR:
Отказ от ответственности в отношении файлов cookie
Приборная панель.бритва:
Графики:
Исходящая почта
Зарегистрированные пользователи по сравнению с предыдущим месяцем
Фон диаграммы слегка серый
_Host.cshtml: изменение сообщений по умолчанию
Приложение.бритва:
СтраницаNotFound
Signup.razor (Вход + Регистрация):
Расположение компонентов
Страница успеха после регистрации
Пользователи.razor:
CRUD+Поиск (возможно, поиск с помощью эластичного поиска)
Действие по сбросу пароля отдельно
Просмотр изображения профиля пользователя (изображение MudBlazor)
Загрузить изображение профиля пользователя (MudBlazor FileUpload)
Пользовательское редактирование/удаление журнала аудита (все события в отдельной таблице)
Просмотр друзей/запросов дружбы пользователей в исходящих сообщениях
Здоровье.бритва:
Уточнение представления проверки работоспособности (в настоящее время представление проверки работоспособности по умолчанию в виде презентации)
Блог:
CRUD-сообщения
Встроенные медиа
Блог: вертикальная загрузка сообщений с помощью вертикальной полосы прогресса MudBlazor (анимированной)
Блог: сообщения отображаются на временной шкале с порядком слева и справа.
Аутентификация: Таймер в фоновом режиме, который будет виден в пользовательском интерфейсе, когда срок действия токена истекает всего на 5 минут, после чего начнется отслеживание активации. Когда пользователь запускает действия в пользовательском интерфейсе, токен автоматически обновляется в серверной части.
Хранилище сеансов: сохраните последний посещенный URL-адрес.
Собственный профиль
Вид
Редактировать/Управлять
Мобильное приложение:
Удалите старую структуру DTO и модели, а также старые пространства имен.
Переписать в новую структуру
Кэш сообщений/пользователей в SQLite, адаптация к новой структуре
Добавьте новые WebApiClient и SignalRClient (клиент WebAPI из WebFrontend в общий, новый клиент SignalR (типизированный клиент) в общий для повторного использования)
Перехватчик сообщений: поддержание цепочки вызовов для процедур сообщений/уведомлений (основная функция обмена сообщениями).
Перепишите URL-адреса целевых конечных точек для серверной части в новую структуру серверной части.
Чат: обмен сообщениями (интерфейс пользователя и приложение)
Чат+Список друзей: См. профиль
Чат: обмен сообщениями (отправка вложений)
Автономные характеристики, противоположные WhatsApp и т. д.:
Пометить сообщения как невозможные для создания снимков экрана: эти сообщения размыты из-за создания снимков экрана. То же самое по аватарке.
Групповые календари: совместное планирование частных мероприятий в календаре группового чата.
Забота о том, чтобы поделиться: пометьте сообщения как недоступные для общего доступа, чтобы не беспокоиться о том, что делиться ими запрещено :)
Возможность самостоятельно разместить инфраструктуру обмена сообщениями. Никакой зависимости от других!
Против насилия: сегодняшние частные чаты, такие как Telegramm, подвергаются нападкам со стороны людей из-за насилия и контента для взрослых. Таким образом, медуза дает возможность избежать расшаривания такого контента. Алгоритм машинного обучения оценивает медиафайлы, которые будут переданы через мессенджер. Если распознается агрессивный контент, отправленное сообщение будет исключено. ** Требуется Azure AI Vision или аналогичный алгоритм машинного обучения **
Передача местоположения с помощью отслеживания в реальном времени: необязательно, если вы находитесь в группах или частных чатах, ваши движения будут транслироваться в прямом эфире участникам чата, когда включен режим наблюдателя (доступно только на карте отслеживания в реальном времени).
Забвение: Право на забвение является краеугольным камнем сегодняшнего GDPR. При удалении учетной записи все данные (а также сообщения чата, которыми поделились с друзьями) будут удалены. Конечно, СМИ тоже. Я знаю, что удаление медиафайлов, отправленных участникам чата, не является современной практикой, но каждый человек имеет право на то, чтобы его созданные данные могли быть забыты.
Опросы/голосования: В примере с WhatsApp: голоса также будут доступны в медузах.
Общий:
DNS Preconf, имена файлов хостов Windows, такие как Docker
Определение лицензии
Условия эксплуатации
Пожертвование
Инструкция по установке и эксплуатации
Следите за обновлениями .
Админ-панель Альфа 0.1
Панель управления
Управление пользователями (Users.razor) с нумерацией страниц и поиском
Управление пользователями (Users.razor) – Добавить/Изменить
Управление пользователями (Users.razor) — Удалить
ВИДЕО: Предварительный просмотр фильтра перехода от Http-запроса к выражению Linq и, наконец, к запросу MySql через ORM (динамически)/THUMBNAIL PNG НИЖЕ (HREF)
Расширенная диаграмма отношений сущностей
Кодометрический анализ после добавления MobileApp в решение
Рабочий процесс непрерывной интеграции с Github Action
Тестирование из ядра (варианты использования и предметная область)