Перечень условных обозначений, символов, сокращений, терминов 3
Введение 4
1 Анализ требований к новым возможностям 6
1.1 Новые возможности для студентов и преподавателей 6
1.2 Новые возможности для мини-приложений 9
1.3 Новые возможности для разработчиков TSU.InTime 11
2 Анализ недостатков реализации второй версии приложения 12
2.1 Недостатки структуры приложения 12
2.2 Негибкая система задач по расписанию 15
2.3 Недостатки реализации модерации контента 15
2.4 Недостатки исходного кода 17
3 Рефакторинг приложения 20
3.1 Проектирование обновлённой структуры приложения 20
3.2 Реализация обновлённой структуры приложения 22
3.3 Рефакторинг работы с задачами по расписанию 30
3.4 Рефакторинг модерации контента 32
3.5 Исправление выявленных недостатков исходного кода 34
4 Реализация новых возможностей 37
4.1 Сохранение расписаний 37
4.2 Получение информации об учебной нагрузке преподавателей 39
4.3 Получение информации об образовании 42
4.4 Управление разрешениями мини-приложения 42
4.5 Ролевая система 46
4.6 Отправка уведомлений модераторам об отправке контента на модерацию 48
4.7 Изменение порядка страниц мини-приложения 51
4.8 Фича-тогглы 51
Заключение 52
Список использованных источников и литературы 53
Приложение А Реализация паттерна «Шаблонный метод» при рефакторинге изменения мини-приложений
TSU.InTime — платформа для студентов и преподавателей Томского государственного университета, позволяющая получать информацию о расписании любой группы или преподавателя и занятости аудиторий университета, а также многое другое. Платформа включает два клиентских веб-приложения и мобильные приложения для Android и iOS. Клиентские приложения взаимодействуют с серверным приложением, которое занимается получением данных от разных сервисов ТГУ и их преобразованием под нужды клиентских приложений.
Осенью 2021 года вышла версия 2.0 серверного приложения, в которой оно было переписано на язык программирования Kotlin с использованием фреймворка Ktor. На тот момент платформа предназначалась исключительно для получения расписания и проектировалась соответствующим образом. Однако в дальнейшем она предоставляла всё более многочисленные возможности: например, возможность бронирования аудиторий и управления бронированиями, отправки обратной связи разработчикам, получения данных об образовании или должности [2].
В 2023 году с версией 3.5 мобильные приложения TSU.InTime были преобразованы в суперприложения — большие приложениями с расширенным набором функций [3]. Это потребовало разработки платформы для публикации сторонними разработчиками своих мини-приложений, реализованных через конструктор или при помощи фреймворка React [4], для чего было разработано отдельное веб-приложение для разработчиков и доработано серверное приложение TSU.InTime. Итоговый список компонентов платформы представлен на рисунке 1.
В данный момент платформа активно развивается, предоставляя новые возможности. Однако их реализация затрудняется тем, что изначально она не была рассчитана на добавление функциональных возможностей помимо получения информации о расписании и наличие большого количества клиентских приложений.
Целью работы является разработка версии 3.0 серверного приложения TSU.InTime.
Исходя из рассуждений выше, были поставлены и выполнены следующие задачи:
1. Провести анализ требований к новым возможностям.
2. Провести анализ недостатков реализации второй версии приложения.
3. Провести рефакторинг приложения.
4. Реализовать новые возможности.
В результате проделанной работы был проведён рефакторинг серверного приложения TSU.InTime и разработана его новая версия с новыми возможностями. Все поставленные задачи были выполнены в соответствии с требованиями. Был проведён анализ недостатков реализации предыдущей версии приложения и возможных вариантов решения выявленных проблем. В рамках рефакторинга был проведён анализ различных архитектурных подходов, на основе которого была спроектирована новая структура приложения, позволяющая в дальнейшем при необходимости разбить приложение на микросервисы. В ходе рефакторинга удалось исправить недостатки реализации предыдущей версии, что позволило реализовать новую версию приложения с новыми возможностями.
На текущий момент новая версия серверного приложения полностью реализована и находится на этапе тестирования. В дальнейшем планируется добавление новых возможностей и возможное разделение приложения на микросервисы.
В ходе работы был получен опыт рефакторинга больших систем и проектирования многомодульной структуры, работы с Discord API и реализации сложных функциональных возможностей, таких как разрешения и ролевая система мини-приложений.