feat: list pr time filter (#1188)

pull/3497/head
Abhinav Singh 2024-04-05 23:17:33 +00:00 committed by Harness
parent a9d8c23394
commit f20189812b
7 changed files with 76 additions and 0 deletions

View File

@ -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),
},
},
},
}

View File

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

View File

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

View File

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

View File

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

View File

@ -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"`
}

View File

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