Разработать функционал, архитектурное решение которого будет отвечать принципам SOLID и следующим требованиям:
○ Стек: • C#, .NET 5 • MsSql Server or Postgress DB • Moq, NUnit • Microsoft ILogger, NLog • EF Core • Code standarts должен удовлетворять ms.net guideline
1 part:
○ Общие требования к реализации \ дистрибьюции • Домашнюю работу именовать module_10. • Функционал должен быть разделён по слоям и назначению на сборки. • Одна сборка должна содержать модели и бизнес-логику. • Другая сборка должна содержать функционал по работе с базой данных (Repository \ DAL). • Приложение должно уметь инициализировать дефолтную базу данных. Если база не создана - создать и заполнить данными, если создана - пересоздать.
○ Общие требования к настройкам
• Библиотека не должна зависеть от собственных настроек, настройки должны подтягиваться из вызывающего ее приложения.
• Библиотека не должна требовать какие-то специфичные ключи из web.config основного приложения.
• Настройки должны быть в следующем виде:
• Если настройка обязательна, она должна поступать извне, инициализироваться потребителем
• Если настройка опциональная, она должна быть опциональной с дефолтным значением
• Если это внутренние константы и т.д. - они должны быть внутренними
○ Обработка ошибок • При конфликтах и исключительных ситуациях библиотека должна выбрасывать строго типизированные "кастомные" исключения, определенные в ней. • Ошибки, произошедшие внутри библиотеки должны логироваться. • Библиотека не должна иметь зависимости на конкретный логгер. Реализация логгера и настройки логгера должны определяться потребителем библиотеки.
○ Описание сеттинга • Лектор ведет курс лекций. • Студент пришeл на лекцию с домашней работой - получил оценку от 1 до 5. • Студент пришел на лекцию без домашней работы - получил 0. • Студент пропустил лекцию - получил 0. • Отсутствие домашней работы студента не эквивалентно отсутствию на лекции (следует вести посещаемость).
○ Библиотека с бизнес-логикой должна содержать следующее: • Сущности: Лектор, Студент, Лекция, Домашняя работа. • CRUD операции для работы с лекциями • CRUD операции для работы с домашними работами • CRUD операции для работы со списком студентов \ лекторов
○ Необходимо имплементировать следующий функционал: • Генерация репорта о посещаемости, по названию лекции или по имени студента. Отчет поддерживает 2 формата - Xml / Json (формат свободный). Реализация должна поддерживать возможность легкой расширяемости под разные форматы репортов. • При пропуске студентом более 3х лекций необходимо отсылать Email на лектора курса и на студента. • При достижении текущей средней оценки за курс ниже 4х баллов необходимо отсылать SMS сообщение студенту.
○ К библиотеке должны предоставляться интергационные и unit тесты. • Unit тесты должны уметь проверять зависимости и их корректность, бизнес логику, вызовы методов. • Интеграционные тесты должны уметь создавать тестовые данные в базе и работать с ними, после тестов данные должны быть очищены. (InMemoryDatabase)
2 Part:
○ Необходимо подключить библиотеку к .NET Core web.api rest сервису