mirror of
https://github.com/harness/drone.git
synced 2025-05-05 08:32:39 +08:00
148 lines
4.1 KiB
Go
148 lines
4.1 KiB
Go
// Copyright 2022 Harness Inc. All rights reserved.
|
|
// Use of this source code is governed by the Polyform Free Trial License
|
|
// that can be found in the LICENSE.md file for this repository.
|
|
|
|
package request
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/harness/gitness/types"
|
|
"github.com/harness/gitness/types/enum"
|
|
)
|
|
|
|
const (
|
|
PathParamPullReqNumber = "pullreq_number"
|
|
PathParamPullReqCommentID = "pullreq_comment_id"
|
|
)
|
|
|
|
func GetPullReqNumberFromPath(r *http.Request) (int64, error) {
|
|
return PathParamAsInt64(r, PathParamPullReqNumber)
|
|
}
|
|
|
|
func GetPullReqCommentIDPath(r *http.Request) (int64, error) {
|
|
return PathParamAsInt64(r, PathParamPullReqCommentID)
|
|
}
|
|
|
|
// ParseSortPullReq extracts the pull request sort parameter from the url.
|
|
func ParseSortPullReq(r *http.Request) enum.PullReqSort {
|
|
result, _ := enum.ParsePullReqSort(enum.PullReqSort(r.FormValue(QueryParamSort)))
|
|
return result
|
|
}
|
|
|
|
// parsePullReqStates extracts the pull request states from the url.
|
|
func parsePullReqStates(r *http.Request) []enum.PullReqState {
|
|
strStates := r.Form[QueryParamState]
|
|
m := make(map[enum.PullReqState]struct{}) // use map to eliminate duplicates
|
|
for _, s := range strStates {
|
|
state := enum.PullReqState(s)
|
|
if state != enum.PullReqStateOpen && state != enum.PullReqStateMerged &&
|
|
state != enum.PullReqStateClosed && state != enum.PullReqStateRejected {
|
|
continue // skip invalid states
|
|
}
|
|
m[state] = struct{}{}
|
|
}
|
|
|
|
if len(m) == 0 {
|
|
return []enum.PullReqState{enum.PullReqStateOpen} // the default is only "open" PRs
|
|
}
|
|
|
|
states := make([]enum.PullReqState, 0, len(m))
|
|
for s := range m {
|
|
states = append(states, s)
|
|
}
|
|
|
|
return states
|
|
}
|
|
|
|
// ParsePullReqFilter extracts the pull request query parameter from the url.
|
|
func ParsePullReqFilter(r *http.Request) (*types.PullReqFilter, error) {
|
|
createdBy, err := QueryParamAsID(r, QueryParamCreatedBy)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &types.PullReqFilter{
|
|
Page: ParsePage(r),
|
|
Size: ParseLimit(r),
|
|
Query: ParseQuery(r),
|
|
CreatedBy: createdBy,
|
|
SourceRepoRef: r.FormValue("source_repo_ref"),
|
|
SourceBranch: r.FormValue("source_branch"),
|
|
TargetBranch: r.FormValue("target_branch"),
|
|
States: parsePullReqStates(r),
|
|
Sort: ParseSortPullReq(r),
|
|
Order: ParseOrder(r),
|
|
}, nil
|
|
}
|
|
|
|
// ParsePullReqActivityFilter extracts the pull request activity query parameter from the url.
|
|
func ParsePullReqActivityFilter(r *http.Request) (*types.PullReqActivityFilter, error) {
|
|
after, err := QueryParamAsPositiveInt64(r, QueryParamAfter)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
before, err := QueryParamAsPositiveInt64(r, QueryParamBefore)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
limit, err := QueryParamAsPositiveInt64(r, QueryParamLimit)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &types.PullReqActivityFilter{
|
|
After: after,
|
|
Before: before,
|
|
Limit: int(limit),
|
|
Types: parsePullReqActivityTypes(r),
|
|
Kinds: parsePullReqActivityKinds(r),
|
|
}, nil
|
|
}
|
|
|
|
// parsePullReqActivityKinds extracts the pull request activity kinds from the url.
|
|
func parsePullReqActivityKinds(r *http.Request) []enum.PullReqActivityKind {
|
|
strKinds := r.Form[QueryParamKind]
|
|
m := make(map[enum.PullReqActivityKind]struct{}) // use map to eliminate duplicates
|
|
for _, s := range strKinds {
|
|
kind, ok := enum.ParsePullReqActivityKind(enum.PullReqActivityKind(s))
|
|
if !ok {
|
|
continue
|
|
}
|
|
m[kind] = struct{}{}
|
|
}
|
|
|
|
if len(m) == 0 {
|
|
return nil
|
|
}
|
|
|
|
kinds := make([]enum.PullReqActivityKind, 0, len(m))
|
|
for k := range m {
|
|
kinds = append(kinds, k)
|
|
}
|
|
|
|
return kinds
|
|
}
|
|
|
|
// parsePullReqActivityTypes extracts the pull request activity types from the url.
|
|
func parsePullReqActivityTypes(r *http.Request) []enum.PullReqActivityType {
|
|
strType := r.Form[QueryParamType]
|
|
m := make(map[enum.PullReqActivityType]struct{}) // use map to eliminate duplicates
|
|
for _, s := range strType {
|
|
t, ok := enum.ParsePullReqActivityType(enum.PullReqActivityType(s))
|
|
if !ok {
|
|
continue
|
|
}
|
|
m[t] = struct{}{}
|
|
}
|
|
|
|
if len(m) == 0 {
|
|
return nil
|
|
}
|
|
|
|
activityTypes := make([]enum.PullReqActivityType, 0, len(m))
|
|
for t := range m {
|
|
activityTypes = append(activityTypes, t)
|
|
}
|
|
|
|
return activityTypes
|
|
}
|