Skip to content

otuskotlin/otuskotlin-202012-propertysale-ks

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

otuskotlin-202012-propertysale-ks

202012, Продажа Недвижимости, Сергей Кубатко

Постановка задачи

Объявления - это статьи, которые публикуются пользователем в открытом доступе. У объявления может быть выставлены характеристики объекта (цена, площадь и т.д. и т.д.), а также возможность реагировать на объявление (личное сообщение, встреча, конференция, подписать договор).

Домашнее задание 1

Инициализация проекта на Gradle

Цель:

  • создать проект на Котлин;
  • практически разобраться в Gradle Kotlin DSL;
  • опубликовать проект в github;
  • подключить тестовые фреймворки.
  1. Создать проект в github.
  2. Создать корневой проект Gradle с использованием Kotlin DSL.
  3. Создать мультиплатформенный подпроект common.
  4. Создать подпроект common для бэкенда
  5. Подключить фреймворки для тестирования в обоих подпроектах и сделать примеры тестов.
  6. Вынести все версии библиотек в файл конфигурации.
  7. Опубликовать полученные изменения в отдельную ветку "m2-init-project" в github
  8. Создать Pull Request в github и отправить ссылку на него в домашнем задании в ЛК Otus.ru

Домашнее задание 2

Сделать транспортные модели для выпускного проекта с использованием одной из рассмотренных в модуле технологий

Цель:

  • освоить ООП в Котлин;
  • создать внутренние и контекстные модели;
  • спроектировать API выпускного проекта;
  • освоить на практике Kotlin Multiplatform и/или OpenAPI;
  • создать транспортные модели (DTO-классы) для API выпускного проекта.
  1. В подпроект common бэкенда добавить внутренние модели и контекст.
  2. Создать подпроект в Gradle "*-transport-main-mp", в котором будут размещаться модели API с использованием технологии Kotlin Multiplatform
  3. Создать подпроект в Gradle "*-transport-main-openapi", в котором будут размещаться модели API с использованием технологии OpenAPI
  4. Создать автоматический тест для проверки корректности сериализации и десериализации моделей.
  5. Создать мапперы между транспортными и внутренними моделями.

Домашнее задание 3

Сделать модуль фреймворка для выпускного проекта

Цель:

  • освоить работу с одним из фреймворков: Spring Framework, KTOR, Kotless, либо какой-то другой по вашему выбору;
  • научиться работать с шаблоном Dependency Injection;
  • выполнить интеграцию транспортных моделей в выпускное приложение;
  • обеспечить выполнение стабовых запросов приложением на фреймворке.
  1. Сделать subproject "-app-", где - сущность для вашего выпускного проекта (user, profile, article, etc.), а - ваш фреймворк (spring, ktor, kotless).
  2. Подключить модуль транспортных моделей.
  3. Сделать заглушки, отдающие фейковый результат на запрос.
  4. Сделать автоматические тесты.

Домашнее задание 4

Создание модуля бизнес-логики

Цель:

  • изучить шаблон проектирования chain of responsibility;
  • создать модуль бизнес-логики;
  • перенести заглушки из фреймворка в модуль бизнес-логики;
  • выполнить валидацию входящих данных;
  • встроить модуль бизнес-логики в выпускное приложение.
  • создать в отдельном модуле библиотеку для работы по шаблону chain of responsibility;
  • создать модуль бизнес-логики;
  • создать обработчики для заглушек разных тестовых кейсов;
  • создать автоматические тесты для различных кейсов для тестирования заглушек;
  • выполнить валидацию входящих запросов;
  • сделать автотесты для валидации.

Домашнее задание 5

Обработка асинхронных запросов

Цель:

  • изучить особенности асинхронных фреймворков: по выбору Websocket, RabbitMQ, Kafka;
  • научиться запускать сервера сообщений в docker-контейнерах;
  • реализовать асинхронное API в выпускном проекте с использованием одного из фреймворковх
  • выбрать асинхронный фреймворк;
  • реализовать контроллер для приема асинхронных сообщений;
  • подключить модуль бизнес-логики к контроллеру;
  • обеспечить отправку в сервер сообщений;
  • выполнить тестирование с TestContainers.

Домашнее задание 6

Разработать модуль хранения (базы данных) для выпускного проекта

Цель:

  • узнать об особенностях работы с БД в Kotlin;
  • исследовать шаблон проектирования "репозитарий";
  • научиться создавать InMemory репозитарий;
  • разработать репозитарий на одной из баз данных: SQL (Postgres или другой), NoSQL (Cassandra, DynamoDB или другой);
  • выполнить тестирование репозитариев;
  • интегрировать репозитарии в выпускное приложение.
  • В common бэкенда сделать интерфейс репозитария. При реализации использовать подход TDD (вначале тест, потом реализация).
  • Сделать реализацию InMemoryDB репозитария.
  • Интегрировать репозитарий в выпускное приложение.
  • Выполнить интеграционное тестирование приложения с репозитарием.
  • Сделать subproject "-storage-", где - тип базы данных (postgressql, cassandra, dynamodb).
  • Сделать в модуле реализацию репозитария для выбранной базы данных.
  • Сделать тесты для репозитария.

Домашнее задание 7

Управление пользователями

Цель:

  • изучить способы и механизмы аутентификации и авторизации в бэкенд-приложениях;
  • реализовать один из способов авторизации и аутентификации в выпускном приложении;
  • выполнить настройку доступов к функциям приложения.
  • выполнить настройку аутентификации в выпускном приложении;
  • добавить правила авторизации в модуль бизнес-логики;
  • выполнить тестирование правил доступа.

Домашнее задание 8

Сделать монитор для приложения выпускного проекта

Цель:

  • изучить возможные системы мониторинга приложения и ее общую архитектуру;
  • научиться пользоваться одним из наборов утилит для работы с метриками и логами - 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 с описанием проекта.

About

Курс OTUS "Kotlin Backend Developer"

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages