Привет, друзья! 👋
Завершил пятый спринт моего пет-проекта, агрегатора IT-вакансий: 8 из 8 задач закрыты ✅
Цель была в том, чтобы вакансии можно было искать по ключевым словам. Что получилось:
▪️ 🔎 Поиск. Вакансии ищутся по названию, навыкам и описанию, в том числе по началу слова и словоформе. При вводе появляются подсказки с частыми фразами, а синонимы должностей учитываются: «разработчик» находит и «программиста», и «developer». Поиск сделал средствами PostgreSQL, без отдельного поискового движка, и проверил сквозным тестом на реальной базе.
▪️ ⚡️ Скорость проверок. Раньше каждый файл e2e-тестов backend поднимал свой контейнер PostgreSQL. Теперь на весь прогон один сервер, а у каждого файла своя база. В CI e2e backend стали идти около 2,5 минут вместо 3,5-4, unit-тесты frontend выполняются за 10-15 секунд вместо 30-55. Задание с браузерными тестами перевёл на готовый образ Playwright: установка системных пакетов раньше иногда занимала больше 13 минут и обрывала запуск.
▪️ 🛠 Параллельно закрыл ещё 31 задачу техдолга: обновил зависимости, дописал правила разработки в документацию, вынес логику из тел тестов и заменил безымянные числа константами во всех трёх компонентах, разделил слишком большие файлы тестов, сделал интерфейс на узких экранах от 320 px и единый стиль фокуса клавиатуры.
▪️ 🔐 Безопасность. Закрыл ещё 13 задач: оповещения по зависимостям, динамическое сканирование сайта (ZAP) в CI, соответствие OWASP записано в документе, страницы ошибок работают под CSP, номер страницы списка ограничен.
Автоматизированных тестов теперь больше 1750.
Главный вывод ретроспективы: из 51 слитого pull request только 8 относились к поиску. Остальное съели зависимости, безопасность и приведение старого кода к новым правилам. Правило в документации дороже, чем кажется, когда его записываешь: оно тянет за собой переделку уже написанного. Теперь вместе с правилом сразу заношу задачу на приведение кода и оцениваю её объём.
Курьёз спринта: в последний день сканер секретов в CI упал, не найдя ни одного секрета. Он просто не смог скачать самого себя: ссылка на архив с релизом открывалась в браузере мгновенно, а из CI и терминала отвечала ошибками 503 и 504. Тот же архив через API скачался, и контрольная сумма совпала. Проверку не менял и не отключал, а дождался, пока ссылка снова заработает.
Следующий спринт — фильтры вакансий: по навыкам, зарплате, формату работы и уровню позиции. Значения можно будет не только показать, но и исключить. Следите за продолжением! 🚀