D
Modul

Team Chat

Komunikasi internal antar member tim per store. Bukan manajemen anggota tim (itu modul Pengaturan).

Modul Team Chat menyediakan DM antar member tim per store, dengan integrasi engine WA untuk realtime.

File kunci

FileBarisPeran
app/Http/Controllers/TeamchatController.php418Inbox pesan internal
app/Models/TeamchatInbox.php30Model inbox

Model TeamchatInbox

Field: message, team_id (sender user_store.id), store_id, partisipan (array), mode ('dm'), reader (array of user_store.id), date.

Relasi: team()UserStore (belongsTo via team_id).

Controller method utama

MethodFungsi
index()Render Teamchat/Index
list()List member + last message per conversation + unread
getUnreadNumber()Total unread + team_list + default device
add()Simpan pesan + POST ke engine WA update-teamchat
listInbox()Paginate inbox per pasangan + auto-mark-read
markRead()Mark satu message read
store()Create akun di chat service eksternal
defaultUserDevice()Set default device + POST ke engine WA

Route

MethodPathFungsi
GET/teamchatHalaman utama
GET/api/teamchat/listList member
GET/api/teamchat/unreadUnread count
POST/api/teamchat/addKirim pesan
GET/api/teamchat/list-inboxInbox per pair
POST/api/teamchat/set_defaultSet default device
POST/api/teamchat/mark_readMark read (duplikat — terdaftar 2x)

Integrasi

ServiceEndpointUntuk
Engine WA (url_engine)POST /update-teamchatSinkron pesan ke socket (realtime)
Chat service eksternalhttp://localhost/chat/api_requestCreate akun chat (key 21aOfjTBLDhFx6AoMqH hardcoded)

Temuan

  • API key hardcoded (:19) — 21aOfjTBLDhFx6AoMqH untuk chat service
  • localhost/chat hardcoded — tidak conditional env, akan gagal di production
  • store() create akun dengan password time() — lemah & predictable
  • Route POST /mark_read duplikat — terdaftar 2x (api.php:663-664)
  • list() orWhere tanpa grouping — potensi cross-store leak
  • add() fire-and-forget — engine WA down → pesan tersimpan tapi tidak realtime