Skip to content

WTEL-9725: Return contact etag in agent chats response - #140

Merged
vlad-marusyk-wt merged 3 commits into
mainfrom
fix/WTEL-9725/contact-etag-in-agent-chats
Sep 1, 2026
Merged

vlad-marusyk-wt merged 3 commits into
mainfrom
fix/WTEL-9725/contact-etag-in-agent-chats

Conversation

@vlad-marusyk-wt

Copy link
Copy Markdown
Contributor

Проблема

Роут GET /api/agent/chats повертав обʼєкт contact без поля etag (лише id, type, name). Фронт будує посилання на картку контакта за contact.etag, тож отримував undefined, і перехід на картку у режимі Read only ламався.
etag контакта не зберігається в БД, його кодує сам сервіс contacts, тому chat_manager, який збирає контакт напряму з таблиць contacts.* через SQL, віддати etag не міг.

Вирішення

chat_manager не вираховує etag, а доспрашує його у самого сервіса contacts і дозаповнює відповідь. Запит іде одним батчем на сторінку під токеном агента. Якщо contacts недоступний, список чатів усе одно повертається, просто без etag.

@kirychukyurii kirychukyurii left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

а чи розглядався варіант локального кодування etag? ми ж все одно ходимо в contacts.contact, а витягнути додатково ver з неї - не зовсім проблема
у нас навіть окремий пакет є для роботи з etag: https://github.com/webitel/webitel-go-kit/tree/main/pkg/etag
можливо варто на нього перевести webitel.go?

@vlad-marusyk-wt

Copy link
Copy Markdown
Contributor Author

а чи розглядався варіант локального кодування etag? ми ж все одно ходимо в contacts.contact, а витягнути додатково ver з неї - не зовсім проблема у нас навіть окремий пакет є для роботи з etag: https://github.com/webitel/webitel-go-kit/tree/main/pkg/etag можливо варто на нього перевести webitel.go?

По суті згоден, ver вже є в джойні на contacts.contact, локально закодувати можна. Єдине що наче pkg/etag з go-kit несумісний з contacts, там інший base32 алфавіт і інша нумерація типів. Його etag contacts не розкодує на скільки я розумію.
Як тоді краще? переношу кодування contacts у go-kit і перевожу webitel.go + chat_manager на нього?

@kirychukyurii

Copy link
Copy Markdown
Contributor

а чи розглядався варіант локального кодування etag? ми ж все одно ходимо в contacts.contact, а витягнути додатково ver з неї - не зовсім проблема у нас навіть окремий пакет є для роботи з etag: https://github.com/webitel/webitel-go-kit/tree/main/pkg/etag можливо варто на нього перевести webitel.go?

По суті згоден, ver вже є в джойні на contacts.contact, локально закодувати можна. Єдине що наче pkg/etag з go-kit несумісний з contacts, там інший base32 алфавіт і інша нумерація типів. Його etag contacts не розкодує на скільки я розумію. Як тоді краще? переношу кодування contacts у go-kit і перевожу webitel.go + chat_manager на нього?

ага, etag з go-kit несумісний з тим, що є в репо webitel.go
тому пропоную додати можливість в go-kit енкодити/декодити etag контактів, замінити логіку в webitel.go і додати її сюди, в chat_manager

@webitel-review

webitel-review Bot commented Aug 31, 2026

Copy link
Copy Markdown

🤖 Webitel Code Review

Цей пул-реквест додає поле etag до структури Peer (контакту) у повідомленнях чату. Для цього оновлено protobuf-визначення, додано залежність від webitel-go-kit/pkg/etag для кодування Etag, а також реалізовано нову функцію декодування рядка контакту fetchContactPeerRow, яка зчитує версію контакту (ver) з бази даних та генерує відповідний etag. Ризик змін низький, оскільки додавання поля є зворотно сумісним.

📋 Walkthrough (6 файл(и/ів))
Файл Зміни
api/proto/chat/messages/peer.pb.go Оновлено згенерований Go-код для protobuf-повідомлення Peer з урахуванням нового поля etag.
go.mod Додано залежність від github.com/webitel/webitel-go-kit/pkg/etag.
go.sum Оновлено контрольні суми для нових залежностей.
internal/repo/sqlx/agent_chat.go Оновлено SQL-запит для вибірки контакту (додано ct.ver) та змінено функцію обробки результату на fetchContactPeerRow.
internal/repo/sqlx/chat_catalog.go Реалізовано функції fetchContactPeerRow та contactEtag для декодування даних контакту та генерації його Etag.
proto/chat/messages/peer.proto Додано нове поле etag з тегом 4 до повідомлення Peer.

Знахідки

  • [low] internal/repo/sqlx/chat_catalog.go:18 — Переконайтеся, що пакет strconv імпортований у файлі internal/repo/sqlx/chat_catalog.go, оскільки він використовується у функції contactEtag для виклику strconv.ParseInt. Якщо його немає в секції імпорту (яка частково прихована в дифі), це призведе до помилки компіляції.

Index-grounded review across the Webitel codebase. Знахідки можуть бути неточними — перевіряйте перед застосуванням.

@vlad-marusyk-wt

Copy link
Copy Markdown
Contributor Author

а чи розглядався варіант локального кодування etag? ми ж все одно ходимо в contacts.contact, а витягнути додатково ver з неї - не зовсім проблема у нас навіть окремий пакет є для роботи з etag: https://github.com/webitel/webitel-go-kit/tree/main/pkg/etag можливо варто на нього перевести webitel.go?

По суті згоден, ver вже є в джойні на contacts.contact, локально закодувати можна. Єдине що наче pkg/etag з go-kit несумісний з contacts, там інший base32 алфавіт і інша нумерація типів. Його etag contacts не розкодує на скільки я розумію. Як тоді краще? переношу кодування contacts у go-kit і перевожу webitel.go + chat_manager на нього?

ага, etag з go-kit несумісний з тим, що є в репо webitel.go тому пропоную додати можливість в go-kit енкодити/декодити etag контактів, замінити логіку в webitel.go і додати її сюди, в chat_manager

Готово в цьому + повʼязані пр:
webitel/protos#409
https://github.com/webitel/webitel.go/pull/351

@vlad-marusyk-wt
vlad-marusyk-wt merged commit 2bbbd59 into main Sep 1, 2026
8 of 11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants