NearWave — досвід участі у розробці застосунку для знайомств

💡 Усі статті, обговорення, новини про Mobile — в одному місці. Приєднуйтесь до Mobile спільноти!

Мав нагоду долучитися до розробки нового додатку NearWave, який дозволяє надсилати приватні та публічні повідомлення людям поблизу.

Окрім знайомств, продукт можна використовувати і в побутових ситуаціях — наприклад, швидко попросити допомогу чи знайти павербанк неподалік :).

Product

NearWave — це мобільний додаток з функціоналом:

  • приватних і публічних повідомлень у радіусі;
  • live-відстеження геолокації;
  • пошуку користувачів за географічною близькістю.

My tasks

Я працював у складі команди над мікросервісною архітектурою з використанням gRPC. Основні зони відповідальності:

  • Identity Servic — авторизація, управління акаунтами, профілями та ролями;
  • Proximity Service — live-трекінг координат користувачів, пошук людей поруч через гео-запити (MongoDB).

Tech stack

  • Node.js / NestJS — основа бекенду;
  • TypeScript — статична типізація;
  • gRPC — взаємодія між мікросервісами;
  • PostgreSQL + TypeORM — зберігання користувацьких даних;
  • MongoDB (Geo queries) — пошук користувачів за геолокацією;
  • Redis — кешування та зберігання сесій;
  • JWT та ролева система доступів;
  • Docker — контейнеризація сервісів;
  • WebSockets — інтеграція з live-геолокацією.

Challenges

Під час роботи були й непрості ситуації. Наприклад, коли реалізовував ендпоінти для реєстрації та автентифікації користувачів, зіткнувся з проблемою інтеграції між мікросервісами через gRPC.

Частина контрактів (прото-файли) була реалізована некоректно до мене:

  • методи сервісів не співпадали з оголошеннями в клієнті;
  • виникали помилки через неправильні шляхи до .proto файлів;
  • інтерфейси не відповідали фактичній логіці.

У результаті сервіс не повертав access_token, і довгий час було незрозуміло, де саме виникає проблема — в моїй реалізації чи в контрактах. Після кількох ітерацій рефакторингу вдалося привести .proto до консистентного стану, і лише тоді інтеграція запрацювала стабільно.

Цей кейс навчив мене:

  • завжди ретельно перевіряти узгодженість контрактів між мікросервісами;
  • документувати зміни в .proto та синхронізувати їх з командою;
  • не поспішати шукати помилку «у своєму коді», якщо підозра є на базові інтерфейси.
  • і, мабуть, найголовніше — пам’ятати, що .proto генерує camelCase-поля, навіть якщо у файлі вони були написані у snake_case 😅.

Lessons learned

Проєкт дав мені практичний досвід у:

  • побудові мікросервісної архітектури;
  • інтеграції сервісів через gRPC;
  • роботі з геолокаційними даними (MongoDB, live update);
  • оптимізації бекенд-логіки для real-time сценаріїв;
  • колаборації в команді над продакшн-рішенням.
👍ПодобаєтьсяСподобалось3
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Підписатись на коментарі