mirror of https://github.com/harness/drone.git
feat: list pr time filter (#1188)
parent
a9d8c23394
commit
f20189812b
|
@ -96,3 +96,33 @@ var queryParameterAfter = openapi3.ParameterOrRef{
|
|||
},
|
||||
},
|
||||
}
|
||||
|
||||
var queryParameterCreatedLt = openapi3.ParameterOrRef{
|
||||
Parameter: &openapi3.Parameter{
|
||||
Name: request.QueryParamCreatedLt,
|
||||
In: openapi3.ParameterInQuery,
|
||||
Description: ptr.String("The result should contain only entries created before this timestamp (unix millis)."),
|
||||
Required: ptr.Bool(false),
|
||||
Schema: &openapi3.SchemaOrRef{
|
||||
Schema: &openapi3.Schema{
|
||||
Type: ptrSchemaType(openapi3.SchemaTypeInteger),
|
||||
Minimum: ptr.Float64(0),
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
var queryParameterCreatedGt = openapi3.ParameterOrRef{
|
||||
Parameter: &openapi3.Parameter{
|
||||
Name: request.QueryParamCreatedGt,
|
||||
In: openapi3.ParameterInQuery,
|
||||
Description: ptr.String("The result should contain only entries created after this timestamp (unix millis)."),
|
||||
Required: ptr.Bool(false),
|
||||
Schema: &openapi3.SchemaOrRef{
|
||||
Schema: &openapi3.Schema{
|
||||
Type: ptrSchemaType(openapi3.SchemaTypeInteger),
|
||||
Minimum: ptr.Float64(0),
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
@ -320,6 +320,7 @@ func pullReqOperations(reflector *openapi3.Reflector) {
|
|||
queryParameterSourceBranchPullRequest, queryParameterTargetBranchPullRequest,
|
||||
queryParameterQueryPullRequest, queryParameterCreatedByPullRequest,
|
||||
queryParameterOrder, queryParameterSortPullRequest,
|
||||
queryParameterCreatedLt, queryParameterCreatedGt,
|
||||
queryParameterPage, queryParameterLimit)
|
||||
_ = reflector.SetRequest(&listPullReq, new(listPullReqRequest), http.MethodGet)
|
||||
_ = reflector.SetJSONResponse(&listPullReq, new([]types.PullReq), http.StatusOK)
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
package request
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
|
@ -41,6 +42,9 @@ const (
|
|||
QueryParamDeletedBeforeOrAt = "deleted_before_or_at"
|
||||
QueryParamDeletedAt = "deleted_at"
|
||||
|
||||
QueryParamCreatedLt = "created_lt"
|
||||
QueryParamCreatedGt = "created_gt"
|
||||
|
||||
QueryParamPage = "page"
|
||||
QueryParamLimit = "limit"
|
||||
PerPageDefault = 30
|
||||
|
@ -118,6 +122,26 @@ func ParseListQueryFilterFromRequest(r *http.Request) types.ListQueryFilter {
|
|||
}
|
||||
}
|
||||
|
||||
// ParseCreated extracts the created filter from the url query param.
|
||||
func ParseCreated(r *http.Request) (types.CreatedFilter, error) {
|
||||
filter := types.CreatedFilter{}
|
||||
|
||||
createdLt, err := QueryParamAsPositiveInt64OrDefault(r, QueryParamCreatedLt, 0)
|
||||
if err != nil {
|
||||
return filter, fmt.Errorf("encountered error parsing created lt: %w", err)
|
||||
}
|
||||
|
||||
createdGt, err := QueryParamAsPositiveInt64OrDefault(r, QueryParamCreatedGt, 0)
|
||||
if err != nil {
|
||||
return filter, fmt.Errorf("encountered error parsing created gt: %w", err)
|
||||
}
|
||||
|
||||
filter.CreatedGt = createdGt
|
||||
filter.CreatedLt = createdLt
|
||||
|
||||
return filter, nil
|
||||
}
|
||||
|
||||
// GetContentEncodingFromHeadersOrDefault returns the content encoding from the request headers.
|
||||
func GetContentEncodingFromHeadersOrDefault(r *http.Request, dflt string) string {
|
||||
return GetHeaderOrDefault(r, HeaderContentEncoding, dflt)
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
package request
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/harness/gitness/types"
|
||||
|
@ -70,6 +71,11 @@ func ParsePullReqFilter(r *http.Request) (*types.PullReqFilter, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
createdAtFilter, err := ParseCreated(r)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("encountered error parsing pr created filter: %w", err)
|
||||
}
|
||||
return &types.PullReqFilter{
|
||||
Page: ParsePage(r),
|
||||
Size: ParseLimit(r),
|
||||
|
@ -81,6 +87,7 @@ func ParsePullReqFilter(r *http.Request) (*types.PullReqFilter, error) {
|
|||
States: parsePullReqStates(r),
|
||||
Sort: ParseSortPullReq(r),
|
||||
Order: ParseOrder(r),
|
||||
CreatedFilter: createdAtFilter,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
|
|
@ -490,6 +490,14 @@ func (s *PullReqStore) List(ctx context.Context, opts *types.PullReqFilter) ([]*
|
|||
stmt = stmt.Where("pullreq_created_by = ?", opts.CreatedBy)
|
||||
}
|
||||
|
||||
if opts.CreatedLt > 0 {
|
||||
stmt = stmt.Where("pullreq_created < ?", opts.CreatedLt)
|
||||
}
|
||||
|
||||
if opts.CreatedGt > 0 {
|
||||
stmt = stmt.Where("pullreq_created > ?", opts.CreatedGt)
|
||||
}
|
||||
|
||||
stmt = stmt.Limit(database.Limit(opts.Size))
|
||||
stmt = stmt.Offset(database.Offset(opts.Page, opts.Size))
|
||||
|
||||
|
|
|
@ -19,3 +19,8 @@ type ListQueryFilter struct {
|
|||
Pagination
|
||||
Query string `json:"query"`
|
||||
}
|
||||
|
||||
type CreatedFilter struct {
|
||||
CreatedGt int64 `json:"created_gt"`
|
||||
CreatedLt int64 `json:"created_lt"`
|
||||
}
|
||||
|
|
|
@ -97,6 +97,7 @@ type PullReqFilter struct {
|
|||
States []enum.PullReqState `json:"state"`
|
||||
Sort enum.PullReqSort `json:"sort"`
|
||||
Order enum.Order `json:"order"`
|
||||
CreatedFilter
|
||||
}
|
||||
|
||||
// PullReqReview holds pull request review.
|
||||
|
|
Loading…
Reference in New Issue