feat(search): scope inbox search access

This commit is contained in:
2026-06-07 07:13:25 +08:00
parent bd20e6d80f
commit 4bde740c80
10 changed files with 338 additions and 15 deletions
@@ -289,6 +289,9 @@ func serializeSearchPayload(results []search.SearchResult) gin.H {
func parseChatwootSearchFilter(c *gin.Context) search.SearchFilter {
filter := search.ParseSearchFilter(c)
if userID := getUserID(c); userID != 0 {
filter.CurrentUserID = &userID
}
if c.Query("per_page") == "" {
filter.PerPage = chatwootSearchPerPage
}
@@ -253,6 +253,27 @@ func TestSearchHandler_SearchMessages_Success(t *testing.T) {
assert.Equal(t, 15, repo.msgFilter.PerPage)
}
func TestSearchHandler_SearchMessages_AddsCurrentUserToFilter(t *testing.T) {
repo := &mockSearchRepo{
messages: []model.Message{makeMessage(1, 1, "hello world")},
msgTotal: 1,
}
svc := search.NewSearchService(repo)
handler := NewSearchHandler(svc)
router := setupSearchHandlerRouter(handler)
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/api/v1/accounts/1/search/messages?q=hello&page=1", nil)
req.Header.Set("X-User-ID", "42")
router.ServeHTTP(w, req)
require.Equal(t, http.StatusOK, w.Code)
require.NotNil(t, repo.msgFilter)
if assert.NotNil(t, repo.msgFilter.CurrentUserID) {
assert.Equal(t, uint(42), *repo.msgFilter.CurrentUserID)
}
}
func TestSearchHandler_SearchMessages_MeiliHitPayloadShape(t *testing.T) {
svc := search.NewSearchServiceWithEngine(&stubSearchEngine{
resp: &search.SearchResponse{