Fortech
  • Аутстаффинг
  • Аутсорс
  • Веб-разработка
  • Мобильная разработка
  • ИИ-решения
  • UI/UX-дизайн
  • Техническая поддержка
КейсыКонтактыО насБлогКарьера
Связаться
  • Аутстаффинг
  • Аутсорс
  • Веб-разработка
  • Мобильная разработка
  • ИИ-решения
  • UI/UX-дизайн
  • Техническая поддержка
КейсыКонтактыО насБлогКарьера
Связаться
Fortech
Юридический адрес
344011, Ростовская область, г. Ростов-на-Дону, Лермонтовская ул, д. 22, офис 6, 7, 8
ИНН / КПП
6154162274 / 616401001
ОГРН
1226100005922
ОКВЭД
62.01 Разработка компьютерного программного обеспечения
Код вида деятельности в области IT
1.01, 1.04, 1.05, 1.06

Услуги

  • Аутстаф
  • Аутсорс
  • Веб-разработка
  • Мобильная разработка
  • ИИ-решения
  • UI/UX-дизайн
  • Техническая поддержка

Компания

  • Кейсы
  • Контакты
  • О нас
  • Блог

Соцсети

  • ВКонтакте
  • MAX
  • Telegram
  • Workspace
  • YouTube

Аккредитованная IT-компания
Запись №25727 от 13.04.2022

Минцифры России

Позвать нас в тендер

  • bidzaar
  • B2B-Center
Контент © fortech.dev • 2026Политика конфиденциальностиПолитика обработки персональных данных
  1. Главная/
  2. Кейсы/
  3. Рефакторинг и новые функции бэкенда социальной сети

Рефакторинг и новые функции бэкенда социальной сети

Как мы за три месяца привели в порядок бэкенд на NestJS и добавили версионирование API и программу вознаграждений через СБП

О проекте

Клиент развивает социальную сеть для iOS и Android. Пользователи делятся фото и видео, ставят лайки, пишут комментарии, переписываются в мессенджере и публикуют анонсы своих мероприятий. Главная особенность в QR-кодах: код привязывается к аккаунту и к контенту, его можно оформить по-своему и даже заказать одежду со своим QR-кодом. Фотографии размечает модуль ИИ, его делает отдельная команда.

В феврале 2023 года аудит нашёл проблемы в кодовой базе бэкенда, и заказчик позвал Фортех на рефакторинг. Мы подключились к бэкенд-команде проекта. В ней было три разработчика на Node.js, рядом работали iOS- и Android-разработчики, два QA-инженера и менеджер проекта. Работа шла спринтами: ежедневные созвоны внутри команды, еженедельная встреча с аналитиками, тестирование каждой задачи, выкладка релизов через CI/CD.

Задача

Параллельно с рефакторингом бизнес ждал новые функции:

  • версионирование API, чтобы новые возможности не ломали старые версии приложений;
  • обновлённую авторизацию с refresh-токенами;
  • программу вознаграждений: активные пользователи получают выплаты за контент и приглашённых друзей;
  • управление приложением из админ-панели: отключать отдельные разделы и хранить минимальную поддерживаемую версию iOS и Android;
  • исправление накопившихся ошибок и актуальную документацию по изменённым модулям.

Реализация

Ограничения задачи

Мобильные приложения нельзя обновить у всех пользователей одновременно. Пока часть аудитории сидит на старой версии, бэкенд обязан отвечать ей по старым правилам.

Выплаты идут через систему быстрых платежей. Значит, в программе может участвовать только номер телефона, к которому привязан хотя бы один банк с поддержкой СБП.

Программа вознаграждений затрагивала всё сразу: структуру базы, основной API, админ-панель и оба мобильных клиента. Её нельзя было сделать в одном углу кода.

Рефакторинг шёл на живом продукте, без заморозки новых задач.

Решение

Версионирование API. Сначала команда сделала рабочие прототипы трёх подходов: версия в префиксе URL, версия в заголовке запроса и отдельные сборки бэкенда под каждую версию. Выбрали префикс в URL. По адресу сразу видно, к какой версии относится запрос, версии удобно описывать в Swagger, и такой вариант укладывался в ограничения мобильной команды.

Реализовали встроенными средствами NestJS. У каждого контроллера есть менеджер версий: он хранит общую версию контроллера и позволяет задать свою версию отдельному эндпоинту. На уровне сервисов новая логика появляется либо отдельным методом, который контроллер вызывает по своей версии, либо через маппер, который приводит старый ответ к новому формату.

Программа вознаграждений. В базе появились генерация и проверка уникальных кодов приглашения и реферальные ссылки. Для расчёта выплат реализовали индекс весомости контента по формуле бизнес-аналитика: от него зависит уровень вознаграждения. Задачи в cron-планировщике раз в месяц обнуляют служебные данные, чтобы рейтинг активных пользователей считался заново. Верификацию номера телефона переделали под СБП.

NestJSNode.jsTypeScriptPostgreSQLSwiftKotlin

Админ-панель. Администраторы сами настраивают параметры программы вознаграждений, выгружают отчёт о приведённых пользователях, выплатах и активности в контенте и отдельно работают с блогерами. Из админки можно выключить любой раздел приложения и указать минимальную версию iOS и Android, с которой приложение продолжит работать.

Ошибки и производительность. Исправили поиск по имени и фамилии, восстановление пароля по номеру телефона, дубли картинок у постов, импортированных из Instagram, сортировку историй при пагинации и пустой список закреплённых постов в «Актуальном». Оптимизировали тяжёлый запрос, который открывал диалог между пользователями.

Результат

Версионирование API прошло тестирование вместе с мобильной командой и вышло на основной сервер. Теперь бэкенд выпускает новые функции, не ломая приложение тем, кто ещё не обновился.

Программа вознаграждений прошла тестирование и доработки и была развёрнута в dev-окружении вместе с клиентскими приложениями. Параметры программы администраторы настраивают в админ-панели.

Контракт на рефакторинг завершили за три месяца. К его концу бэкенд ушёл заметно вперёд других команд проекта, а документация по изменённым модулям была актуальной.

Частые вопросы

Какой способ версионирования API выбрать для мобильного приложения?
На проекте сравнили три рабочих прототипа: версию в URL, в заголовке и отдельные сборки бэкенда. Префикс в URL оказался самым наглядным: версию видно в каждом запросе, она сразу попадает в документацию Swagger.

Как выплачивать пользователям вознаграждение через СБП?
Нужно проверять номер телефона на этапе регистрации в программе: участвовать может только номер, к которому привязан банк с поддержкой СБП. Расчёт выплат лучше вынести в отдельную логику с регулярным пересчётом рейтинга.

Можно ли рефакторить бэкенд, не останавливая разработку новых функций?
Да. На этом проекте рефакторинг модулей шёл в тех же спринтах, что и новые задачи, а документацию обновляли по ходу работы. Каждая задача проходила тестирование у QA-инженеров до релиза.

Сколько длился проект?
Три месяца, с февраля по май 2023 года.

Нужен похожий проект?

Расскажите о задаче — оценим сроки и стоимость за 2–3 рабочих дня.

Написать в Telegram →

Связанные услуги

  • Backend-разработка
  • Аутстаффинг специалистов

Другие кейсы

  • Обложка кейса Фортех: Платформа автодилера

    Бэкенд микросервисной платформы для сети автосалонов

    Как бэкенд-разработчик Фортех 1 год и 3 месяца работал в одной из двадцати команд автодилера: интеграции, общий NPM-пакет, новая авторизация и наблюдаемость

  • Seobase: микросервисная архитектура для SEO

    Seobase: микросервисная архитектура для SEO

    Разработка масштабируемого бэкенда на Nest.js и AWS для обработки миллионов SEO-запросов ежедневно.

  • Внутренняя информационная система колл-центра по вопросам здравоохранения и COVID–19

    Внутренняя информационная система колл-центра по вопросам здравоохранения и COVID–19

    Внутренняя информационная система колл-центра по вопросам здравоохранения и COVID–19

  • Обложка кейса Фортех: Сотовый оператор для фанатов

    Веб-платформа продажи eSIM для болельщиков футбольного клуба

    Как мы с нуля сделали многоязычный сайт на Next.js с оплатой через Stripe, а потом вернулись на проект на второй этап

Готовы начать?

Опишите задачу — пришлём оценку проекта за 2–3 рабочих дня или резюме специалистов за 1–2 рабочих дня.

  • partners@fortech.dev
  • +7 (989) 617-13-94
  • Телеграм: @fortech_sales