202012, Продажа Недвижимости, Сергей Кубатко
Объявления - это статьи, которые публикуются пользователем в открытом доступе. У объявления может быть выставлены характеристики объекта (цена, площадь и т.д. и т.д.), а также возможность реагировать на объявление (личное сообщение, встреча, конференция, подписать договор).
Инициализация проекта на Gradle
Цель:
- создать проект на Котлин;
- практически разобраться в Gradle Kotlin DSL;
- опубликовать проект в github;
- подключить тестовые фреймворки.
- Создать проект в github.
- Создать корневой проект Gradle с использованием Kotlin DSL.
- Создать мультиплатформенный подпроект common.
- Создать подпроект common для бэкенда
- Подключить фреймворки для тестирования в обоих подпроектах и сделать примеры тестов.
- Вынести все версии библиотек в файл конфигурации.
- Опубликовать полученные изменения в отдельную ветку "m2-init-project" в github
- Создать Pull Request в github и отправить ссылку на него в домашнем задании в ЛК Otus.ru
Сделать транспортные модели для выпускного проекта с использованием одной из рассмотренных в модуле технологий
Цель:
- освоить ООП в Котлин;
- создать внутренние и контекстные модели;
- спроектировать API выпускного проекта;
- освоить на практике Kotlin Multiplatform и/или OpenAPI;
- создать транспортные модели (DTO-классы) для API выпускного проекта.
- В подпроект common бэкенда добавить внутренние модели и контекст.
- Создать подпроект в Gradle "*-transport-main-mp", в котором будут размещаться модели API с использованием технологии Kotlin Multiplatform
- Создать подпроект в Gradle "*-transport-main-openapi", в котором будут размещаться модели API с использованием технологии OpenAPI
- Создать автоматический тест для проверки корректности сериализации и десериализации моделей.
- Создать мапперы между транспортными и внутренними моделями.
Сделать модуль фреймворка для выпускного проекта
Цель:
- освоить работу с одним из фреймворков: Spring Framework, KTOR, Kotless, либо какой-то другой по вашему выбору;
- научиться работать с шаблоном Dependency Injection;
- выполнить интеграцию транспортных моделей в выпускное приложение;
- обеспечить выполнение стабовых запросов приложением на фреймворке.
- Сделать subproject "-app-", где - сущность для вашего выпускного проекта (user, profile, article, etc.), а - ваш фреймворк (spring, ktor, kotless).
- Подключить модуль транспортных моделей.
- Сделать заглушки, отдающие фейковый результат на запрос.
- Сделать автоматические тесты.
Создание модуля бизнес-логики
Цель:
- изучить шаблон проектирования chain of responsibility;
- создать модуль бизнес-логики;
- перенести заглушки из фреймворка в модуль бизнес-логики;
- выполнить валидацию входящих данных;
- встроить модуль бизнес-логики в выпускное приложение.
- создать в отдельном модуле библиотеку для работы по шаблону chain of responsibility;
- создать модуль бизнес-логики;
- создать обработчики для заглушек разных тестовых кейсов;
- создать автоматические тесты для различных кейсов для тестирования заглушек;
- выполнить валидацию входящих запросов;
- сделать автотесты для валидации.
Обработка асинхронных запросов
Цель:
- изучить особенности асинхронных фреймворков: по выбору Websocket, RabbitMQ, Kafka;
- научиться запускать сервера сообщений в docker-контейнерах;
- реализовать асинхронное API в выпускном проекте с использованием одного из фреймворковх
- выбрать асинхронный фреймворк;
- реализовать контроллер для приема асинхронных сообщений;
- подключить модуль бизнес-логики к контроллеру;
- обеспечить отправку в сервер сообщений;
- выполнить тестирование с TestContainers.
Разработать модуль хранения (базы данных) для выпускного проекта
Цель:
- узнать об особенностях работы с БД в Kotlin;
- исследовать шаблон проектирования "репозитарий";
- научиться создавать InMemory репозитарий;
- разработать репозитарий на одной из баз данных: SQL (Postgres или другой), NoSQL (Cassandra, DynamoDB или другой);
- выполнить тестирование репозитариев;
- интегрировать репозитарии в выпускное приложение.
- В common бэкенда сделать интерфейс репозитария. При реализации использовать подход TDD (вначале тест, потом реализация).
- Сделать реализацию InMemoryDB репозитария.
- Интегрировать репозитарий в выпускное приложение.
- Выполнить интеграционное тестирование приложения с репозитарием.
- Сделать subproject "-storage-", где - тип базы данных (postgressql, cassandra, dynamodb).
- Сделать в модуле реализацию репозитария для выбранной базы данных.
- Сделать тесты для репозитария.
Управление пользователями
Цель:
- изучить способы и механизмы аутентификации и авторизации в бэкенд-приложениях;
- реализовать один из способов авторизации и аутентификации в выпускном приложении;
- выполнить настройку доступов к функциям приложения.
- выполнить настройку аутентификации в выпускном приложении;
- добавить правила авторизации в модуль бизнес-логики;
- выполнить тестирование правил доступа.
Сделать монитор для приложения выпускного проекта
Цель:
- изучить возможные системы мониторинга приложения и ее общую архитектуру;
- научиться пользоваться одним из наборов утилит для работы с метриками и логами - ELK Stack-ом;
- внедрить логирование в приложение, обеспечивающее отправку логов в ELK Stack;
- выполнить сбор логов и отрисовку дашбордов с аналитикой работоспособновти и бизнес-процессов приложения.
- Сформировать файл docker-compose.yaml и настроить запуск в нем всех компонентов ELK Stack-а.
- Настроить корректное логирование в проекте.
- Обеспечить отправку логов в Elasticsearch через Logstash.
- Построить отчете в Kibana.
Разработка серверного приложения на Kotlin
Цель: За время обучение вы разработаете для своего портфолио серверное приложение, которое будет способно обслуживать десятки тысяч запросов в секунду от клиентов.
Приложение по вашему выбору должно быть одно (или больше) из следующих:
- API с монолитной архитектурой на Kotlin и Spring, которое хранит свои данные в PostgreSQL;
- Высоконагруженное API с микросервисной архитектурой на базе фреймворка KTOR и хранящее данные в Cassandra;
- Высоконагруженное API с бессерверной архитектурой на базе фреймворка Kotless, развернутое на AWS, и работающие с DynamoDB.
Все ключевые классы покрываем тестами, разрабатываем в TDD.
Для выполнения выпускного проекта, требуется выполнить все домашние задания, закрепленные к первому уроку каждого модуля. Выполнив все ДЗ, вы получите полностью рабочее приложение. Это приложение и будет вашим выпускным проектом.
Выпускной проект сдается в виде ссылки на репозиторий в github. В репозитарии обязательно должен быть заполнен файл Readme.md с описанием проекта.