Skip to content

Commit d61bb4d

Browse files
merge
2 parents f08d361 + 8d480a4 commit d61bb4d

File tree

4 files changed

+131
-1
lines changed

4 files changed

+131
-1
lines changed

go.mod

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
module github.com/larksuite/project-oapi-sdk-golang
22

3-
go 1.15
3+
go 1.22.0
4+
5+
toolchain go1.22.2

service/workitem/api.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ const APIPathUpdateWorkingHourRecord = "/open_api/:project_key/work_item/:work_i
7777

7878
const APIPathWbsView = "/open_api/:project_key/work_item/:work_item_type_key/:work_item_id/wbs_view"
7979

80+
const APIPath_UniversalSearch = "/open_api/view_search/universal_search"
81+
8082
func NewService(config *core.Config) *WorkItemService {
8183
a := &WorkItemService{config: config}
8284
return a
@@ -598,3 +600,27 @@ func (a *WorkItemService) WbsView(ctx context.Context, req *WbsViewReq, options
598600
}
599601
return resp, err
600602
}
603+
604+
/*
605+
* @name: openapi获取指定的工作项列表(极简链路,替代原有的GeneralSearch系列)
606+
* @desc: openapi获取指定的工作项列表(极简链路,替代原有的GeneralSearch系列)
607+
*/
608+
func (a *WorkItemService) UniversalSearch(ctx context.Context, req *UniversalSearchReq, options ...core.RequestOptionFunc) (*UniversalSearchResp, error) {
609+
// 发起请求
610+
apiReq := req.apiReq
611+
apiReq.ApiPath = APIPath_UniversalSearch
612+
apiReq.HttpMethod = "POST"
613+
apiResp, err := core.Request(ctx, apiReq, a.config, options...)
614+
if err != nil {
615+
a.config.Logger.Error(ctx, fmt.Sprintf("[UniversalSearch] fail to invoke api, error: %v", err.Error()))
616+
return nil, err
617+
}
618+
// 反序列响应结果
619+
resp := &UniversalSearchResp{APIResp: apiResp}
620+
err = apiResp.JSONUnmarshalBody(resp, a.config)
621+
if err != nil {
622+
a.config.Logger.Error(ctx, fmt.Sprintf("[UniversalSearch] fail to unmarshal response body, error: %v", err.Error()))
623+
return nil, err
624+
}
625+
return resp, err
626+
}

service/workitem/builder.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1790,3 +1790,79 @@ func (builder *WbsViewReqBuilder) Build() *WbsViewReq {
17901790
req.apiReq.Body = builder.body
17911791
return req
17921792
}
1793+
1794+
type UniversalSearchReq struct {
1795+
apiReq *core.APIReq
1796+
}
1797+
type UniversalSearchReqBody struct {
1798+
DataSources []DataSource `json:"data_sources,omitempty"`
1799+
1800+
UserKey *string `json:"user_key,omitempty"`
1801+
1802+
SearchGroup *SearchGroup `json:"search_group,omitempty"`
1803+
1804+
Sort *Sort `json:"sort,omitempty"`
1805+
1806+
Pagination *Pagination `json:"pagination,omitempty"`
1807+
1808+
FieldSelected []string `json:"field_selected,omitempty"`
1809+
1810+
Features map[string]string `json:"features,omitempty"`
1811+
}
1812+
1813+
type UniversalSearchResp struct {
1814+
*core.APIResp `json:"-"`
1815+
core.CodeError
1816+
Data *string `json:"data,omitempty"`
1817+
1818+
Pagination *Pagination `json:"pagination,omitempty"`
1819+
1820+
ExtraInfo map[string]string `json:"extra_info,omitempty"`
1821+
}
1822+
1823+
type UniversalSearchReqBuilder struct {
1824+
apiReq *core.APIReq
1825+
}
1826+
1827+
func NewUniversalSearchReqBuilder() *UniversalSearchReqBuilder {
1828+
builder := &UniversalSearchReqBuilder{}
1829+
builder.apiReq = &core.APIReq{
1830+
PathParams: core.PathParams{},
1831+
QueryParams: core.QueryParams{},
1832+
Body: &UniversalSearchReqBody{},
1833+
}
1834+
return builder
1835+
}
1836+
func (builder *UniversalSearchReqBuilder) DataSources(dataSources []DataSource) *UniversalSearchReqBuilder {
1837+
builder.apiReq.Body.(*UniversalSearchReqBody).DataSources = dataSources
1838+
return builder
1839+
}
1840+
func (builder *UniversalSearchReqBuilder) UserKey(userKey *string) *UniversalSearchReqBuilder {
1841+
builder.apiReq.Body.(*UniversalSearchReqBody).UserKey = userKey
1842+
return builder
1843+
}
1844+
func (builder *UniversalSearchReqBuilder) SearchGroup(searchGroup *SearchGroup) *UniversalSearchReqBuilder {
1845+
builder.apiReq.Body.(*UniversalSearchReqBody).SearchGroup = searchGroup
1846+
return builder
1847+
}
1848+
func (builder *UniversalSearchReqBuilder) Sort(sort *Sort) *UniversalSearchReqBuilder {
1849+
builder.apiReq.Body.(*UniversalSearchReqBody).Sort = sort
1850+
return builder
1851+
}
1852+
func (builder *UniversalSearchReqBuilder) Pagination(pagination *Pagination) *UniversalSearchReqBuilder {
1853+
builder.apiReq.Body.(*UniversalSearchReqBody).Pagination = pagination
1854+
return builder
1855+
}
1856+
func (builder *UniversalSearchReqBuilder) FieldSelected(fieldSelected []string) *UniversalSearchReqBuilder {
1857+
builder.apiReq.Body.(*UniversalSearchReqBody).FieldSelected = fieldSelected
1858+
return builder
1859+
}
1860+
func (builder *UniversalSearchReqBuilder) Features(features map[string]string) *UniversalSearchReqBuilder {
1861+
builder.apiReq.Body.(*UniversalSearchReqBody).Features = features
1862+
return builder
1863+
}
1864+
func (builder *UniversalSearchReqBuilder) Build() *UniversalSearchReq {
1865+
req := &UniversalSearchReq{}
1866+
req.apiReq = builder.apiReq
1867+
return req
1868+
}

service/workitem/model.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,3 +612,29 @@ type InstanceDeliverableItem struct {
612612

613613
Remark string `json:"remark"`
614614
}
615+
616+
type DataSource struct {
617+
ProjectKey *string `json:"project_key,omitempty"`
618+
619+
WorkItemTypeKeys *string `json:"work_item_type_keys,omitempty"`
620+
}
621+
622+
type Sort struct {
623+
FieldKey *string `json:"field_key,omitempty"`
624+
625+
FieldType *string `json:"field_type,omitempty"`
626+
627+
WorkItemTypeKey *string `json:"work_item_type_key,omitempty"`
628+
629+
Order *string `json:"order,omitempty"`
630+
631+
Params map[string]string `json:"params,omitempty"`
632+
}
633+
634+
type Pagination struct {
635+
PageNum *int64 `json:"page_num,omitempty"`
636+
637+
PageSize *int64 `json:"page_size,omitempty"`
638+
639+
Total *int64 `json:"total,omitempty"`
640+
}

0 commit comments

Comments
 (0)