Skip to content

Commit 4f265cf

Browse files
committed
grouped tables stream
1 parent 49695b4 commit 4f265cf

File tree

4 files changed

+131
-140
lines changed

4 files changed

+131
-140
lines changed

aiplan.go/internal/aiplan/http-issue.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,7 @@ var issueGroupFields = []string{"priority", "author", "state", "labels", "assign
402402
// @Param only_count query bool false "Вернуть только количество" default(false)
403403
// @Param only_active query bool false "Вернуть только активные задачи" default(false)
404404
// @Param only_pinned query bool false "Вернуть только закрепленные задачи" default(false)
405+
// @Param stream query bool false "Ответ ввиде стриминга json сгруппированных таблиц, работает только при группировке" default(false)
405406
// @Param filters body types.IssuesListFilters false "Фильтры для поиска задач"
406407
// @Success 200 {object} dto.IssueSearchResult "Результат поиска задач"
407408
// @Failure 400 {object} apierrors.DefinedError "Некорректные параметры запроса"
@@ -720,17 +721,43 @@ func (s *Services) getIssueList(c echo.Context) error {
720721
return EError(c, err)
721722
}
722723

723-
totalCount, groupMap, err := FetchIssuesByGroups(groupSize, s.db, groupSelectQuery, searchParams)
724+
// Write stream status code and headers first
725+
if searchParams.Stream {
726+
c.Response().Header().Set(echo.HeaderContentType, echo.MIMEApplicationJSON)
727+
c.Response().WriteHeader(http.StatusOK)
728+
}
729+
730+
enc := json.NewEncoder(c.Response())
731+
732+
var groupMap []IssuesGroupResponse
733+
734+
totalCount, err := FetchIssuesByGroups(groupSize, s.db, groupSelectQuery, searchParams, func(group IssuesGroupResponse) error {
735+
if !searchParams.Stream {
736+
groupMap = append(groupMap, group)
737+
return nil
738+
}
739+
740+
if err := enc.Encode(group); err != nil {
741+
return err
742+
}
743+
c.Response().Flush()
744+
return nil
745+
})
724746
if err != nil {
725747
return EError(c, err)
726748
}
727749

750+
// Close stream
751+
if searchParams.Stream {
752+
return nil
753+
}
754+
728755
return c.JSON(http.StatusOK, IssuesGroupedResponse{
729756
Count: totalCount,
730757
Offset: searchParams.Offset,
731758
Limit: searchParams.Limit,
732759
GroupBy: searchParams.GroupByParam,
733-
Issues: SortIssuesGroups(searchParams.GroupByParam, groupMap),
760+
Issues: groupMap,
734761
})
735762
}
736763

0 commit comments

Comments
 (0)