@@ -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