#АппЗа14 дней
14 дней. О программистов. 1 директор. Что из этого получится?
Читайте в нашем новом цикле постов.

Директор Центра разработки «Создаватель» Виталий Дудка поставил себе вызов — написать собственное приложение, не прибегая к помощи разработчиков.
Личный опыт, лайфхаки и инсайты — всё честно и без фильтров!
Содержание
Челлендж - Апп за 14 дней БЕЗ программиста
В школе у меня был компьютер БК 0010-01 и я что-то писал на Бейсике, позже закончил ЮУрГУ по специальности Вычислительные машины комплексы, системы и сети. Но именно "Программистом" поработал несколько лет после универа 20+ лет назад. Так что "тыжпрограммист" —не про меня.
До сегодняшнего дня ни одной строчки кода для Маркета Битрикс24 не писал 🤔
Что нельзя (сам себе запретил):
- отвлекать команду "Создаватель"
- привлекать программистов
Что можно (сам себе разрешил):
- пользоваться открытой документацией
- общаться с ИИ
Срок испытания - 14 дней до 1 августа.
👍 Если получится - докажу себе, что это возможно и подумаю как нам ускорить упаковку идей в аппы.
😱 Если не получится - ничего никому не докажу, просто облажаюсь на глазах изумленной публики.
---
P.S. Все текущие успехи "Создавателя" — не моя заслуга. Я только автор компании, а сейчас наша команда —это суперразработчики и мегаменеджеры под руководством какого надо директора Андрея 🚀


День 2 из 14 - Ищу идею
#АппЗа24дней
По условиям испытания — начинаю с полного нуля. В нашем бэклоге несколько сот идея для аппов разных калибров, добавим еще несколько 😜
Для разогрева пообщался с парой LLM (gpt-nano и grok4), попросил идеи аппов. Полный лог общения выложу в комментариях (не нашел как сюда картинку вместе с файлом прикрепить).
Попросил идеи с "ежедневным запуском". вот что предложил грок:
1. Ежедневный архиватор задач
2. Напоминание о просроченных сделках
3. Проверка синхронизации контактов
4. Ежедневный снимок продаж
5. Очиститель устаревших лидов
6. Автообновитель статусов
7. Создатель бэкапов чатов
8. Оценщик эффективности сотрудников
9. Генератор задач из календаря
10. Отправитель оповещений о комментариях
Мне зашла 10-я... Тут простая сущность Задачи и её можно расширить в будущем. Показывать не только комменты, сделать "Утренний дайджест" - что случилось вчера.
Приходишь на утренний созвон, а у тебя перед глазами вся история того что напилилось к утру — самый хитрый 🦊
Настраиваю окружение
#АппЗа14дней
Итак, с чего начать?
Мне нужны IDE и CVS. Но заморачиваться некогда, да и на моём уровне знаний это не даст эффкта. Так как я решил для себя хардкорно проползти путь новичка, то с осознанной глупостью и неосознанной отвагой я выбрал то, что было под рукой и не требовало установки 👻
Моя IDE —это TextEdit с включенным в настройках Plain-текстом. Да, нет подсветки. Да, нет подсказок. Но кто говорил, что будет легко...
Моя CVS —это Finder. Просто буду сохранять каждое изменнеие в отдельный файл. Топорно, но сработает.
Минимально-достаточное окружение готово 🚀


Как создать и запустить новый апп?
#АппЗа14дней
Какой-то код есть... и надо его запустить.
Но как?Я же договорился с собой не спрашивать у наших программистов. Спросил у ИИ, он, на удивление, дал мне пошаговый алгоритм куда жать и какие пункты меню выбирать.
Итак, первое локальное приложение сохранено... Или нет,,,
При сохранении выдает ошибку, что нет файла index.html Это было странно, так как я своими глазами видел, что заархивированая только что папка это файл содержит.
Пара минут мучений (на самом деле полчаса и два кофе) и я конечно догадался, что архивировать надо не папку, а её содержимое. Понимаю как это выглядит с точки зрения разработчиков Битрикс24, но, блин, это вообще неочевидно 🙈
Пара седых волос в бороде...
Win-1251 или KOI-8?
#АппЗа14дней
ИИ —это хорошо... Но не с первого раза 😂
Описал задачу. Взял за основу идею из ответа LLM, немного добавил подробностей и действительно, без понимания как это все работает. какой-то результат получился.
Я скормил ему документацию от Битрикс24, но или в контекст не влезает, или ИИ просто забил на изучение доп материалов, но в итоге я увидел кракозябры.
Прямо почувствовал себе ГПТ-программистом после месячных курсов 🤔
Хорошо, что сколько-то лет программирования было когда-то давно, а еще когда-то давно у сайтов были версии под Win-1251 и KOI-8, поэтому кракозябры вместо текста не испугали.
Короткий поиск в Яндексе дал волшебную строчку и вуаля —какие-то буквы появились 👍


Ура! Апп запустился
#АппЗа14дней
Я вообще не понимаю что написано в коде. Просто скопировал и вставил (ну не считая того, что не сразу то и вставилось).
Но не важно. Главное — начало положено.
Считайте это моим Hello World 👍
И даже нативный попап Битрикс24 с выбором сотрудника после нескольких танцев с бубном показывается... Фантастика...
Правда при заполнении полей - никакие задачи в таблице не появляются.. Но это я щас за 5 минут...
Рано радовался...
#АппЗа14дней
Я уже не знаю что делать. Перепробовал всё. ИИ мне уже переписал с начала и до конца весь скрипт. Я уже не хочу получать никакие комментарии к задачам, хотя бы просто задачи вывести.
Последние полчаса тычет меня в какой-то токен.
Похоже без фонарика в этой тёмной комнате я не проберусь.
Решил завтра читать матчасть.
Ну ладно я не читал. но ИИ похоже тоже не читал и с видом знатока реально фантазирует и придумывает какой-попало код.
Я это понял после того как нашел в API замену двум названиям полей, которые Грок уверенно выдавал за поля Битрикс24. После этого страница стала отображаться, но логика так и не заработала.. В общем, сегодня я пас...


День 3 из 14 - Ничего не работает пока
#АппЗа14дней
Сегодня собрал все возможные грабли новичка.
Ничего в итоге не заработало (был момент надежды, но нет).
Мой вывод за сегодня — ИИ без понимания архитектуры и минимальных знаний языка —не помощник.
Высплюсь и завтра сяду за учебники 😁
Курс: REST API Битрикс24
#АппЗа14дней
Всё таки учиться —это здорово.
После первой и неудачной попытки вслепую напилить апп я перешел к стратегии "Понять... и запустить". Думаю, ИИ хорошо пишет с нуля, примеров на ютубах много. Но ветераны в комментариях вчера сошлись во мнении, что тут мы находимся внутри сложной платформы со своими особенностями и шероховатостями.
В общем, пошел грызть гранит.
Спасибо @brainmixer за лаконичные уроки от 1 до 5 минут и без воды.
Пожелайте мне энтерпрайза 🖖или парадайза 🌴... Ну хорошего чего-то пожелайте 😃


Минимальный код для старта
#АппЗа14дней
Многое стало понятно...
Как будто ты лежишь на спине, а сверху раскинулось бесконечное звёздное небо 🌟
Если честно, дальше 16 урока не прошел, потому что удержаться от соблазна запустить пример из урока было невозможно, а потом начал менять-менять-менять... Ну и курс на паузе)
Но есть плюсы — код прочел внимательно и понял чего и за чем происходит. Так выглядит прогресс в эволюционном движении от потребителя 🍺 к создавателю 🧠
День 4 из 14 - Курс Битрикс24
#АппЗа14дней
Сегодня пришлось отбросить новомодных электронных помощников и включить органические нейроны.
Результатом доволен, завтра продолжу пилить апп 🚀


Список задач за вчера
#АппЗа14дней
Дату для выборки вынес в переменную, тк в аппе нам нужна будет вчерашняя, а для отладки удобнее сегодняшняя (поменял и сразу проверил).
ИИ все пытается мне напилить красивый вывод данных, но это только мешает, тк удлиняет код. Пока сделал самую простую табличку, но и ее скорее всего сокращу до списка строк через \n.
Пока пилю в "программистском дизайне" 🤖
- Почему так долго пилю? Да фиг знает, подстраиваюсь под особенности ИИ, который норовит сломать переписать код на каждом шаге 😅
Как меня обманул ИИ 🙂
#АппЗа14дней
В одном из промптов я попросил ИИ сделать код более надежным. Кто бы мог подумать как он это интерпретирует 🤬
Потом час (или даже больше) искал почему у меня в одном месте работает функция, а в другом такая же не работает...
Оказалось ИИ просто сохранил массивом задачи, которые я ему показал в консоли, и этот массив перекрывал результаты от метода.
Ох уж эти шайтан-машины.
А что будет когда мы разрешим роботам с таким ИИ за нашими внуками ухаживать? Страшно подумать 🙈
Кстати, интересно ли про затраты на ИИ?
Для разных ИИ цены могут отличаться в 50 раз, хотя по качеству и скорости такой рзаницы нет.
Ушел за валерьянкой... 🚑


День 5 из 14 - Основа аппа
#АппЗа14дней
Смешанные чувства по итогам дня.
Вроде есть работающий и более-менее понятный для меня скрипт. А с другой стороны уже который день нахожу всё новые гравбли в неожиданных местах.
Пока мой апп умеет выводить простой список задач, которые изменились за дату (потом будет за вчера). Завтра думаю отвлечься от задач и разобраться с отправкой оповещений.
Всё таки сложная работа унаших разработчиков. Респект и уважуха за терпение 👍
Выбираем имя и рисуем иконку
#АппЗа14дней
Решил в первой половине немного овлечься от кодинга (точнее промптинга) и развлечься будущей упаковкой.
Корневой смысл аппа - дать утреннюю подбивку "что вчера было" по Задачам (и позже по CRM) , чтобы быть во всеоружии на утренней летучке и подбить статус на утро для плана на день.
После некоторых размышлений (без ИИ) остановился на названии "Сводка". С коллегами еще не обсуждал, название рабочее, может до Маркета не доехать.
Идею иконки подсказал ИИ, а отрисовал наш дизайнер @tema_dudka
Почему зеленый?
Потому что у нас 41 апп и когда надо было аппы сгруппировать—родилось цветовое кодирование.
Все отчеты по Задачам — зеленые. Но цвет тоже пока не точно, так как вдруг я успею добавить CRM, тогда фон может стать синим 😄
Как вам нейминг?
Считывается ли идея "утренней сводки" по иконке (самая правая)?


Магическое число Битрикс24
#АппЗа14дней
Столкнулся с очередной "детской" болезнью джуна. Никак не появлялась задача, которую только что собственноручно изменил. Ковырялся-ковырялся, а потом случайно увидел в консоли, что количество элементов в выборке ровно 50.
Всплыли смутные воспоминания из созвонов по другим аппам про то, что колл-методы отдают по 50 элементов, в батче тоже по 50 запросов можно упаковать (я это пока не умею).
Получается 50 (а совсем не 24) — магическое число Битрикс.
Пока решил, что ограничусь этими 50 элементами, не буду усложнять, мы выбираем по дате, а в ближ будущем будет по дата+пользователь. Живых людей, которые могут 50+ задач перелопатить в сутки я пока не встречал, так что предположим, что их не много.
В любом случае надо будет оптимизировать запросы и запихивать их в батч, так что пока не буду тормозить на этом. Перехожу к уведомлениям.💬
Уведомления — это легко
#АппЗа14дней
Квест с уведомлениями оказался легче, чем я думал...
Как вызывать методы я знаю, документация есть. Тут даже ИИ не понадобился. Всё заработало.
// Отправка сообщения себе
BX24.callMethod(
'im.notify.personal.add',
{
"USER_ID": userID,
"MESSAGE": htmlContent
},
function(res) {
if (res.error()) {
console.error('Ошибка:', res.error());
} else {
console.log('Уведомление успешно отправлено');
}
}
);
Правда потом я понял, что есть нюанс. Это именно уведомления. То есть "колокольчик" по-битриксовому. А чтобы в чат сообщение отправить —это уже чатбот нужен, с ним пока разбираться не буду. Это не основной функционал и уведомлений для старта будет достаточно.
Еще тут подсказали — надо, чтобы по клику можно было перейти на задачу. Для этого как я понимаю надо текущий домен узнать. Покопаю...


Как показать ссылку на Задачу?
#АппЗа14дней
Я нашел два типа ссылок на задачи в Битрикс24. Через workgroupe (нам не подходит тк задача может быть не в группе) и через personal (ссылка через "Мои задачи").
Чтобы построить ссылку нужен домен и ИД пользователя. Домен я худо-бедно добыл, хотя и не уверен, что это верная реализация и будет везде работать. Нашел варианты:
- BX24.getAuth (скорее всего не то)
- BX24.getDomain (взял этот)
Вроде бы ничего сложного — сформировать html:
<a href...></a>
Но мне так и не удалось сделать так, чтобы ссылка открывалась 🥹
В console.log ИД и Домен верные.
Ссылка формируется правильно.
Но после рендеринга страницы Битрикс24 подменяет её на какой-то свой CDN и задачу не открыть...
Понимаю, что где-то очень рядом собака порылась. Но сегодня уже не осилю. Отложим до лучших времён.
Уверен, что более глубокое понимание работы JS или помощь ветеранов меня в конце концов спасут от гиперссылкоминоза 🛟
День 6 из 14 - Плюс упаковка, минус ссылки
#АппЗа14дней
Итак, сегодня все начиналось хорошо.
С утра подумал над неймингом = "Сводка".
Потом появилась иконка.
Потом очень быстро заработали уведомления.
Потом я нашел как выдергивать Домен...
А потом, когда до вершины дня остался последний шаг, Битрикс24-монстр сгрыз все мои ссылки на Задачи 🐲
Много фунционала еще надо напилить до релиза, поэтому задачу со ссылками записал на будущее, а завтра планирую продолжить отлаживать выборку данных 😅


Шесть дат в Задаче
#АппЗа14дней
Я наивно полагал, что у задачи может быть только три даты: создания, изменения и завершения.
Посмотрев в результаты запроса к API обнаружил 6 дат.
После экспериментов (в документации нет этого) предполагаю, что в них хранится:
createdDate - создание задачи
activityDate - добавление коммента
changedDate - изменение полей
statusChangedDate - изменение статуса
dateStart - дата старта видимо
closedDate - завершение задачи
При этом полезная statusChangedDate есть не во всех фильтрах (судя по документации), а жаль. Видимо с получением статуса будет не так просто как хотелось бы.
По трекингу времени тоже пока неясно... Сколько же интересных открытий впереди 🤪
Комментарии — готово
#АппЗа14дней
Это было немного больно...
Пока разбирался с task.commentitem.getlist ИИ два раза "оптимизировал" код. Сначала я не поддавался, но когда очередной новый код заработал —сдался. Так что как минимум плюс один заход на разбор спагетти.
Еще ИИ не всегда с первого раза дает рабочий код и я начал "угадывать" типовые ошибки. Уже списочек завел под это 💣
С другой стороны —да и ладно; Работает же 😅
Итак, комментарии я получаю из истории задачи. Там много всего интересно как оказалось. Мб в будущем и еще какие-то данные оттуда подтяну.
Тем более Битрикс24 снова удивил:
в task.commentitem.getlist нет фильтра по дате
(Ну или я не нашел). Так что по каждой задаче приходится всю историю тянуть хотя пока мне из всей истории нужны пара записей.
Так что если вы обладатель магических знаний как добавить фильтр при запросе истории задачи —буду благодарен за науку 🐣


LLM errors №1 — путает Case
#АппЗа14дней
Я перебрал с десяток ИИ и могу с уверенностью утверждать, что код не всегда работает сразу после копи-паста.
Одна из частых ошибок (по крайней мере с кодом для Битрикс24):
Ошибка №1
Неверный case в параметрах методов
И я тут не знаю в чем причина: или ИИ невнимательно читает документацию, которую я указываю в промпте. или он исходит из того, что в такой современной платформе как Битрикс24 должны быть какие-то общие правила для именования одтнотипных элементов программного кода... Наивыный ИИ 😂
Прошло всего несколько дней с тех пор как я прочел первую строчку документации по REST API, но этого было достаточно, чтобы не надеяться на однообразие и порядок.
Ну и блок "Мы еще обновляем эту страницу" почти в каждом нужном мне методе умиляет 🫣
С другой стороны —хорошо хоть такая документация есть 👍
День 7 из 14 - Экватор с комментариями
#АппЗа14дней
День ушел на обход архитектурных проёмов всего одного метода... 🐌
Но теперь в "Сводке" есть комментарии. Думаю как интерфейсно вывести селектор Вчера-Сегодня. И надо еще добавить в отчет затреченные часы...
Сегодня, чтобы разобраться с ИИ-кодом, пришлось залезать в документацию по JS. Когда-то давно нейронные связи с этими знаниями у меня уже были... Но за столько лет истончились, поэтому отращиваю новые 😅


Сколько вешать в граммах?
#АппЗа14дней
На иллюстрации - мои реальные расходы на ИИ.
Как видно график неравномерный. В первые дни —акттивный тест, потом день разработки по цене кофе.
В ИИ-сервисе мне доступны:
gpt-4.1-nano
gpt-4.1-mini
gpt-4.1
codex-mini
o4-mini
o3-mini
o3
o3-pro
o1-mini
o1
o1-pro
gpt-4o-mini
gpt-4o-mini-search-preview
gpt-4o-search-preview
gpt-4o
gpt-4-turbo
gpt-4
gpt-3.5-turbo
deepseek-r1-0528
deepseek-chat-v3-0324
deepseek-r1
deepseek-r1-fast
deepseek-chat
gemini-2.5-flash-lite
gemini-2.5-flash
gemini-2.5-pro-preview
gemini-flash-1.5-8b
claude-sonnet-4
claude-opus-4
claude-3.7-sonnet
claude-3.7-sonnet-thinking
claude-3.5-haiku
claude-3.5-sonnet
claude-3-opus
llama-4-scout
llama-4-maverick
llama-3.3-70b-instruct
sonar
sonar-reasoning
sonar-pro
sonar-reasoning-pro
sonar-deep-research
grok-4
grok-3-mini-beta
grok-3-beta
Разница в цене между разными LLM до x100 раз (!!!).
Я пока выбрал:
- deepseek-r1-0528 - простые задачи
- grok-4 - глубокие раздумья
А кто чем пользуется?
Плюс статусы задач
#АппЗа14дней
Не знаю насколько понятен такой смайл для смены Статуса, но пока его поставил в Сводку 🤔
Со Статусами оказалось ожидаемо непросто. Я пока ориентируюсь на даты. Если для комментариев я нащупал в filter недокументированную дату (поле = activityDate, фильтр = ACTIVITY_DATE), то для аналогичной вроде бы даты смены статуса не срабатывает (поле = statusChangedDate, пробовал STATUS_CHANGED_DATE). Допускаю, что моя логика "угадывания" называний неверна или мб в ходе тестов какая-то другая бага помешала мне выбрать верный путь...
В общем, пока решил выводить текущий STATUS. Есть ощущение, что можно как-то получить историю смены статусов из tasks.task.history.list, но сначала хочу, для полноты картины, добавить в сводку трудозатраты. Хочется уже какую-то preMVP версию собрать и зафиксировать. что хоть чего-то начало получаться 😅


День 8 из 14 - Статусы в спагетти
#АппЗа14дней
Сегодня проковырялся со Статусами. В итоге не особо получилось что хотел (а хотел Было → Стало). Пока просто вывожу текущий статус задачи, причем, надо понимать, что это статус на момент формирования Сводки, а совсем не на дату отчета. Ну то есть, если формируем отчет за Вчера, то статус будет за Сегодня.
Но долго провозился, поэтому пока так оставил. Еще вернусь к Статусам после Трудозатрат.
А еще, ближе к вечеру проснулся перфекционист и решил прическать код. На 80% уверен, что рано и мб еще придется все перелопачивать, но если он проснулся, то кто ж его усыпит...
В общем, стало чуть красивее и пока работает, но еще очень-очень черновик 🧻
Фактическое время в задачах - готово
#АппЗа14дней
Последний элемент по моему плану — это затраченное сотрудником время. В типовом функционале Задач фактические часы фиксируются на вкладке "Время" или путем запуска-остановки счетчика времени (это также отражается на вкладке).
Итого у нас будут все изменения задач со статусами, комментариями и трудозатратами. Это достаточно полная картина для того, чтобы можно было называть отчет "Сводкой".
Накопленный функцинал — это уже минимальный полезный продукт. Хотя опыт создания нескольких десятков аппов в качестве продакта подсказывает, что это скорее нулевая версия и после первых же обсуждений нового аппа с командой находятся неучтенные кейсы или критичные ошибки...
Но посмотрим... Вдруг я с первого раза угадал архитектуру 😜


Надежное определение завершенных
#АппЗа14дней
Заметил, что закрытые задачи не попадают в список изменений.
Статус отображается верно, но события почему-то нет.
Оказалось, в некоторых случаях у завершенной задачи CHANGED_DATE не меняется. Хотя CLOSED_DATE меняется всегда (и за то спасибо!).
Пришлось дописать отдельную выборку таких задач и добавление таких событий. В целом прошло хорошо, хотя и не с первого раза.
Ну почти... Щас еще немного поколдую с внешним видом отчета, пока он чего-то совсем программистский и можно будет показать кому-нибудь 😉
Анимация — бесполезная, но симпатичная
#АппЗа14дней
Под вечер подустал и попросил ИИ придумать что-нибудь для ожидания времени загрузки отчета. На нашем тестовом портале со средним количеством задач 5-10 секунд за сегодня.
Сначала баловался с анимированными ASCI-персонажами. Но чето все топорно получалось. Процессс этот затягивает, плюс ИИ периодически норовит сломать основной функционал 😜
Но потом придумал лаконичную анимацию, которая кажется не раздражает 👍
Заодно в очередной раз вычитал код, кое где улучшил (как мне показалось).
Пусть отлежится ночь и завтра покажу что получилось 💣


День 9 из 14 — нулевая версия MVP
#АппЗа14дней
Апп "Сводка" v.0
- Дает простой текстовый отчет по итогам сегодняшнего дня.
- Группирует события по задачам, выводит автора изменения.
- Учитываются создание, изменение и завершение задачи.
- Показываются трудозатраты.
- Показываются тексты комментариев.
Что дальше?
- Добавить день вчерашний.
- В идеале запоминать выбранные настройки в юзеропшинс.
- Вернуть отправку в колокольчик (ИИ порезал этот функционал и я не заметил).
- Подумать с кэшированием данных тк выполняется довольно долго.
- Попробовать запихнуть уведомления в бэкграунд-воркер, чтобы в колокольчик сваливалось при входе на портал.
- Сделать три уровня отчета - Мой. Мой отдел. Компания.
Спать...
Хобби —это хорошо. но впереди новая трудовая неделя 🌛
LLM errors №2 — Выдумывает имена
#АппЗа14дней
Вот еще один распространенный кейс.
Мы знаем, что документация не всегда полная. плюс я не уверен, что ИИ всегда читает ссылки, которые я подкидываю в промпты. Но при этом задача ИИ —выдать готовый результат... Ну или результат очень похожий на готовый 😄
В итоге, когда контекст короткий (мы только начали диалог)...
ИИ частенько "додумывает" имена методов и параметры, которые явно не указаны в промпте или в документации.
Иногда ошибки сразу видно в консоли, а иногда только скурпулёзный дебаггинг помогает.
Это не претензия к ИИ, скорее это особенность. Надо сказать, что когда пару раз исправишь, дашь ему на вход "работающий скрипт" и попросишь "точечные изменения", фантазии пропадают и результат более предсказуемый 👍


Не только Сегодня, но и Вчера
Внезапно непросто оказалось добавить вчерашние события.
ИИ много раз переписывал скрипт и я уже не уверен, что там все логично. То ли текущий объем кода на грани возможностей ИИ (хотя задача пока крайне простая), то ли я не умею готовить...
Теперь выводится сводка на Вчера и затем ниже на Сегодня. Пока самый простой вариант —последовательный вывод. Уже думаю над селектором, делал подход, но сразу хорошо не заработало и пока отложил.
В общем, кое как эта штука зашагала, но надо будет все проверять. Есть ощущение, что по пути мы что-то потеряли 🫣
День 10 из 14 — Вчера и Сегодня
#АппЗа14дней
Появилась сводка за вчера. Пока все на одной странице друг за другом.
Анимация в процессе отладки отвалилась, да и фиг с ней пока. Завтра буду внимательно выверять данные и проверять, что никакие ранее добавленные выборки не слетели.
Потом подумаю про селектор и юзеропшинс.
Сегодняшнее состояние скрипта мне нравится гораздо меньше вчерашнего. Нет уверенности, что все верно 😱


Сводка за вчера неполная 🫣
Логика выборки сейчас такая:
- Собираем все созданные задачи за период.
- Собираем все измененные и завершенные.
- Собираем все активные и по ним комменты.
- Собираем трудозатраты.
- Формируем отчет.
То есть главное на что я ориентировался в изменениях - это дата в задаче.
И все было хорошо пока сводка была за сегодня.
Но эта логика сломалась когда я стал строить за вчера. Потому что если задача менялась вчера, а затем еще сегодня, то во вчера она уже не попадает. Дата за сегодня перезаписала дату за вчера...
Вот такой вот архитектурный проёМ 🤔
Пошел думать новую логику. Буду переделывать апп почти с нуля...
День 11 из 14 - Новая логика
#АппЗа14дней
Первый MVP комом.
Логика была неверная.
Нова логика такая:
- Объединяем в один список ИД задач, где любая из дат попадает в период (Создана / Изменена / Активна / Завершена). Тут возможно достаточно Изменена и Активна. но я в этом не уверен на 100% пока, поэтому собираю все 4.
- Прохожу список и скачиваю историю каждой задачи.
- Если есть комментарии - догружаю.
- Если есть трудозатраты - догружаю.
- Формирую отчет.
Это все пока жутко тормозит и не сильно надежно работает, буду отлаживать дальше... 🐌


Теперь все задачи
Вчера начал переделывать с нуля логику работы аппа.
Напомню, была коллизия с задачами, которые менялись и вчера, и сегодня.
Но теперь апп выбирает все задачи измененные вчера.
Проверка идет по 4 полям с датой:
CREATED_DATE
CHANGED_DATE
ACTIVITY_DATE
CLOSED_DATE
Возможно это еще оптимизирую позже тк пока не отделил кейсы, где создание и закрытие не влияют на изменение. Но эти 4 запроса (я смог только 4 отдельных запроса сделать) выполняются очень быстро пока не они влияют на производительность.
Тормозит...
#АппЗа14дней
Если разбить по шагам:
- Выбрать все задачи
- Выбрать историю для них (этого достаточно, чтобы оценить активность в разрезе авторов)
- Выбрать тексты комментариев
- Выбрать описания к трудозатратам
То больше всего тормозят комментарии.
Отсюда интерфейсное решение —выводим сначала таблицу с активностью авторов, а по клику на автора подгружаем его комментарии.
Есть еще вариант с фоновой загрузкой комментариев после отображения таблицы авторов, но тут. надо поэкспериментировать.
Работа кипит... 😅


Таблица авторов с активностью
Разделил шаги сбора активности и подгрузки комментариев.
Стало ощутимо быстрее, хотя и не мгновенно.
Теперь при запуске видно активность в разрезе сотрудников (авторов изменений). Они отсортированы (активные вверху) и рядом с каждым видно:
- Количество измененных задач
- Компактно активность в виде иконки события и количества
В таком виде с первого взгляда можно оценить активность каждого сотрудника за вчера или за сегодня, а кликнув на него - увидеть детали (все события отсортированные по времени с текстом изменений).
Уже полезно. Доволен 🐘
День 12 из 14 — Авторы с активностью
#АппЗа14дней
Сегодня фактически с нуля переписан весь алгоритм. Визуально есть шероховатости, да и комментарии грузятся не так быстро как хотелось бы.
Но минимум готов и это круто. Так как в этот раз апп собрался значительно быстрее, чем в первом подходе 🚀
Из идей ускорения есть батч, кэш и лейзи-лоад. Но двигаюсь небольшими шагами и стараюсь фиксировать промежуточный результат. А то 14 дней скоро закончатся, а аппа всё нет... 😱


Интересно, что дальше?
Читайте продолжение в телеграм-канале