AnimalAllies

Moderate Pure Nim score 50/100 · last commit 2026-04-28 · 1 stars · tests present · no docs generated

Summary

Latest Version Unknown
License Unknown
CI Status Failing
Stars 1
Forks 0
Open Issues 0
Last Commit 2026-04-28
Downloads 0
Last Indexed 2026-09-06 07:35

Installation

nimble install AnimalAllies
choosenim install AnimalAllies
git clone https://gitlab.com/McConderEz/AnimalAllies

OS Compatibility

Platform Linux macOS Windows FreeBSD OpenBSD NetBSD Android iOS WASM Embedded
AnimalAllies - - - - - - -

README

AnimalAllies

License: MIT .NET ASP.NET Core RabbitMQ Entity Framework Core

AnimalAllies - платформа волонтёрской помощи животным, где оказывается ряд услуг: материальная помощь нуждающимся животным, поиск пропавших питомцев, оставление животного на временное на попечительство в виду отъезда и т.д.

Скриншоты

Будут добавлены, когда будет готова фронтенд часть платформы

Возможности backend`а:

  • [x] Аутентификация и авторизация на основе разрешений
  • [x] Подтверждение учётной записи по почте через сервис уведомлений
  • [x] Модуль управления животными и управления видами реализован по ddd
  • [x] CRUD операции над всеми сущностями: волонтёр, питомец, порода, вид
  • [x] Питомцы обладают позицией, которая отображает их очередность на помощь от волонтера. Позиция может быть изменена в зависимости от условий.
  • [x] Возможность обновления профиля пользователя, в качестве обычного клиента и в роли волонтёра
  • [x] Мягкое и полное удаление некоторых сущностей
  • [x] Хранение файлов (видео и фото) животных или аваторок пользователей в S3 хранилище, которое реализовано в видео отдельного сервиса
  • [x] Манипуляции с S3 хранилищем реализованы через AWS SDK S3 и Minio
  • [x] Для хранения файлов предусмотрена мультичастичная загрузка
  • [x] В модуле заявок на волонтёрство реализована следующая бизнес-логика по ddd:
  • [x] Подать заявку на волонтёрство, также проверяется наличие запрета на подачу через доменные события
  • [x] Взять заявку на рассмотрение админом (проверка пользователя закрепляется за ним)
  • [x] Одобрить заявку на волонтёрство, тогда через RabbiMQ будет отправлена команда на создание аккаунта волонтёра в модуле авторизации
  • [x] Отправка заявки админом на доработку с указанием проблемных мест
  • [x] Обновление заявки с последующей отправкой на дальнейшее рассмотрение
  • [x] Отклонить заявку на волонтёрство с указанием причины, после чего, через доменные события создастся запрет на подачу новых волонтёрских заявок сроком на неделю
  • [x] Все важные этапы в процессе рассмотрения заявки уведомляются по почте
  • [x] В модуле дискуссий реализована следующая бизнес-логика по ddd:
  • [x] Когда админ берёт заявку на рассмотрение в модулей заявок на волонтерство, то в модуле дискуссий через контракты создаётся сущность дискуссии между админом и пользователем для обсуждения вопросов.
  • [x] Реализована функциональность, которая закрывает дискуссию для обоих участников
  • [x] Реализована функциональность, которая позволяет удалять пользователям свои сообщения в дискуссии
  • [x] Реализована функциональность, которая позволяет отправлять сообщений в дискуссии
  • [x] Реализована функциональность, которая позволяет обновлять пользователям свои сообщения в дискуссии
  • [x] Реализованы разного вида запросы с пагинацией, фильтрацией и сортировкой. Для повышения производительности был использован CQRS. Для команд - ef core, для запросов - dapper
  • [x] Написаны юнит-тесты для всей бизнес-логики
  • [ ] Добавленно кэширование через Redis для повышения производительности запрос и улучшения пользовательского опыта
  • [x] Проект переведен на .NET 9
  • [x] Внедрен transactional outbox паттерн для обеспечения атомарности в распределенных транзакциях, а также вынесен в nuget пакет
  • [ ] Добавлены метрики через ElasticSearch, Kibana, Grafana
  • [ ] Настроен CI/CD
  • [ ] Написаны интеграционные тесты
  • [x] Покрытие юнит-тестами >= 70%
  • [ ] Покрытие интеграционными-тестами >= 70%
  • [ ] Реализация полнотекстового поиска на PostgreSql/ElasticSearch
  • [x] Реализован файловый сервис
  • [x] Реализован сервис уведомлений
  • [ ] Реализована OAuth 2, интегрированы следующие сервисы: Google, VK, Yandex
  • [ ] Реализован телеграм-бот
  • [ ] Реализован сервис событий
  • [ ] Реализован платёжный сервис
  • [ ] Реализован сервис поиска пропавших животных через ML.NET

Функционал Файлового сервиса:

  • [x] Скачивание файлов через presigned url
  • [x] Загрузка файлов через presigned url
  • [x] Удаление файлов через presigned url
  • [x] Получения мета-данных файлов из MongoDB
  • [x] Мультичастичная загрузка для больших файлов
  • [x] Проверка консистентности данных через Hangfire (запланированная задача смотри, сопоставляется ли записи из MongoDB наличие файла в S3 Minio)
  • [x] Реализован слой Communication для связи с другими сервисами
  • [x] Слой Communication и Contracts добавлен в nu-get
  • [x] Реализованы функции для одиночной и многофайловой загрузки

Функционал Сервиса уведомлений:

  • [x] Реализация отправки писем, используя MailKit и протокол SMTP
  • [x] Отправление письма пользователю для подтверждения регистрации
  • [x] Возможность настройки сервиса уведомлений: получать уведомление на Email, Telegram, Web
  • [x] Создание базовых настроек сервиса с включенными уведомлениями на Email по умолчанию при подтверждённом аккаунте
  • [x] Связь с бэкендом по RabbitMQ
  • [x] Слой Contracts добавлен в nu-get

Функционал Платежного сервиса:

  • [ ] В разработке
  • [ ] В разработке

Функционал Сервиса событий:

  • [ ] В разработке
  • [ ] В разработке

Функционал Телеграм бота:

  • [x] Реализована своя FSM, используя паттерн Command и State
  • [x] Кэширование контекст в Redis
  • [x] Авторизация в аккаунт
  • [x] Уведомление о статусе заявки
  • [x] Вспомогательные команды: /help, /info
  • [ ] Получение информации о своих животных (для волонтёра)

Функционал CV-сервиса:

  • [ ] В разработке
  • [ ] В разработке

Стек:

Вот список наиболее значимых фреймворков из предоставленного списка в формате markdown:

Фреймворк Версия Источник
AWSSDK.S3 3.7.414.1 nuget.org
Hangfire 1.8.15 nuget.org
Hangfire.Core 1.8.17 nuget.org
Hangfire.PostgreSql 1.20.10 nuget.org
Microsoft.AspNetCore.OpenApi 9.0.1 nuget.org
Microsoft.Extensions.Configuration 9.0.1 nuget.org
Microsoft.Extensions.Logging.Abstractions 9.0.1 nuget.org
Minio 6.0.4 nuget.org
MongoDB.Bson 3.1.0 nuget.org
MongoDB.Driver 3.1.0 nuget.org
MongoDB.Driver.Core 2.30.0 nuget.org
Serilog.AspNetCore 9.0.0 nuget.org
Serilog.Enrichers.Environment 3.0.1 nuget.org
Serilog.Enrichers.Thread 4.0.0 nuget.org
Serilog.Exceptions 8.4.0 nuget.org
Serilog.Sinks.Seq 9.0.0 nuget.org
Swashbuckle.AspNetCore 7.2.0 nuget.org
Swashbuckle.AspNetCore.Swagger 7.2.0 nuget.org
Swashbuckle.AspNetCore.SwaggerGen 7.2.0 nuget.org
Swashbuckle.AspNetCore.SwaggerUI 7.2.0 nuget.org
Mass Transit.RabbitMQ 8.3.6 nuget.org
MediatR 12.4.1 nuget.org
Dapper 2.1.66 nuget.org
Microsoft.EntityFrameworkCore 9.0.1 nuget.org
Microsoft.AspNetCore 9.0.1 nuget.org
Npgsql 9.0.2 nuget.org
Npgsql.EntityFrameworkCore.PostgreSQL 9.0.3 nuget.org
Scrutor 6.0.1 nuget.org
FluentValidation 11.11.0 nuget.org
FluentValidation.DependencyInjectionExtensions 11.11.0 nuget.org
FluentAssertions 8.0.1 nuget.org
xunit 2.5.3; 2.9.0; 2.9.3 nuget.org
xunit.runner.visualstudio 2.8.2; 3.0.2 nuget.org
Microsoft.Extensions.Logging 9.0.1 nuget.org
Moq 4.20.72 nuget.org
Serilog.AspNetCore 9.0.0 nuget.org

Установка и запуск

Посредством Docker

в процессе написания

Без использования Docker

в процессе написания

Конфигурация

в процессе написания