tapd

package module
v0.13.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 25, 2025 License: MIT Imports: 13 Imported by: 3

README

🚀 Go-Tapd-SDK

Supported Go Versions Package Version GoDoc codecov Go Report Card lint tests MIT license

The Go-Tapd-SDK is a Go client library for accessing the Tapd API.

[!WARNING]
This is currently still a non-stable version, is not recommended for production use.

If you encounter any issues, you are welcome to submit an issue.

📥 Installation

go get github.com/go-tapd/tapd

✨ Features

see features.md

🔧 Usage

API Service
  • Example of using the Basic Authentication API service:
package main

import (
	"context"
	"log"

	"github.com/go-tapd/tapd"
)

func main() {
	client, err := tapd.NewClient("client_id", "client_secret")
	if err != nil {
		log.Fatal(err)
	}

	// example: get labels
	labels, _, err := client.LabelService.GetLabels(context.Background(), &tapd.GetLabelsRequest{
		WorkspaceID: tapd.Ptr(123456),
	})
	if err != nil {
		log.Fatal(err)
	}

	log.Printf("labels: %+v", labels)
}
  • Example of using the Personal Access Token (PAT) API service:
package main

import (
	"context"
	"log"

	"github.com/go-tapd/tapd"
)

func main() {
	client, err := tapd.NewPATClient("your_access_token")
	if err != nil {
		log.Fatal(err)
	}

	// example: get stories
	stories, _, err := client.StoryService.GetStories(context.Background(), &tapd.GetStoriesRequest{
		WorkspaceID: tapd.Ptr(123456),
	})
	if err != nil {
		log.Fatal(err)
	}

	log.Printf("stories: %+v", stories)
}
Webhook Server Example
package main

import (
	"context"
	"log"
	"net/http"

	"github.com/go-tapd/tapd/webhook"
)

type StoreUpdateListener struct{}

func (l *StoreUpdateListener) OnStoryUpdate(ctx context.Context, event *webhook.StoryUpdateEvent) error {
	log.Printf("StoreUpdateListener: %+v", event)
	return nil
}

func main() {
	dispatcher := webhook.NewDispatcher(
		webhook.WithRegisters(&StoreUpdateListener{}),
	)
	dispatcher.Registers(&StoreUpdateListener{})

	srv := http.NewServeMux()
	srv.HandleFunc("/webhook", func(w http.ResponseWriter, r *http.Request) {
		log.Println("Received webhook request")
		if err := dispatcher.DispatchRequest(r); err != nil {
			log.Println(err)
		}
		w.Write([]byte("ok"))
	})

	http.ListenAndServe(":8080", srv)
}

📜 License

The MIT License (MIT). Please see License File for more information.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	OrderByAsc  = WithOrderType(OrderTypeAsc)
	OrderByDesc = WithOrderType(OrderTypeDesc)
)

Functions

func IsErrorResponse

func IsErrorResponse(err error) bool

func NewRetryableHTTPClient

func NewRetryableHTTPClient(opts ...RetryableHTTPClientOption) *http.Client

func Ptr

func Ptr[T any](v T) *T

Ptr returns a pointer to the value.

Types

type Attachment

type Attachment struct {
	ID          string `json:"id,omitempty"`           // 附件ID
	Type        string `json:"type,omitempty"`         // 类型
	EntryID     string `json:"entry_id,omitempty"`     // 依赖对象ID
	Filename    string `json:"filename,omitempty"`     // 附件名称
	Description string `json:"description,omitempty"`  // 描述
	ContentType string `json:"content_type,omitempty"` // 内容类型
	Created     string `json:"created,omitempty"`      // 创建时间
	WorkspaceID string `json:"workspace_id,omitempty"` // 项目ID
	Owner       string `json:"owner,omitempty"`        // 上传人
	DownloadURL string `json:"download_url,omitempty"` // 下载链接(仅在获取单个附件时返回)
}

Attachment 附件

type AttachmentService

type AttachmentService interface {
	// GetAttachments 获取附件
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/attachment/get_attachments.html
	GetAttachments(ctx context.Context, request *GetAttachmentsRequest, opts ...RequestOption) ([]*Attachment, *Response, error)

	// GetAttachmentDownloadURL 获取单个附件下载链接
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/attachment/get_one_attachment.html
	GetAttachmentDownloadURL(ctx context.Context, request *GetAttachmentDownloadURLRequest, opts ...RequestOption) (*Attachment, *Response, error)

	// GetImageDownloadURL 获取单个图片下载链接
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/attachment/get_image.html
	GetImageDownloadURL(ctx context.Context, request *GetImageDownloadURLRequest, opts ...RequestOption) (*ImageAttachment, *Response, error)

	// GetDocumentDownloadURL 获取单个文档下载链接
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/attachment/documents_down.html
	GetDocumentDownloadURL(ctx context.Context, request *GetDocumentDownloadURLRequest, opts ...RequestOption) (*DocumentAttachment, *Response, error)
}

AttachmentService is the service to communicate with Attachment API.

https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/attachment/

func NewAttachmentService added in v0.12.0

func NewAttachmentService(client *Client) AttachmentService

type Bug

type Bug struct {
	ID                string        `json:"id,omitempty"`
	Title             string        `json:"title,omitempty"`
	Description       string        `json:"description,omitempty"`
	Priority          string        `json:"priority,omitempty"`
	Severity          BugSeverity   `json:"severity,omitempty"`
	Module            string        `json:"module,omitempty"`
	Status            string        `json:"status,omitempty"`
	Reporter          string        `json:"reporter,omitempty"`
	Created           string        `json:"created,omitempty"`
	BugType           string        `json:"bugtype,omitempty"`
	Resolved          string        `json:"resolved,omitempty"`
	Closed            string        `json:"closed,omitempty"`
	Modified          string        `json:"modified,omitempty"`
	LastModify        string        `json:"lastmodify,omitempty"`
	Auditer           string        `json:"auditer,omitempty"`
	De                string        `json:"de,omitempty"`
	Fixer             string        `json:"fixer,omitempty"`
	VersionTest       string        `json:"version_test,omitempty"`
	VersionReport     string        `json:"version_report,omitempty"`
	VersionClose      string        `json:"version_close,omitempty"`
	VersionFix        string        `json:"version_fix,omitempty"`
	BaselineFind      string        `json:"baseline_find,omitempty"`
	BaselineJoin      string        `json:"baseline_join,omitempty"`
	BaselineClose     string        `json:"baseline_close,omitempty"`
	BaselineTest      string        `json:"baseline_test,omitempty"`
	SourcePhase       string        `json:"sourcephase,omitempty"`
	Te                string        `json:"te,omitempty"`
	CurrentOwner      string        `json:"current_owner,omitempty"`
	IterationID       string        `json:"iteration_id,omitempty"`
	Resolution        string        `json:"resolution,omitempty"`
	Source            string        `json:"source,omitempty"`
	OriginPhase       string        `json:"originphase,omitempty"`
	Confirmer         string        `json:"confirmer,omitempty"`
	Milestone         string        `json:"milestone,omitempty"`
	Participator      string        `json:"participator,omitempty"`
	Closer            string        `json:"closer,omitempty"`
	Platform          string        `json:"platform,omitempty"`
	Os                string        `json:"os,omitempty"`
	TestType          string        `json:"testtype,omitempty"`
	TestPhase         string        `json:"testphase,omitempty"`
	Frequency         string        `json:"frequency,omitempty"`
	CC                string        `json:"cc,omitempty"`
	RegressionNumber  string        `json:"regression_number,omitempty"`
	Flows             string        `json:"flows,omitempty"`
	Feature           string        `json:"feature,omitempty"`
	TestMode          string        `json:"testmode,omitempty"`
	Estimate          string        `json:"estimate,omitempty"`
	IssueID           string        `json:"issue_id,omitempty"`
	CreatedFrom       string        `json:"created_from,omitempty"`
	ReleaseID         string        `json:"release_id,omitempty"`
	VerifyTime        string        `json:"verify_time,omitempty"`
	RejectTime        string        `json:"reject_time,omitempty"`
	ReopenTime        string        `json:"reopen_time,omitempty"`
	AuditTime         string        `json:"audit_time,omitempty"`
	SuspendTime       string        `json:"suspend_time,omitempty"`
	Due               string        `json:"due,omitempty"`
	Begin             string        `json:"begin,omitempty"`
	Deadline          string        `json:"deadline,omitempty"`
	InProgressTime    string        `json:"in_progress_time,omitempty"`
	AssignedTime      string        `json:"assigned_time,omitempty"`
	TemplateID        string        `json:"template_id,omitempty"`
	StoryID           string        `json:"story_id,omitempty"`
	Label             string        `json:"label,omitempty"`
	Size              string        `json:"size,omitempty"`
	Effort            string        `json:"effort,omitempty"`
	EffortCompleted   string        `json:"effort_completed,omitempty"`
	Exceed            string        `json:"exceed,omitempty"`
	Remain            string        `json:"remain,omitempty"`
	CustomFieldOne    string        `json:"custom_field_one,omitempty"`
	CustomFieldTwo    string        `json:"custom_field_two,omitempty"`
	CustomFieldThree  string        `json:"custom_field_three,omitempty"`
	CustomFieldFour   string        `json:"custom_field_four,omitempty"`
	CustomFieldFive   string        `json:"custom_field_five,omitempty"`
	CustomField6      string        `json:"custom_field_6,omitempty"`
	CustomField7      string        `json:"custom_field_7,omitempty"`
	CustomField8      string        `json:"custom_field_8,omitempty"`
	CustomField9      string        `json:"custom_field_9,omitempty"`
	CustomField10     string        `json:"custom_field_10,omitempty"`
	CustomField11     string        `json:"custom_field_11,omitempty"`
	CustomField12     string        `json:"custom_field_12,omitempty"`
	CustomField13     string        `json:"custom_field_13,omitempty"`
	CustomField14     string        `json:"custom_field_14,omitempty"`
	CustomField15     string        `json:"custom_field_15,omitempty"`
	CustomField16     string        `json:"custom_field_16,omitempty"`
	CustomField17     string        `json:"custom_field_17,omitempty"`
	CustomField18     string        `json:"custom_field_18,omitempty"`
	CustomField19     string        `json:"custom_field_19,omitempty"`
	CustomField20     string        `json:"custom_field_20,omitempty"`
	CustomField21     string        `json:"custom_field_21,omitempty"`
	CustomField22     string        `json:"custom_field_22,omitempty"`
	CustomField23     string        `json:"custom_field_23,omitempty"`
	CustomField24     string        `json:"custom_field_24,omitempty"`
	CustomField25     string        `json:"custom_field_25,omitempty"`
	CustomField26     string        `json:"custom_field_26,omitempty"`
	CustomField27     string        `json:"custom_field_27,omitempty"`
	CustomField28     string        `json:"custom_field_28,omitempty"`
	CustomField29     string        `json:"custom_field_29,omitempty"`
	CustomField30     string        `json:"custom_field_30,omitempty"`
	CustomField31     string        `json:"custom_field_31,omitempty"`
	CustomField32     string        `json:"custom_field_32,omitempty"`
	CustomField33     string        `json:"custom_field_33,omitempty"`
	CustomField34     string        `json:"custom_field_34,omitempty"`
	CustomField35     string        `json:"custom_field_35,omitempty"`
	CustomField36     string        `json:"custom_field_36,omitempty"`
	CustomField37     string        `json:"custom_field_37,omitempty"`
	CustomField38     string        `json:"custom_field_38,omitempty"`
	CustomField39     string        `json:"custom_field_39,omitempty"`
	CustomField40     string        `json:"custom_field_40,omitempty"`
	CustomField41     string        `json:"custom_field_41,omitempty"`
	CustomField42     string        `json:"custom_field_42,omitempty"`
	CustomField43     string        `json:"custom_field_43,omitempty"`
	CustomField44     string        `json:"custom_field_44,omitempty"`
	CustomField45     string        `json:"custom_field_45,omitempty"`
	CustomField46     string        `json:"custom_field_46,omitempty"`
	CustomField47     string        `json:"custom_field_47,omitempty"`
	CustomField48     string        `json:"custom_field_48,omitempty"`
	CustomField49     string        `json:"custom_field_49,omitempty"`
	CustomField50     string        `json:"custom_field_50,omitempty"`
	CustomField51     string        `json:"custom_field_51,omitempty"`
	CustomField52     string        `json:"custom_field_52,omitempty"`
	CustomField53     string        `json:"custom_field_53,omitempty"`
	CustomField54     string        `json:"custom_field_54,omitempty"`
	CustomField55     string        `json:"custom_field_55,omitempty"`
	CustomField56     string        `json:"custom_field_56,omitempty"`
	CustomField57     string        `json:"custom_field_57,omitempty"`
	CustomField58     string        `json:"custom_field_58,omitempty"`
	CustomField59     string        `json:"custom_field_59,omitempty"`
	CustomField60     string        `json:"custom_field_60,omitempty"`
	CustomField61     string        `json:"custom_field_61,omitempty"`
	CustomField62     string        `json:"custom_field_62,omitempty"`
	CustomField63     string        `json:"custom_field_63,omitempty"`
	CustomField64     string        `json:"custom_field_64,omitempty"`
	CustomField65     string        `json:"custom_field_65,omitempty"`
	CustomField66     string        `json:"custom_field_66,omitempty"`
	CustomField67     string        `json:"custom_field_67,omitempty"`
	CustomField68     string        `json:"custom_field_68,omitempty"`
	CustomField69     string        `json:"custom_field_69,omitempty"`
	CustomField70     string        `json:"custom_field_70,omitempty"`
	CustomField71     string        `json:"custom_field_71,omitempty"`
	CustomField72     string        `json:"custom_field_72,omitempty"`
	CustomField73     string        `json:"custom_field_73,omitempty"`
	CustomField74     string        `json:"custom_field_74,omitempty"`
	CustomField75     string        `json:"custom_field_75,omitempty"`
	CustomField76     string        `json:"custom_field_76,omitempty"`
	CustomField77     string        `json:"custom_field_77,omitempty"`
	CustomField78     string        `json:"custom_field_78,omitempty"`
	CustomField79     string        `json:"custom_field_79,omitempty"`
	CustomField80     string        `json:"custom_field_80,omitempty"`
	CustomField81     string        `json:"custom_field_81,omitempty"`
	CustomField82     string        `json:"custom_field_82,omitempty"`
	CustomField83     string        `json:"custom_field_83,omitempty"`
	CustomField84     string        `json:"custom_field_84,omitempty"`
	CustomField85     string        `json:"custom_field_85,omitempty"`
	CustomField86     string        `json:"custom_field_86,omitempty"`
	CustomField87     string        `json:"custom_field_87,omitempty"`
	CustomField88     string        `json:"custom_field_88,omitempty"`
	CustomField89     string        `json:"custom_field_89,omitempty"`
	CustomField90     string        `json:"custom_field_90,omitempty"`
	CustomField91     string        `json:"custom_field_91,omitempty"`
	CustomField92     string        `json:"custom_field_92,omitempty"`
	CustomField93     string        `json:"custom_field_93,omitempty"`
	CustomField94     string        `json:"custom_field_94,omitempty"`
	CustomField95     string        `json:"custom_field_95,omitempty"`
	CustomField96     string        `json:"custom_field_96,omitempty"`
	CustomField97     string        `json:"custom_field_97,omitempty"`
	CustomField98     string        `json:"custom_field_98,omitempty"`
	CustomField99     string        `json:"custom_field_99,omitempty"`
	CustomField100    string        `json:"custom_field_100,omitempty"`
	CustomField101    string        `json:"custom_field_101,omitempty"`
	CustomField102    string        `json:"custom_field_102,omitempty"`
	CustomField103    string        `json:"custom_field_103,omitempty"`
	CustomField104    string        `json:"custom_field_104,omitempty"`
	CustomField105    string        `json:"custom_field_105,omitempty"`
	CustomField106    string        `json:"custom_field_106,omitempty"`
	CustomField107    string        `json:"custom_field_107,omitempty"`
	CustomField108    string        `json:"custom_field_108,omitempty"`
	CustomField109    string        `json:"custom_field_109,omitempty"`
	CustomField110    string        `json:"custom_field_110,omitempty"`
	CustomField111    string        `json:"custom_field_111,omitempty"`
	CustomField112    string        `json:"custom_field_112,omitempty"`
	CustomField113    string        `json:"custom_field_113,omitempty"`
	CustomField114    string        `json:"custom_field_114,omitempty"`
	CustomField115    string        `json:"custom_field_115,omitempty"`
	CustomField116    string        `json:"custom_field_116,omitempty"`
	CustomField117    string        `json:"custom_field_117,omitempty"`
	CustomField118    string        `json:"custom_field_118,omitempty"`
	CustomField119    string        `json:"custom_field_119,omitempty"`
	CustomField120    string        `json:"custom_field_120,omitempty"`
	CustomField121    string        `json:"custom_field_121,omitempty"`
	CustomField122    string        `json:"custom_field_122,omitempty"`
	CustomField123    string        `json:"custom_field_123,omitempty"`
	CustomField124    string        `json:"custom_field_124,omitempty"`
	CustomField125    string        `json:"custom_field_125,omitempty"`
	CustomField126    string        `json:"custom_field_126,omitempty"`
	CustomField127    string        `json:"custom_field_127,omitempty"`
	CustomField128    string        `json:"custom_field_128,omitempty"`
	CustomField129    string        `json:"custom_field_129,omitempty"`
	CustomField130    string        `json:"custom_field_130,omitempty"`
	CustomField131    string        `json:"custom_field_131,omitempty"`
	CustomField132    string        `json:"custom_field_132,omitempty"`
	CustomField133    string        `json:"custom_field_133,omitempty"`
	CustomField134    string        `json:"custom_field_134,omitempty"`
	CustomField135    string        `json:"custom_field_135,omitempty"`
	CustomField136    string        `json:"custom_field_136,omitempty"`
	CustomField137    string        `json:"custom_field_137,omitempty"`
	CustomField138    string        `json:"custom_field_138,omitempty"`
	CustomField139    string        `json:"custom_field_139,omitempty"`
	CustomField140    string        `json:"custom_field_140,omitempty"`
	CustomField141    string        `json:"custom_field_141,omitempty"`
	CustomField142    string        `json:"custom_field_142,omitempty"`
	CustomField143    string        `json:"custom_field_143,omitempty"`
	CustomField144    string        `json:"custom_field_144,omitempty"`
	CustomField145    string        `json:"custom_field_145,omitempty"`
	CustomField146    string        `json:"custom_field_146,omitempty"`
	CustomField147    string        `json:"custom_field_147,omitempty"`
	CustomField148    string        `json:"custom_field_148,omitempty"`
	CustomField149    string        `json:"custom_field_149,omitempty"`
	CustomField150    string        `json:"custom_field_150,omitempty"`
	CustomPlanField1  string        `json:"custom_plan_field_1,omitempty"`
	CustomPlanField2  string        `json:"custom_plan_field_2,omitempty"`
	CustomPlanField3  string        `json:"custom_plan_field_3,omitempty"`
	CustomPlanField4  string        `json:"custom_plan_field_4,omitempty"`
	CustomPlanField5  string        `json:"custom_plan_field_5,omitempty"`
	CustomPlanField6  string        `json:"custom_plan_field_6,omitempty"`
	CustomPlanField7  string        `json:"custom_plan_field_7,omitempty"`
	CustomPlanField8  string        `json:"custom_plan_field_8,omitempty"`
	CustomPlanField9  string        `json:"custom_plan_field_9,omitempty"`
	CustomPlanField10 string        `json:"custom_plan_field_10,omitempty"`
	PriorityLabel     PriorityLabel `json:"priority_label,omitempty"`
	WorkspaceID       string        `json:"workspace_id,omitempty"`
}

type BugService

func NewBugService added in v0.12.0

func NewBugService(client *Client) BugService

type BugSeverity added in v0.8.0

type BugSeverity string

BugSeverity 缺陷严重程度(severity)

https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/bug.html#%E7%BC%BA%E9%99%B7%E4%B8%A5%E9%87%8D%E7%A8%8B%E5%BA%A6-severity-%E5%AD%97%E6%AE%B5%E8%AF%B4%E6%98%8E

const (
	BugSeverityFatal   BugSeverity = "fatal"
	BugSeveritySerious BugSeverity = "serious"
	BugSeverityNormal  BugSeverity = "normal"
	BugSeverityPrompt  BugSeverity = "prompt"
	BugSeverityAdvice  BugSeverity = "advice"
)

func (BugSeverity) Human added in v0.8.0

func (s BugSeverity) Human() string

func (BugSeverity) String added in v0.8.0

func (s BugSeverity) String() string

type Client

type Client struct {

	// services used for talking to different parts of the Tapd API.
	StoryService      StoryService
	BugService        BugService
	IterationService  IterationService
	TaskService       TaskService
	CommentService    CommentService
	ReportService     ReportService
	AttachmentService AttachmentService
	TimesheetService  TimesheetService
	WorkspaceService  WorkspaceService
	LabelService      LabelService
	MeasureService    MeasureService
	UserService       UserService
	WorkflowService   WorkflowService
	SettingService    SettingService
	// contains filtered or unexported fields
}

func NewBasicAuthClient

func NewBasicAuthClient(clientID, clientSecret string, opts ...ClientOption) (*Client, error)

NewBasicAuthClient returns a new Tapd API client with basic authentication.

func NewClient

func NewClient(clientID, clientSecret string, opts ...ClientOption) (*Client, error)

NewClient returns a new Tapd API client. Alias for NewBasicAuthClient.

func NewPATClient added in v0.13.0

func NewPATClient(accessToken string, opts ...ClientOption) (*Client, error)

NewPATClient returns a new Tapd API client with Personal Access Token (PAT) authentication.

func (*Client) Do

func (c *Client) Do(req *http.Request, v any) (*Response, error)

func (*Client) NewRequest

func (c *Client) NewRequest(ctx context.Context, method, path string, data any, opts []RequestOption) (*http.Request, error)

type ClientOption

type ClientOption func(*Client) error

func WithAccessToken added in v0.13.0

func WithAccessToken(accessToken string) ClientOption

WithAccessToken sets the accessToken for the client

func WithBaseURL

func WithBaseURL(urlStr string) ClientOption

WithBaseURL sets the baseURL for the client

func WithBasicAuth

func WithBasicAuth(clientID, clientSecret string) ClientOption

WithBasicAuth sets the clientID and clientSecret for the client

func WithHTTPClient

func WithHTTPClient(httpClient *http.Client) ClientOption

WithHTTPClient sets the httpClient for the client

func WithUserAgent

func WithUserAgent(userAgent string) ClientOption

WithUserAgent sets the userAgent for the client

type Comment

type Comment struct {
	ID          string           `json:"id,omitempty"`           // 评论ID
	Title       string           `json:"title,omitempty"`        // 标题
	Description string           `json:"description,omitempty"`  // 内容
	Author      string           `json:"author,omitempty"`       // 评论人
	EntryType   CommentEntryType `json:"entry_type,omitempty"`   // 评论类型
	EntryID     string           `json:"entry_id,omitempty"`     // 评论所依附的业务对象实体id
	ReplyID     string           `json:"reply_id,omitempty"`     // 评论回复的ID
	RootID      string           `json:"root_id,omitempty"`      // 根评论ID
	Created     string           `json:"created,omitempty"`      // 创建时间
	Modified    string           `json:"modified,omitempty"`     // 最后更改时间
	WorkspaceID string           `json:"workspace_id,omitempty"` // 项目ID
}

Comment 评论

type CommentEntryType

type CommentEntryType string

CommentEntryType 评论类型

const (
	CommentEntryTypeBug       CommentEntryType = "bug"        // bug
	CommentEntryTypeBugRemark CommentEntryType = "bug_remark" // bug_remark (流转缺陷时候的评论)
	CommentEntryTypeStories   CommentEntryType = "stories"    // stories
	CommentEntryTypeTasks     CommentEntryType = "tasks"      // tasks
	CommentEntryTypeWiki      CommentEntryType = "wiki"       // wiki
	CommentEntryTypeMiniItems CommentEntryType = "mini_items" // mini_items
)

CommentEntryType 评论类型

func (CommentEntryType) String

func (t CommentEntryType) String() string

String CommentEntryType to string

type CommentService

CommentService 评论服务

func NewCommentService added in v0.12.0

func NewCommentService(client *Client) CommentService

type CountResponse

type CountResponse struct {
	Count int `json:"count"`
}

CountResponse represents the response of count.

type CreateCommentRequest

type CreateCommentRequest struct {
	Title       *string           `json:"title,omitempty"`        // 标题
	Description *string           `json:"description,omitempty"`  // 内容
	Author      *string           `json:"author,omitempty"`       // 评论人
	EntryType   *CommentEntryType `json:"entry_type,omitempty"`   // 评论类型
	EntryID     *int64            `json:"entry_id,omitempty"`     // 评论所依附的业务对象实体id
	ReplyID     *int64            `json:"reply_id,omitempty"`     // 评论回复的ID
	RootID      *int64            `json:"root_id,omitempty"`      // 根评论ID
	WorkspaceID *int              `json:"workspace_id,omitempty"` // 项目ID
}

type CreateIterationRequest added in v0.6.0

type CreateIterationRequest struct {
	Name           *string       `json:"name,omitempty"`             // [必须] 标题 支持模糊匹配
	WorkspaceID    *int          `json:"workspace_id,omitempty"`     // [必须] 项目 ID
	Description    *string       `json:"description,omitempty"`      // [必须] 详细描述
	StartDate      *string       `json:"startdate,omitempty"`        // [必须] 开始时间 支持时间查询
	EndDate        *string       `json:"enddate,omitempty"`          // [必须] 结束时间 支持时间查询
	Creator        *string       `json:"creator,omitempty"`          // [必须] 创建人
	WorkitemTypeID *int          `json:"workitem_type_id,omitempty"` // 迭代类别
	PlanAppID      *int          `json:"plan_app_id,omitempty"`      // 计划应用 ID
	Status         *string       `json:"status,omitempty"`           // 状态(系统状态 open/done,自定义状态可传中文)
	Label          *Enum[string] `json:"label,omitempty"`            // 标签, 可传多个
	CustomField1   *string       `json:"custom_field_1,omitempty"`   // 自定义字段参数
	CustomField2   *string       `json:"custom_field_2,omitempty"`   // 自定义字段参数
	CustomField3   *string       `json:"custom_field_3,omitempty"`   // 自定义字段参数
	CustomField4   *string       `json:"custom_field_4,omitempty"`   // 自定义字段参数
	CustomField5   *string       `json:"custom_field_5,omitempty"`   // 自定义字段参数
	CustomField6   *string       `json:"custom_field_6,omitempty"`   // 自定义字段参数
	CustomField7   *string       `json:"custom_field_7,omitempty"`   // 自定义字段参数
	CustomField8   *string       `json:"custom_field_8,omitempty"`   // 自定义字段参数
	CustomField9   *string       `json:"custom_field_9,omitempty"`   // 自定义字段参数
	CustomField10  *string       `json:"custom_field_10,omitempty"`  // 自定义字段参数
	CustomField11  *string       `json:"custom_field_11,omitempty"`  // 自定义字段参数
	CustomField12  *string       `json:"custom_field_12,omitempty"`  // 自定义字段参数
	CustomField13  *string       `json:"custom_field_13,omitempty"`  // 自定义字段参数
	CustomField14  *string       `json:"custom_field_14,omitempty"`  // 自定义字段参数
	CustomField15  *string       `json:"custom_field_15,omitempty"`  // 自定义字段参数
	CustomField16  *string       `json:"custom_field_16,omitempty"`  // 自定义字段参数
	CustomField17  *string       `json:"custom_field_17,omitempty"`  // 自定义字段参数
	CustomField18  *string       `json:"custom_field_18,omitempty"`  // 自定义字段参数
	CustomField19  *string       `json:"custom_field_19,omitempty"`  // 自定义字段参数
	CustomField20  *string       `json:"custom_field_20,omitempty"`  // 自定义字段参数
	CustomField21  *string       `json:"custom_field_21,omitempty"`  // 自定义字段参数
	CustomField22  *string       `json:"custom_field_22,omitempty"`  // 自定义字段参数
	CustomField23  *string       `json:"custom_field_23,omitempty"`  // 自定义字段参数
	CustomField24  *string       `json:"custom_field_24,omitempty"`  // 自定义字段参数
	CustomField25  *string       `json:"custom_field_25,omitempty"`  // 自定义字段参数
	CustomField26  *string       `json:"custom_field_26,omitempty"`  // 自定义字段参数
	CustomField27  *string       `json:"custom_field_27,omitempty"`  // 自定义字段参数
	CustomField28  *string       `json:"custom_field_28,omitempty"`  // 自定义字段参数
	CustomField29  *string       `json:"custom_field_29,omitempty"`  // 自定义字段参数
	CustomField30  *string       `json:"custom_field_30,omitempty"`  // 自定义字段参数
	CustomField31  *string       `json:"custom_field_31,omitempty"`  // 自定义字段参数
	CustomField32  *string       `json:"custom_field_32,omitempty"`  // 自定义字段参数
	CustomField33  *string       `json:"custom_field_33,omitempty"`  // 自定义字段参数
	CustomField34  *string       `json:"custom_field_34,omitempty"`  // 自定义字段参数
	CustomField35  *string       `json:"custom_field_35,omitempty"`  // 自定义字段参数
	CustomField36  *string       `json:"custom_field_36,omitempty"`  // 自定义字段参数
	CustomField37  *string       `json:"custom_field_37,omitempty"`  // 自定义字段参数
	CustomField38  *string       `json:"custom_field_38,omitempty"`  // 自定义字段参数
	CustomField39  *string       `json:"custom_field_39,omitempty"`  // 自定义字段参数
	CustomField40  *string       `json:"custom_field_40,omitempty"`  // 自定义字段参数
	CustomField41  *string       `json:"custom_field_41,omitempty"`  // 自定义字段参数
	CustomField42  *string       `json:"custom_field_42,omitempty"`  // 自定义字段参数
	CustomField43  *string       `json:"custom_field_43,omitempty"`  // 自定义字段参数
	CustomField44  *string       `json:"custom_field_44,omitempty"`  // 自定义字段参数
	CustomField45  *string       `json:"custom_field_45,omitempty"`  // 自定义字段参数
	CustomField46  *string       `json:"custom_field_46,omitempty"`  // 自定义字段参数
	CustomField47  *string       `json:"custom_field_47,omitempty"`  // 自定义字段参数
	CustomField48  *string       `json:"custom_field_48,omitempty"`  // 自定义字段参数
	CustomField49  *string       `json:"custom_field_49,omitempty"`  // 自定义字段参数
	CustomField50  *string       `json:"custom_field_50,omitempty"`  // 自定义字段参数
}

type CreateLabelRequest

type CreateLabelRequest struct {
	WorkspaceID *int        `json:"workspace_id"` // [必选]项目ID
	Name        *string     `json:"name"`         // [必选]标签名称
	Color       *LabelColor `json:"color"`        // 标签颜色
	Creator     *string     `json:"creator"`      // 创建人
}

type CreateStoryRequest

type CreateStoryRequest struct {
	WorkspaceID     *int           `json:"workspace_id,omitempty"`     // [必须]项目ID
	Name            *string        `json:"name,omitempty"`             // [必须]标题
	Priority        *string        `json:"priority,omitempty"`         // 优先级
	PriorityLabel   *PriorityLabel `json:"priority_label,omitempty"`   // 优先级。推荐使用这个字段
	BusinessValue   *int           `json:"business_value,omitempty"`   // 业务价值
	Version         *string        `json:"version,omitempty"`          // 版本
	Module          *string        `json:"module,omitempty"`           // 模块
	TestFocus       *string        `json:"test_focus,omitempty"`       // 测试重点
	Size            *int           `json:"size,omitempty"`             // 规模
	Owner           *string        `json:"owner,omitempty"`            // 处理人
	CC              *string        `json:"cc,omitempty"`               // 抄送人
	Creator         *string        `json:"creator,omitempty"`          // 创建人
	Developer       *string        `json:"developer,omitempty"`        // 开发人员
	Begin           *string        `json:"begin,omitempty"`            // 预计开始
	Due             *string        `json:"due,omitempty"`              // 预计结束
	IterationID     *string        `json:"iteration_id,omitempty"`     // 迭代ID
	TemplatedID     *int           `json:"templated_id,omitempty"`     // 模板ID
	ParentID        *int           `json:"parent_id,omitempty"`        // 父需求ID
	Effort          *string        `json:"effort,omitempty"`           // 预估工时
	EffortCompleted *string        `json:"effort_completed,omitempty"` // 完成工时
	Remain          *float64       `json:"remain,omitempty"`           // 剩余工时
	Exceed          *float64       `json:"exceed,omitempty"`           // 超出工时
	CategoryID      *int           `json:"category_id,omitempty"`      // 需求分类
	WorkitemTypeID  *int           `json:"workitem_type_id,omitempty"` // 需求类别
	ReleaseID       *int           `json:"release_id,omitempty"`       // 发布计划
	Source          *string        `json:"source,omitempty"`           // 来源
	Type            *string        `json:"type,omitempty"`             // 类型
	Description     *string        `json:"description,omitempty"`      // 详细描述
	Label           *string        `json:"label,omitempty"`            // 标签,标签不存在时将自动创建,多个以英文坚线分格
}

type CreateTimesheetRequest

type CreateTimesheetRequest struct {
	EntityType  *EntityType `json:"entity_type,omitempty"`  // [必须]对象类型,如story、task、bug等
	EntityID    *int64      `json:"entity_id,omitempty"`    // [必须]对象ID
	Timespent   *string     `json:"timespent,omitempty"`    // [必须]花费工时
	Timeremain  *string     `json:"timeremain,omitempty"`   // 剩余工时
	Spentdate   *string     `json:"spentdate,omitempty"`    // 花费日期
	Owner       *string     `json:"owner,omitempty"`        // [必须]花费创建人
	WorkspaceID *int        `json:"workspace_id,omitempty"` // [必须]项目ID
	Memo        *string     `json:"memo,omitempty"`         // 花费描述
}

type DocumentAttachment

type DocumentAttachment struct {
	ID          string `json:"id,omitempty"`           // 文档ID
	WorkspaceID string `json:"workspace_id,omitempty"` // 项目ID
	Name        string `json:"name,omitempty"`         // 标题
	Type        string `json:"type,omitempty"`         // 文档类型
	FolderID    string `json:"folder_id,omitempty"`    // 文件夹ID
	Creator     string `json:"creator,omitempty"`      // 创建人
	Modifier    string `json:"modifier,omitempty"`     // 最后修改人
	Status      string `json:"status,omitempty"`       // 状态
	Created     string `json:"created,omitempty"`      // 创建时间
	Modified    string `json:"modified,omitempty"`     // 最后修改时间
	DownloadURL string `json:"download_url,omitempty"` // 下载链接
}

type EntityType

type EntityType string
const (
	EntityTypeTask  EntityType = "task"
	EntityTypeStory EntityType = "story"
	EntityTypeBug   EntityType = "bug"
)

type Enum

type Enum[T any] []T

func NewEnum

func NewEnum[T any](values ...T) *Enum[T]

NewEnum creates a new enum value.

Example:

NewEnum("a", "b", "c") => "a|b|c"
NewEnum(1, 2, 3) => "1|2|3"

func (Enum[T]) EncodeValues

func (e Enum[T]) EncodeValues(key string, v *url.Values) error

func (Enum[T]) MarshalJSON added in v0.6.0

func (e Enum[T]) MarshalJSON() ([]byte, error)

type ErrorResponse

type ErrorResponse struct {
	// contains filtered or unexported fields
}

ErrorResponse represents a tapd error response.

func (*ErrorResponse) Error

func (e *ErrorResponse) Error() string

func (*ErrorResponse) Unwrap

func (e *ErrorResponse) Unwrap() error

type GetAllLastStepsRequest added in v0.7.0

type GetAllLastStepsRequest struct {
	WorkspaceID *int    `url:"workspace_id,omitempty"` // 项目 ID
	System      *string `url:"system,omitempty"`       // 系统名。目前只支持 story(需求的)
	GroupKey    *string `url:"group_key,omitempty"`    // 分组字段,可选字段 workflow_id(工作流ID) 或 workitem_type_id (需求类别ID)	默认按workitem_type_id分组
}

type GetAttachmentDownloadURLRequest

type GetAttachmentDownloadURLRequest struct {
	WorkspaceID *int `url:"workspace_id,omitempty"` // [必须]项目ID
	ID          *int `url:"id,omitempty"`           // [必须]附件ID
}

type GetAttachmentsRequest

type GetAttachmentsRequest struct {
	WorkspaceID *int    `url:"workspace_id,omitempty"`  // [必须]项目ID
	ID          *int    `url:"id,omitempty"`            // [可选]ID
	Type        *string `url:"type,omitempty"`          // [可选]类型
	EntryID     *int    `url:"entry_id,omitempty"`      // [可选]依赖对象ID
	Filename    *string `url:"filename,omitempty"`      // [可选]附件名称
	Owner       *string `url:"owner,omitempty"`         // [可选]上传人
	DownloadURL string  `json:"download_url,omitempty"` // 下载链接(仅在获取单个附件时返回)
}

type GetBugsRequest

type GetBugsRequest struct {
	ID                *Multi[int64]      `url:"id,omitempty"`               // ID 支持多ID查询
	Title             *string            `url:"title,omitempty"`            // 标题 支持模糊匹配
	Priority          *string            `url:"priority,omitempty"`         // 优先级。为了兼容自定义优先级,请使用 priority_label 字段,详情参考:如何兼容自定义优先级
	PriorityLabel     *PriorityLabel     `url:"priority_label,omitempty"`   // 优先级。推荐使用这个字段
	Severity          *Enum[BugSeverity] `url:"severity,omitempty"`         // 严重程度 支持枚举查询
	Status            *Enum[string]      `url:"status,omitempty"`           // 状态 支持不等于查询、枚举查询
	VStatus           *string            `url:"v_status,omitempty"`         // 状态(支持传入中文状态名称)
	Label             *Enum[string]      `url:"label,omitempty"`            // 标签查询 支持枚举查询
	IterationID       *Enum[string]      `url:"iteration_id,omitempty"`     // 迭代 支持枚举查询
	Module            *Enum[string]      `url:"module,omitempty"`           // 模块 支持枚举查询
	ReleaseID         *int               `url:"release_id,omitempty"`       // 发布计划
	VersionReport     *Enum[string]      `url:"version_report,omitempty"`   // 发现版本 枚举查询
	VersionTest       *string            `url:"version_test,omitempty"`     // 验证版本
	VersionFix        *string            `url:"version_fix,omitempty"`      // 合入版本
	VersionClose      *string            `url:"version_close,omitempty"`    // 关闭版本
	BaselineFind      *string            `url:"baseline_find,omitempty"`    // 发现基线
	BaselineJoin      *string            `url:"baseline_join,omitempty"`    // 合入基线
	BaselineTest      *string            `url:"baseline_test,omitempty"`    // 验证基线
	BaselineClose     *string            `url:"baseline_close,omitempty"`   // 关闭基线
	Feature           *string            `url:"feature,omitempty"`          // 特性
	CurrentOwner      *string            `url:"current_owner,omitempty"`    // 处理人 支持模糊匹配
	CC                *string            `url:"cc,omitempty"`               // 抄送人
	Reporter          *Multi[string]     `url:"reporter,omitempty"`         // 创建人 支持多人员查询
	Participator      *Multi[string]     `url:"participator,omitempty"`     // 参与人 支持多人员查询
	TE                *string            `url:"te,omitempty"`               // 测试人员 支持模糊匹配
	DE                *string            `url:"de,omitempty"`               // 开发人员 支持模糊匹配
	Auditer           *string            `url:"auditer,omitempty"`          // 审核人
	Confirmer         *string            `url:"confirmer,omitempty"`        // 验证人
	Fixer             *string            `url:"fixer,omitempty"`            // 修复人
	Closer            *string            `url:"closer,omitempty"`           // 关闭人
	LastModify        *string            `url:"lastmodify,omitempty"`       // 最后修改人
	Created           *string            `url:"created,omitempty"`          // 创建时间 支持时间查询
	InProgressTime    *string            `url:"in_progress_time,omitempty"` // 接受处理时间 支持时间查询
	Resolved          *string            `url:"resolved,omitempty"`         // 解决时间 支持时间查询
	VerifyTime        *string            `url:"verify_time,omitempty"`      // 验证时间 支持时间查询
	Closed            *string            `url:"closed,omitempty"`           // 关闭时间 支持时间查询
	RejectTime        *string            `url:"reject_time,omitempty"`      // 拒绝时间 支持时间查询
	Modified          *string            `url:"modified,omitempty"`         // 最后修改时间 支持时间查询
	Begin             *string            `url:"begin,omitempty"`            // 预计开始
	Due               *string            `url:"due,omitempty"`              // 预计结束
	Deadline          *string            `url:"deadline,omitempty"`         // 解决期限
	OS                *string            `url:"os,omitempty"`               // 操作系统
	Platform          *string            `url:"platform,omitempty"`         // 软件平台
	TestMode          *string            `url:"testmode,omitempty"`         // 测试方式
	TestPhase         *string            `url:"testphase,omitempty"`        // 测试阶段
	TestType          *string            `url:"testtype,omitempty"`         // 测试类型
	Source            *Enum[string]      `url:"source,omitempty"`           // 缺陷根源 支持枚举查询
	BugType           *string            `url:"bugtype,omitempty"`          // 缺陷类型
	Frequency         *Enum[string]      `url:"frequency,omitempty"`        // 重现规律 支持枚举查询
	OriginPhase       *string            `url:"originphase,omitempty"`      // 发现阶段
	SourcePhase       *string            `url:"sourcephase,omitempty"`      // 引入阶段
	Resolution        *Enum[string]      `url:"resolution,omitempty"`       // 解决方法 支持枚举查询
	Estimate          *int               `url:"estimate,omitempty"`         // 预计解决时间
	Description       *string            `url:"description,omitempty"`      // 详细描述 支持模糊匹配
	WorkspaceID       *int               `url:"workspace_id,omitempty"`     // 项目ID
	CustomFieldOne    *string            `url:"custom_field_one,omitempty"` // 自定义字段参数,具体字段名通过接口 获取缺陷自定义字段配置 获取 支持枚举查询
	CustomFieldTwo    *string            `url:"custom_field_two,omitempty"`
	CustomFieldThree  *string            `url:"custom_field_three,omitempty"`
	CustomFieldFour   *string            `url:"custom_field_four,omitempty"`
	CustomFieldFive   *string            `url:"custom_field_five,omitempty"`
	CustomField6      *string            `url:"custom_field_6,omitempty"`
	CustomField7      *string            `url:"custom_field_7,omitempty"`
	CustomField8      *string            `url:"custom_field_8,omitempty"`
	CustomField9      *string            `url:"custom_field_9,omitempty"`
	CustomField10     *string            `url:"custom_field_10,omitempty"`
	CustomField11     *string            `url:"custom_field_11,omitempty"`
	CustomField12     *string            `url:"custom_field_12,omitempty"`
	CustomField13     *string            `url:"custom_field_13,omitempty"`
	CustomField14     *string            `url:"custom_field_14,omitempty"`
	CustomField15     *string            `url:"custom_field_15,omitempty"`
	CustomField16     *string            `url:"custom_field_16,omitempty"`
	CustomField17     *string            `url:"custom_field_17,omitempty"`
	CustomField18     *string            `url:"custom_field_18,omitempty"`
	CustomField19     *string            `url:"custom_field_19,omitempty"`
	CustomField20     *string            `url:"custom_field_20,omitempty"`
	CustomField21     *string            `url:"custom_field_21,omitempty"`
	CustomField22     *string            `url:"custom_field_22,omitempty"`
	CustomField23     *string            `url:"custom_field_23,omitempty"`
	CustomField24     *string            `url:"custom_field_24,omitempty"`
	CustomField25     *string            `url:"custom_field_25,omitempty"`
	CustomField26     *string            `url:"custom_field_26,omitempty"`
	CustomField27     *string            `url:"custom_field_27,omitempty"`
	CustomField28     *string            `url:"custom_field_28,omitempty"`
	CustomField29     *string            `url:"custom_field_29,omitempty"`
	CustomField30     *string            `url:"custom_field_30,omitempty"`
	CustomField31     *string            `url:"custom_field_31,omitempty"`
	CustomField32     *string            `url:"custom_field_32,omitempty"`
	CustomField33     *string            `url:"custom_field_33,omitempty"`
	CustomField34     *string            `url:"custom_field_34,omitempty"`
	CustomField35     *string            `url:"custom_field_35,omitempty"`
	CustomField36     *string            `url:"custom_field_36,omitempty"`
	CustomField37     *string            `url:"custom_field_37,omitempty"`
	CustomField38     *string            `url:"custom_field_38,omitempty"`
	CustomField39     *string            `url:"custom_field_39,omitempty"`
	CustomField40     *string            `url:"custom_field_40,omitempty"`
	CustomField41     *string            `url:"custom_field_41,omitempty"`
	CustomField42     *string            `url:"custom_field_42,omitempty"`
	CustomField43     *string            `url:"custom_field_43,omitempty"`
	CustomField44     *string            `url:"custom_field_44,omitempty"`
	CustomField45     *string            `url:"custom_field_45,omitempty"`
	CustomField46     *string            `url:"custom_field_46,omitempty"`
	CustomField47     *string            `url:"custom_field_47,omitempty"`
	CustomField48     *string            `url:"custom_field_48,omitempty"`
	CustomField49     *string            `url:"custom_field_49,omitempty"`
	CustomField50     *string            `url:"custom_field_50,omitempty"`
	CustomField51     *string            `url:"custom_field_51,omitempty"`
	CustomField52     *string            `url:"custom_field_52,omitempty"`
	CustomField53     *string            `url:"custom_field_53,omitempty"`
	CustomField54     *string            `url:"custom_field_54,omitempty"`
	CustomField55     *string            `url:"custom_field_55,omitempty"`
	CustomField56     *string            `url:"custom_field_56,omitempty"`
	CustomField57     *string            `url:"custom_field_57,omitempty"`
	CustomField58     *string            `url:"custom_field_58,omitempty"`
	CustomField59     *string            `url:"custom_field_59,omitempty"`
	CustomField60     *string            `url:"custom_field_60,omitempty"`
	CustomField61     *string            `url:"custom_field_61,omitempty"`
	CustomField62     *string            `url:"custom_field_62,omitempty"`
	CustomField63     *string            `url:"custom_field_63,omitempty"`
	CustomField64     *string            `url:"custom_field_64,omitempty"`
	CustomField65     *string            `url:"custom_field_65,omitempty"`
	CustomField66     *string            `url:"custom_field_66,omitempty"`
	CustomField67     *string            `url:"custom_field_67,omitempty"`
	CustomField68     *string            `url:"custom_field_68,omitempty"`
	CustomField69     *string            `url:"custom_field_69,omitempty"`
	CustomField70     *string            `url:"custom_field_70,omitempty"`
	CustomField71     *string            `url:"custom_field_71,omitempty"`
	CustomField72     *string            `url:"custom_field_72,omitempty"`
	CustomField73     *string            `url:"custom_field_73,omitempty"`
	CustomField74     *string            `url:"custom_field_74,omitempty"`
	CustomField75     *string            `url:"custom_field_75,omitempty"`
	CustomField76     *string            `url:"custom_field_76,omitempty"`
	CustomField77     *string            `url:"custom_field_77,omitempty"`
	CustomField78     *string            `url:"custom_field_78,omitempty"`
	CustomField79     *string            `url:"custom_field_79,omitempty"`
	CustomField80     *string            `url:"custom_field_80,omitempty"`
	CustomField81     *string            `url:"custom_field_81,omitempty"`
	CustomField82     *string            `url:"custom_field_82,omitempty"`
	CustomField83     *string            `url:"custom_field_83,omitempty"`
	CustomField84     *string            `url:"custom_field_84,omitempty"`
	CustomField85     *string            `url:"custom_field_85,omitempty"`
	CustomField86     *string            `url:"custom_field_86,omitempty"`
	CustomField87     *string            `url:"custom_field_87,omitempty"`
	CustomField88     *string            `url:"custom_field_88,omitempty"`
	CustomField89     *string            `url:"custom_field_89,omitempty"`
	CustomField90     *string            `url:"custom_field_90,omitempty"`
	CustomField91     *string            `url:"custom_field_91,omitempty"`
	CustomField92     *string            `url:"custom_field_92,omitempty"`
	CustomField93     *string            `url:"custom_field_93,omitempty"`
	CustomField94     *string            `url:"custom_field_94,omitempty"`
	CustomField95     *string            `url:"custom_field_95,omitempty"`
	CustomField96     *string            `url:"custom_field_96,omitempty"`
	CustomField97     *string            `url:"custom_field_97,omitempty"`
	CustomField98     *string            `url:"custom_field_98,omitempty"`
	CustomField99     *string            `url:"custom_field_99,omitempty"`
	CustomField100    *string            `url:"custom_field_100,omitempty"`
	CustomField101    *string            `url:"custom_field_101,omitempty"`
	CustomField102    *string            `url:"custom_field_102,omitempty"`
	CustomField103    *string            `url:"custom_field_103,omitempty"`
	CustomField104    *string            `url:"custom_field_104,omitempty"`
	CustomField105    *string            `url:"custom_field_105,omitempty"`
	CustomField106    *string            `url:"custom_field_106,omitempty"`
	CustomField107    *string            `url:"custom_field_107,omitempty"`
	CustomField108    *string            `url:"custom_field_108,omitempty"`
	CustomField109    *string            `url:"custom_field_109,omitempty"`
	CustomField110    *string            `url:"custom_field_110,omitempty"`
	CustomField111    *string            `url:"custom_field_111,omitempty"`
	CustomField112    *string            `url:"custom_field_112,omitempty"`
	CustomField113    *string            `url:"custom_field_113,omitempty"`
	CustomField114    *string            `url:"custom_field_114,omitempty"`
	CustomField115    *string            `url:"custom_field_115,omitempty"`
	CustomField116    *string            `url:"custom_field_116,omitempty"`
	CustomField117    *string            `url:"custom_field_117,omitempty"`
	CustomField118    *string            `url:"custom_field_118,omitempty"`
	CustomField119    *string            `url:"custom_field_119,omitempty"`
	CustomField120    *string            `url:"custom_field_120,omitempty"`
	CustomField121    *string            `url:"custom_field_121,omitempty"`
	CustomField122    *string            `url:"custom_field_122,omitempty"`
	CustomField123    *string            `url:"custom_field_123,omitempty"`
	CustomField124    *string            `url:"custom_field_124,omitempty"`
	CustomField125    *string            `url:"custom_field_125,omitempty"`
	CustomField126    *string            `url:"custom_field_126,omitempty"`
	CustomField127    *string            `url:"custom_field_127,omitempty"`
	CustomField128    *string            `url:"custom_field_128,omitempty"`
	CustomField129    *string            `url:"custom_field_129,omitempty"`
	CustomField130    *string            `url:"custom_field_130,omitempty"`
	CustomField131    *string            `url:"custom_field_131,omitempty"`
	CustomField132    *string            `url:"custom_field_132,omitempty"`
	CustomField133    *string            `url:"custom_field_133,omitempty"`
	CustomField134    *string            `url:"custom_field_134,omitempty"`
	CustomField135    *string            `url:"custom_field_135,omitempty"`
	CustomField136    *string            `url:"custom_field_136,omitempty"`
	CustomField137    *string            `url:"custom_field_137,omitempty"`
	CustomField138    *string            `url:"custom_field_138,omitempty"`
	CustomField139    *string            `url:"custom_field_139,omitempty"`
	CustomField140    *string            `url:"custom_field_140,omitempty"`
	CustomField141    *string            `url:"custom_field_141,omitempty"`
	CustomField142    *string            `url:"custom_field_142,omitempty"`
	CustomField143    *string            `url:"custom_field_143,omitempty"`
	CustomField144    *string            `url:"custom_field_144,omitempty"`
	CustomField145    *string            `url:"custom_field_145,omitempty"`
	CustomField146    *string            `url:"custom_field_146,omitempty"`
	CustomField147    *string            `url:"custom_field_147,omitempty"`
	CustomField148    *string            `url:"custom_field_148,omitempty"`
	CustomField149    *string            `url:"custom_field_149,omitempty"`
	CustomField150    *string            `url:"custom_field_150,omitempty"`
	CustomPlanField1  *string            `url:"custom_plan_field_1,omitempty"` // 自定义计划应用参数,具体字段名通过接口 获取自定义计划应用 获取
	CustomPlanField2  *string            `url:"custom_plan_field_2,omitempty"`
	CustomPlanField3  *string            `url:"custom_plan_field_3,omitempty"`
	CustomPlanField4  *string            `url:"custom_plan_field_4,omitempty"`
	CustomPlanField5  *string            `url:"custom_plan_field_5,omitempty"`
	CustomPlanField6  *string            `url:"custom_plan_field_6,omitempty"`
	CustomPlanField7  *string            `url:"custom_plan_field_7,omitempty"`
	CustomPlanField8  *string            `url:"custom_plan_field_8,omitempty"`
	CustomPlanField9  *string            `url:"custom_plan_field_9,omitempty"`
	CustomPlanField10 *string            `url:"custom_plan_field_10,omitempty"`
	Limit             *int               `url:"limit,omitempty"`  // 设置返回数量限制,默认为30
	Page              *int               `url:"page,omitempty"`   // 返回当前数量限制下第N页的数据,默认为1(第一页)
	Order             *Order             `url:"order,omitempty"`  // 排序规则,规则:字段名 ASC或者DESC,然后 urlencode 如按创建时间逆序:order=created%20desc
	Fields            *Multi[string]     `url:"fields,omitempty"` // 设置获取的字段,多个字段间以','逗号隔开
}

type GetCommentsCountRequest

type GetCommentsCountRequest struct {
	ID          *Multi[int64]     `url:"id,omitempty"`           // 评论ID 支持多ID查询
	Title       *string           `url:"title,omitempty"`        // 标题
	Description *string           `url:"description,omitempty"`  // 内容
	Author      *string           `url:"author,omitempty"`       // 评论人
	EntryType   *CommentEntryType `url:"entry_type,omitempty"`   // 评论类型(取值: bug、 bug_remark (流转缺陷时候的评论)、 stories、 tasks 。多个类型间以竖线隔开) 支持枚举查询
	EntryID     *int64            `url:"entry_id,omitempty"`     // 评论所依附的业务对象实体id
	Created     *string           `url:"created,omitempty"`      // 创建时间 支持时间查询
	Modified    *string           `url:"modified,omitempty"`     // 最后更改时间 支持时间查询
	WorkspaceID *int              `url:"workspace_id,omitempty"` // 项目ID
	RootID      *int64            `url:"root_id,omitempty"`      // 根评论ID
	ReplyID     *int64            `url:"reply_id,omitempty"`     // 评论回复的ID
}

type GetCommentsRequest

type GetCommentsRequest struct {
	ID          *Multi[int64]     `url:"id,omitempty"`           // 评论ID 支持多ID查询
	Title       *string           `url:"title,omitempty"`        // 标题
	Description *string           `url:"description,omitempty"`  // 内容
	Author      *string           `url:"author,omitempty"`       // 评论人
	EntryType   *CommentEntryType `url:"entry_type,omitempty"`   // 评论类型(取值: bug、 bug_remark (流转缺陷时候的评论)、 stories、 tasks 。多个类型间以竖线隔开) 支持枚举查询
	EntryID     *int64            `url:"entry_id,omitempty"`     // 评论所依附的业务对象实体id
	Created     *string           `url:"created,omitempty"`      // 创建时间 支持时间查询
	Modified    *string           `url:"modified,omitempty"`     // 最后更改时间 支持时间查询
	WorkspaceID *int              `url:"workspace_id,omitempty"` // 项目ID
	RootID      *int64            `url:"root_id,omitempty"`      // 根评论ID
	ReplyID     *int64            `url:"reply_id,omitempty"`     // 评论回复的ID
	Limit       *int              `url:"limit,omitempty"`        // 设置返回数量限制,默认为30
	Page        *int              `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1(第一页)
	Order       *Order            `url:"order,omitempty"`        // 排序规则,规则:字段名 ASC或者DESC,然后 urlencode 如按创建时间逆序:order=created%20desc
	Fields      *Multi[string]    `url:"fields,omitempty"`       // 设置获取的字段,多个字段间以','逗号隔开
}

type GetConvertStoryIDsToQueryTokenRequest

type GetConvertStoryIDsToQueryTokenRequest struct {
	WorkspaceID *int          `json:"workspace_id,omitempty"` // 项目ID
	StoryIDs    *Multi[int64] `json:"ids,omitempty"`          // 需求ID
}

type GetConvertStoryIDsToQueryTokenResponse

type GetConvertStoryIDsToQueryTokenResponse struct {
	QueryToken string `json:"queryToken,omitempty"` // 列表queryToken
	Href       string `json:"href,omitempty"`       // 对应的TAPD需求列表链接
}

type GetDocumentDownloadURLRequest

type GetDocumentDownloadURLRequest struct {
	WorkspaceID *int `url:"workspace_id,omitempty"` // [必须]项目ID
	ID          *int `url:"id,omitempty"`           // [必须]文档ID
}

type GetImageDownloadURLRequest

type GetImageDownloadURLRequest struct {
	WorkspaceID *int    `url:"workspace_id,omitempty"` // [必须]项目ID
	ImagePath   *string `url:"image_path,omitempty"`   // [必须]图片路径, 支持完整url地址, 图片所属项目必须和传入的项目id一致
}

type GetIterationsCountRequest added in v0.6.0

type GetIterationsCountRequest struct {
	ID             *Multi[int64] `url:"id,omitempty"`               // ID 支持多ID查询
	WorkspaceID    *int          `url:"workspace_id,omitempty"`     // 项目 ID
	Name           *string       `url:"name,omitempty"`             // 标题 支持模糊匹配
	Description    *string       `url:"description,omitempty"`      // 详细描述
	StartDate      *string       `url:"startdate,omitempty"`        // 开始时间 支持时间查询
	EndDate        *string       `url:"enddate,omitempty"`          // 结束时间 支持时间查询
	WorkitemTypeID *int          `url:"workitem_type_id,omitempty"` // 迭代类别
	PlanAppID      *int          `url:"plan_app_id,omitempty"`      // 计划应用 ID
	Status         *string       `url:"status,omitempty"`           // 状态(系统状态 open/done,自定义状态可传中文)
	Creator        *string       `url:"creator,omitempty"`          // 创建人
	Created        *string       `url:"created,omitempty"`          // 创建时间 支持时间查询
	Modified       *string       `url:"modified,omitempty"`         // 最后修改时间 支持时间查询
	Completed      *string       `url:"completed,omitempty"`        // 完成时间
	CustomField1   *string       `url:"custom_field_1,omitempty"`   // 自定义字段参数
	CustomField2   *string       `url:"custom_field_2,omitempty"`   // 自定义字段参数
	CustomField3   *string       `url:"custom_field_3,omitempty"`   // 自定义字段参数
	CustomField4   *string       `url:"custom_field_4,omitempty"`   // 自定义字段参数
	CustomField5   *string       `url:"custom_field_5,omitempty"`   // 自定义字段参数
	CustomField6   *string       `url:"custom_field_6,omitempty"`   // 自定义字段参数
	CustomField7   *string       `url:"custom_field_7,omitempty"`   // 自定义字段参数
	CustomField8   *string       `url:"custom_field_8,omitempty"`   // 自定义字段参数
	CustomField9   *string       `url:"custom_field_9,omitempty"`   // 自定义字段参数
	CustomField10  *string       `url:"custom_field_10,omitempty"`  // 自定义字段参数
	CustomField11  *string       `url:"custom_field_11,omitempty"`  // 自定义字段参数
	CustomField12  *string       `url:"custom_field_12,omitempty"`  // 自定义字段参数
	CustomField13  *string       `url:"custom_field_13,omitempty"`  // 自定义字段参数
	CustomField14  *string       `url:"custom_field_14,omitempty"`  // 自定义字段参数
	CustomField15  *string       `url:"custom_field_15,omitempty"`  // 自定义字段参数
	CustomField16  *string       `url:"custom_field_16,omitempty"`  // 自定义字段参数
	CustomField17  *string       `url:"custom_field_17,omitempty"`  // 自定义字段参数
	CustomField18  *string       `url:"custom_field_18,omitempty"`  // 自定义字段参数
	CustomField19  *string       `url:"custom_field_19,omitempty"`  // 自定义字段参数
	CustomField20  *string       `url:"custom_field_20,omitempty"`  // 自定义字段参数
	CustomField21  *string       `url:"custom_field_21,omitempty"`  // 自定义字段参数
	CustomField22  *string       `url:"custom_field_22,omitempty"`  // 自定义字段参数
	CustomField23  *string       `url:"custom_field_23,omitempty"`  // 自定义字段参数
	CustomField24  *string       `url:"custom_field_24,omitempty"`  // 自定义字段参数
	CustomField25  *string       `url:"custom_field_25,omitempty"`  // 自定义字段参数
	CustomField26  *string       `url:"custom_field_26,omitempty"`  // 自定义字段参数
	CustomField27  *string       `url:"custom_field_27,omitempty"`  // 自定义字段参数
	CustomField28  *string       `url:"custom_field_28,omitempty"`  // 自定义字段参数
	CustomField29  *string       `url:"custom_field_29,omitempty"`  // 自定义字段参数
	CustomField30  *string       `url:"custom_field_30,omitempty"`  // 自定义字段参数
	CustomField31  *string       `url:"custom_field_31,omitempty"`  // 自定义字段参数
	CustomField32  *string       `url:"custom_field_32,omitempty"`  // 自定义字段参数
	CustomField33  *string       `url:"custom_field_33,omitempty"`  // 自定义字段参数
	CustomField34  *string       `url:"custom_field_34,omitempty"`  // 自定义字段参数
	CustomField35  *string       `url:"custom_field_35,omitempty"`  // 自定义字段参数
	CustomField36  *string       `url:"custom_field_36,omitempty"`  // 自定义字段参数
	CustomField37  *string       `url:"custom_field_37,omitempty"`  // 自定义字段参数
	CustomField38  *string       `url:"custom_field_38,omitempty"`  // 自定义字段参数
	CustomField39  *string       `url:"custom_field_39,omitempty"`  // 自定义字段参数
	CustomField40  *string       `url:"custom_field_40,omitempty"`  // 自定义字段参数
	CustomField41  *string       `url:"custom_field_41,omitempty"`  // 自定义字段参数
	CustomField42  *string       `url:"custom_field_42,omitempty"`  // 自定义字段参数
	CustomField43  *string       `url:"custom_field_43,omitempty"`  // 自定义字段参数
	CustomField44  *string       `url:"custom_field_44,omitempty"`  // 自定义字段参数
	CustomField45  *string       `url:"custom_field_45,omitempty"`  // 自定义字段参数
	CustomField46  *string       `url:"custom_field_46,omitempty"`  // 自定义字段参数
	CustomField47  *string       `url:"custom_field_47,omitempty"`  // 自定义字段参数
	CustomField48  *string       `url:"custom_field_48,omitempty"`  // 自定义字段参数
	CustomField49  *string       `url:"custom_field_49,omitempty"`  // 自定义字段参数
	CustomField50  *string       `url:"custom_field_50,omitempty"`  // 自定义字段参数
}

type GetIterationsRequest added in v0.6.0

type GetIterationsRequest struct {
	ID             *Multi[int64]  `url:"id,omitempty"`               // ID 支持多ID查询
	Name           *string        `url:"name,omitempty"`             // 标题 支持模糊匹配
	WorkspaceID    *int           `url:"workspace_id,omitempty"`     // 项目 ID
	Description    *string        `url:"description,omitempty"`      // 详细描述
	StartDate      *string        `url:"startdate,omitempty"`        // 开始时间 支持时间查询
	EndDate        *string        `url:"enddate,omitempty"`          // 结束时间 支持时间查询
	WorkitemTypeID *int           `url:"workitem_type_id,omitempty"` // 迭代类别
	PlanAppID      *int           `url:"plan_app_id,omitempty"`      // 计划应用 ID
	Status         *string        `url:"status,omitempty"`           // 状态(系统状态 open/done,自定义状态可传中文)
	Creator        *string        `url:"creator,omitempty"`          // 创建人
	Created        *string        `url:"created,omitempty"`          // 创建时间 支持时间查询
	Modified       *string        `url:"modified,omitempty"`         // 最后修改时间 支持时间查询
	Completed      *string        `url:"completed,omitempty"`        // 完成时间
	CustomField1   *string        `url:"custom_field_1,omitempty"`   // 自定义字段参数
	CustomField2   *string        `url:"custom_field_2,omitempty"`   // 自定义字段参数
	CustomField3   *string        `url:"custom_field_3,omitempty"`   // 自定义字段参数
	CustomField4   *string        `url:"custom_field_4,omitempty"`   // 自定义字段参数
	CustomField5   *string        `url:"custom_field_5,omitempty"`   // 自定义字段参数
	CustomField6   *string        `url:"custom_field_6,omitempty"`   // 自定义字段参数
	CustomField7   *string        `url:"custom_field_7,omitempty"`   // 自定义字段参数
	CustomField8   *string        `url:"custom_field_8,omitempty"`   // 自定义字段参数
	CustomField9   *string        `url:"custom_field_9,omitempty"`   // 自定义字段参数
	CustomField10  *string        `url:"custom_field_10,omitempty"`  // 自定义字段参数
	CustomField11  *string        `url:"custom_field_11,omitempty"`  // 自定义字段参数
	CustomField12  *string        `url:"custom_field_12,omitempty"`  // 自定义字段参数
	CustomField13  *string        `url:"custom_field_13,omitempty"`  // 自定义字段参数
	CustomField14  *string        `url:"custom_field_14,omitempty"`  // 自定义字段参数
	CustomField15  *string        `url:"custom_field_15,omitempty"`  // 自定义字段参数
	CustomField16  *string        `url:"custom_field_16,omitempty"`  // 自定义字段参数
	CustomField17  *string        `url:"custom_field_17,omitempty"`  // 自定义字段参数
	CustomField18  *string        `url:"custom_field_18,omitempty"`  // 自定义字段参数
	CustomField19  *string        `url:"custom_field_19,omitempty"`  // 自定义字段参数
	CustomField20  *string        `url:"custom_field_20,omitempty"`  // 自定义字段参数
	CustomField21  *string        `url:"custom_field_21,omitempty"`  // 自定义字段参数
	CustomField22  *string        `url:"custom_field_22,omitempty"`  // 自定义字段参数
	CustomField23  *string        `url:"custom_field_23,omitempty"`  // 自定义字段参数
	CustomField24  *string        `url:"custom_field_24,omitempty"`  // 自定义字段参数
	CustomField25  *string        `url:"custom_field_25,omitempty"`  // 自定义字段参数
	CustomField26  *string        `url:"custom_field_26,omitempty"`  // 自定义字段参数
	CustomField27  *string        `url:"custom_field_27,omitempty"`  // 自定义字段参数
	CustomField28  *string        `url:"custom_field_28,omitempty"`  // 自定义字段参数
	CustomField29  *string        `url:"custom_field_29,omitempty"`  // 自定义字段参数
	CustomField30  *string        `url:"custom_field_30,omitempty"`  // 自定义字段参数
	CustomField31  *string        `url:"custom_field_31,omitempty"`  // 自定义字段参数
	CustomField32  *string        `url:"custom_field_32,omitempty"`  // 自定义字段参数
	CustomField33  *string        `url:"custom_field_33,omitempty"`  // 自定义字段参数
	CustomField34  *string        `url:"custom_field_34,omitempty"`  // 自定义字段参数
	CustomField35  *string        `url:"custom_field_35,omitempty"`  // 自定义字段参数
	CustomField36  *string        `url:"custom_field_36,omitempty"`  // 自定义字段参数
	CustomField37  *string        `url:"custom_field_37,omitempty"`  // 自定义字段参数
	CustomField38  *string        `url:"custom_field_38,omitempty"`  // 自定义字段参数
	CustomField39  *string        `url:"custom_field_39,omitempty"`  // 自定义字段参数
	CustomField40  *string        `url:"custom_field_40,omitempty"`  // 自定义字段参数
	CustomField41  *string        `url:"custom_field_41,omitempty"`  // 自定义字段参数
	CustomField42  *string        `url:"custom_field_42,omitempty"`  // 自定义字段参数
	CustomField43  *string        `url:"custom_field_43,omitempty"`  // 自定义字段参数
	CustomField44  *string        `url:"custom_field_44,omitempty"`  // 自定义字段参数
	CustomField45  *string        `url:"custom_field_45,omitempty"`  // 自定义字段参数
	CustomField46  *string        `url:"custom_field_46,omitempty"`  // 自定义字段参数
	CustomField47  *string        `url:"custom_field_47,omitempty"`  // 自定义字段参数
	CustomField48  *string        `url:"custom_field_48,omitempty"`  // 自定义字段参数
	CustomField49  *string        `url:"custom_field_49,omitempty"`  // 自定义字段参数
	CustomField50  *string        `url:"custom_field_50,omitempty"`  // 自定义字段参数
	Limit          *int           `url:"limit,omitempty"`            // 设置返回数量限制,默认为 30
	Page           *int           `url:"page,omitempty"`             // 返回当前数量限制下第 N 页的数据,默认为 1(第一页)
	Order          *Order         `url:"order,omitempty"`            // 排序规则,规则:字段名 ASC 或者 DESC,然后 urlencode 如按创建时间逆序:order=created%20desc
	Fields         *Multi[string] `url:"fields,omitempty"`           // 设置获取的字段,多个字段间以 ',' 逗号隔开
}

type GetLabelCountRequest

type GetLabelCountRequest struct {
	WorkspaceID *int        `url:"workspace_id,omitempty"` // [必选]项目ID
	ID          *Multi[int] `url:"id,omitempty"`           // [可选]id 支持多ID查询
	Name        *string     `url:"name,omitempty"`         // [可选]标签名称 支持模糊匹配
	Creator     *string     `url:"creator,omitempty"`      // [可选]创建人
	Created     *string     `url:"created,omitempty"`      // [可选]创建时间 支持时间查询
}

type GetLabelsRequest

type GetLabelsRequest struct {
	WorkspaceID *int        `url:"workspace_id,omitempty"` // [必选]项目ID
	ID          *Multi[int] `url:"id,omitempty"`           // [可选]id 支持多ID查询
	Name        *string     `url:"name,omitempty"`         // [可选]标签名称 支持模糊匹配
	Creator     *string     `url:"creator,omitempty"`      // [可选]创建人
	Created     *string     `url:"created,omitempty"`      // [可选]创建时间 支持时间查询
	Limit       *int        `url:"limit,omitempty"`        // [可选]设置返回数量限制,默认为30
	Page        *int        `url:"page,omitempty"`         // [可选]返回当前数量限制下第N页的数据,默认为1(第一页)
	Order       *Order      `url:"order,omitempty"`        // [可选]排序规则,规则:字段名 ASC或者DESC,然后 urlencode 如按创建时间逆序
}

type GetMemberActivityLogRequest

type GetMemberActivityLogRequest struct {
	WorkspaceID    *int           `url:"workspace_id,omitempty"`    // [必须]项目 id 为公司id则查询所有项目
	CompanyOnly    *int           `url:"company_only,omitempty"`    // [可选]为1则仅返回公司级活动日志 要求workspace_id=公司id & company_only=1
	Limit          *int           `url:"limit,omitempty"`           // [可选]设置返回数量限制,默认为20
	Page           *int           `url:"page,omitempty"`            // [可选]返回当前数量限制下第N页的数据,默认为1(第一页)
	StartTime      *string        `url:"start_time,omitempty"`      // [可选]起始时间,精确到分钟,格式为Y-m-d H:i 只能查最近半年内的数据
	EndTime        *string        `url:"end_time,omitempty"`        // [可选]终止时间,精确到分钟,格式为Y-m-d H:i 只能查最近半年内的数据
	Operator       *string        `url:"operator,omitempty"`        // [可选]操作人昵称
	OperateType    *OperateType   `url:"operate_type,omitempty"`    // [可选]操作类型,默认为所有,可以填写add,delete,download,upload中的一个
	OperatorObject *OperateObject `url:"operator_object,omitempty"` // [可选]操作对象,默认为所有,可以填写attachment,board,bug,document,iteration,launch,member_activity_log,release,story,task,tcase,testplan,wiki中的一个
	IP             *string        `url:"ip,omitempty"`              // [可选]请求IP条件,严格匹配
}

type GetMemberActivityLogResponse

type GetMemberActivityLogResponse struct {
	PerPage      string               `json:"perPage"`
	TotalItems   int                  `json:"totalItems"`
	CurrentPage  string               `json:"currentPage"`
	Records      []*MemberActivityLog `json:"records"`
	OperateTypes struct {
		Add      string `json:"add"`
		Delete   string `json:"delete"`
		Upload   string `json:"upload"`
		Download string `json:"download"`
	} `json:"operate_types"`
	OperateObjects struct {
		Board             string `json:"board"`
		Story             string `json:"story"`
		Bug               string `json:"bug"`
		Iteration         string `json:"iteration"`
		Wiki              string `json:"wiki"`
		Document          string `json:"document"`
		Attachment        string `json:"attachment"`
		Task              string `json:"task"`
		Tcase             string `json:"tcase"`
		Testplan          string `json:"testplan"`
		Launch            string `json:"launch"`
		Release           string `json:"release"`
		MemberActivityLog string `json:"member_activity_log"`
	} `json:"operate_objects"`
}

type GetRemovedStoriesRequest

type GetRemovedStoriesRequest struct {
	WorkspaceID *int        `url:"workspace_id,omitempty"` // [必须]项目ID
	ID          *Multi[int] `url:"id,omitempty"`           // 需求ID
	Creator     *string     `url:"creator,omitempty"`      // 创建人
	IsArchived  *int        `url:"is_archived,omitempty"`  // 是否为归档。默认取 0,为不返回归档的需求。传 is_archived=1 参数则仅返回归档的需求
	Created     *string     `url:"created,omitempty"`      // 创建时间
	Deleted     *string     `url:"deleted,omitempty"`      // 删除时间
	Limit       *int        `url:"limit,omitempty"`        // 设置返回数量限制,默认为30
	Page        *int        `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1(第一页)
}

type GetReportsRequest

type GetReportsRequest struct {
	WorkspaceID *int           `url:"workspace_id,omitempty"` // [必须]项目 ID
	ID          *int           `url:"id,omitempty"`           // ID
	Title       *string        `url:"title,omitempty"`        // 标题
	Author      *string        `url:"author,omitempty"`       // 创建人
	Created     *string        `url:"created,omitempty"`      // 创建时间
	Limit       *int           `url:"limit,omitempty"`        // 设置返回数量限制,默认为30
	Page        *int           `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1(第一页)
	Fields      *Multi[string] `url:"fields,omitempty"`       // 设置获取的字段,多个字段间以','逗号隔开
}

type GetRolesRequest

type GetRolesRequest struct {
	WorkspaceID *int `url:"workspace_id,omitempty"` // 项目 ID
}

GetRolesRequest represents a request to get roles

type GetStoriesCountByCategoriesRequest

type GetStoriesCountByCategoriesRequest struct {
	WorkspaceID *int          `url:"workspace_id,omitempty"` // [必须]项目ID
	CategoryID  *Multi[int64] `url:"category_id,omitempty"`  // 需求分类 支持多ID。比如 id1,id2,id3
}

type GetStoriesCountRequest

type GetStoriesCountRequest struct {
	ID                *Multi[int64]  `url:"id,omitempty"`               // ID	支持多ID查询,多个ID用逗号分隔
	Name              *string        `url:"name,omitempty"`             // 标题	支持模糊匹配
	Priority          *string        `url:"priority,omitempty"`         // 优先级。
	PriorityLabel     *PriorityLabel `url:"priority_label,omitempty"`   // 优先级。推荐使用这个字段
	BusinessValue     *int           `url:"business_value,omitempty"`   // 业务价值
	Status            *string        `url:"status,omitempty"`           // 状态	支持枚举查询
	VStatus           *string        `url:"v_status,omitempty"`         // 状态(支持传入中文状态名称)
	WithVStatus       *string        `url:"with_v_status,omitempty"`    // 值=1可以返回中文状态
	Label             *string        `url:"label,omitempty"`            // 标签查询	支持枚举查询
	WorkitemTypeID    *string        `url:"workitem_type_id,omitempty"` // 需求类别ID	支持枚举查询
	Version           *string        `url:"version,omitempty"`          // 版本
	Module            *string        `url:"module,omitempty"`           // 模块
	Feature           *string        `url:"feature,omitempty"`          // 特性
	TestFocus         *string        `url:"test_focus,omitempty"`       // 测试重点
	Size              *int           `url:"size,omitempty"`             // 规模
	Owner             *string        `url:"owner,omitempty"`            // 处理人	支持模糊匹配
	CC                *string        `url:"cc,omitempty"`               // 抄送人	支持模糊匹配
	Creator           *string        `url:"creator,omitempty"`          // 创建人	支持多人员查询
	Developer         *string        `url:"developer,omitempty"`        // 开发人员
	Begin             *string        `url:"begin,omitempty"`            // 预计开始	支持时间查询
	Due               *string        `url:"due,omitempty"`              // 预计结束	支持时间查询
	Created           *string        `url:"created,omitempty"`          // 创建时间	支持时间查询
	Modified          *string        `url:"modified,omitempty"`         // 最后修改时间	支持时间查询
	Completed         *string        `url:"completed,omitempty"`        // 完成时间	支持时间查询
	IterationID       *string        `url:"iteration_id,omitempty"`     // 迭代ID	支持不等于查询
	Effort            *string        `url:"effort,omitempty"`           // 预估工时
	EffortCompleted   *string        `url:"effort_completed,omitempty"` // 完成工时
	Remain            *float64       `url:"remain,omitempty"`           // 剩余工时
	Exceed            *float64       `url:"exceed,omitempty"`           // 超出工时
	CategoryID        *string        `url:"category_id,omitempty"`      // 需求分类	支持枚举查询
	ReleaseID         *string        `url:"release_id,omitempty"`       // 发布计划
	Source            *string        `url:"source,omitempty"`           // 需求来源
	Type              *string        `url:"type,omitempty"`             // 需求类型
	ParentID          *string        `url:"parent_id,omitempty"`        // 父需求
	ChildrenID        *string        `url:"children_id,omitempty"`      // 子需求	为空查询传:丨
	Description       *string        `url:"description,omitempty"`      // 详细描述	支持模糊匹配
	WorkspaceID       *int           `url:"workspace_id,omitempty"`     // 项目ID
	CustomFieldOne    *string        `url:"custom_field_one,omitempty"`
	CustomFieldTwo    *string        `url:"custom_field_two,omitempty"`
	CustomFieldThree  *string        `url:"custom_field_three,omitempty"`
	CustomFieldFour   *string        `url:"custom_field_four,omitempty"`
	CustomFieldFive   *string        `url:"custom_field_five,omitempty"`
	CustomFieldSix    *string        `url:"custom_field_six,omitempty"`
	CustomFieldSeven  *string        `url:"custom_field_seven,omitempty"`
	CustomFieldEight  *string        `url:"custom_field_eight,omitempty"`
	CustomField9      *string        `url:"custom_field_9,omitempty"`
	CustomField10     *string        `url:"custom_field_10,omitempty"`
	CustomField11     *string        `url:"custom_field_11,omitempty"`
	CustomField12     *string        `url:"custom_field_12,omitempty"`
	CustomField13     *string        `url:"custom_field_13,omitempty"`
	CustomField14     *string        `url:"custom_field_14,omitempty"`
	CustomField15     *string        `url:"custom_field_15,omitempty"`
	CustomField16     *string        `url:"custom_field_16,omitempty"`
	CustomField17     *string        `url:"custom_field_17,omitempty"`
	CustomField18     *string        `url:"custom_field_18,omitempty"`
	CustomField19     *string        `url:"custom_field_19,omitempty"`
	CustomField20     *string        `url:"custom_field_20,omitempty"`
	CustomField21     *string        `url:"custom_field_21,omitempty"`
	CustomField22     *string        `url:"custom_field_22,omitempty"`
	CustomField23     *string        `url:"custom_field_23,omitempty"`
	CustomField24     *string        `url:"custom_field_24,omitempty"`
	CustomField25     *string        `url:"custom_field_25,omitempty"`
	CustomField26     *string        `url:"custom_field_26,omitempty"`
	CustomField27     *string        `url:"custom_field_27,omitempty"`
	CustomField28     *string        `url:"custom_field_28,omitempty"`
	CustomField29     *string        `url:"custom_field_29,omitempty"`
	CustomField30     *string        `url:"custom_field_30,omitempty"`
	CustomField31     *string        `url:"custom_field_31,omitempty"`
	CustomField32     *string        `url:"custom_field_32,omitempty"`
	CustomField33     *string        `url:"custom_field_33,omitempty"`
	CustomField34     *string        `url:"custom_field_34,omitempty"`
	CustomField35     *string        `url:"custom_field_35,omitempty"`
	CustomField36     *string        `url:"custom_field_36,omitempty"`
	CustomField37     *string        `url:"custom_field_37,omitempty"`
	CustomField38     *string        `url:"custom_field_38,omitempty"`
	CustomField39     *string        `url:"custom_field_39,omitempty"`
	CustomField40     *string        `url:"custom_field_40,omitempty"`
	CustomField41     *string        `url:"custom_field_41,omitempty"`
	CustomField42     *string        `url:"custom_field_42,omitempty"`
	CustomField43     *string        `url:"custom_field_43,omitempty"`
	CustomField44     *string        `url:"custom_field_44,omitempty"`
	CustomField45     *string        `url:"custom_field_45,omitempty"`
	CustomField46     *string        `url:"custom_field_46,omitempty"`
	CustomField47     *string        `url:"custom_field_47,omitempty"`
	CustomField48     *string        `url:"custom_field_48,omitempty"`
	CustomField49     *string        `url:"custom_field_49,omitempty"`
	CustomField50     *string        `url:"custom_field_50,omitempty"`
	CustomField51     *string        `url:"custom_field_51,omitempty"`
	CustomField52     *string        `url:"custom_field_52,omitempty"`
	CustomField53     *string        `url:"custom_field_53,omitempty"`
	CustomField54     *string        `url:"custom_field_54,omitempty"`
	CustomField55     *string        `url:"custom_field_55,omitempty"`
	CustomField56     *string        `url:"custom_field_56,omitempty"`
	CustomField57     *string        `url:"custom_field_57,omitempty"`
	CustomField58     *string        `url:"custom_field_58,omitempty"`
	CustomField59     *string        `url:"custom_field_59,omitempty"`
	CustomField60     *string        `url:"custom_field_60,omitempty"`
	CustomField61     *string        `url:"custom_field_61,omitempty"`
	CustomField62     *string        `url:"custom_field_62,omitempty"`
	CustomField63     *string        `url:"custom_field_63,omitempty"`
	CustomField64     *string        `url:"custom_field_64,omitempty"`
	CustomField65     *string        `url:"custom_field_65,omitempty"`
	CustomField66     *string        `url:"custom_field_66,omitempty"`
	CustomField67     *string        `url:"custom_field_67,omitempty"`
	CustomField68     *string        `url:"custom_field_68,omitempty"`
	CustomField69     *string        `url:"custom_field_69,omitempty"`
	CustomField70     *string        `url:"custom_field_70,omitempty"`
	CustomField71     *string        `url:"custom_field_71,omitempty"`
	CustomField72     *string        `url:"custom_field_72,omitempty"`
	CustomField73     *string        `url:"custom_field_73,omitempty"`
	CustomField74     *string        `url:"custom_field_74,omitempty"`
	CustomField75     *string        `url:"custom_field_75,omitempty"`
	CustomField76     *string        `url:"custom_field_76,omitempty"`
	CustomField77     *string        `url:"custom_field_77,omitempty"`
	CustomField78     *string        `url:"custom_field_78,omitempty"`
	CustomField79     *string        `url:"custom_field_79,omitempty"`
	CustomField80     *string        `url:"custom_field_80,omitempty"`
	CustomField81     *string        `url:"custom_field_81,omitempty"`
	CustomField82     *string        `url:"custom_field_82,omitempty"`
	CustomField83     *string        `url:"custom_field_83,omitempty"`
	CustomField84     *string        `url:"custom_field_84,omitempty"`
	CustomField85     *string        `url:"custom_field_85,omitempty"`
	CustomField86     *string        `url:"custom_field_86,omitempty"`
	CustomField87     *string        `url:"custom_field_87,omitempty"`
	CustomField88     *string        `url:"custom_field_88,omitempty"`
	CustomField89     *string        `url:"custom_field_89,omitempty"`
	CustomField90     *string        `url:"custom_field_90,omitempty"`
	CustomField91     *string        `url:"custom_field_91,omitempty"`
	CustomField92     *string        `url:"custom_field_92,omitempty"`
	CustomField93     *string        `url:"custom_field_93,omitempty"`
	CustomField94     *string        `url:"custom_field_94,omitempty"`
	CustomField95     *string        `url:"custom_field_95,omitempty"`
	CustomField96     *string        `url:"custom_field_96,omitempty"`
	CustomField97     *string        `url:"custom_field_97,omitempty"`
	CustomField98     *string        `url:"custom_field_98,omitempty"`
	CustomField99     *string        `url:"custom_field_99,omitempty"`
	CustomField100    *string        `url:"custom_field_100,omitempty"`
	CustomField101    *string        `url:"custom_field_101,omitempty"`
	CustomField102    *string        `url:"custom_field_102,omitempty"`
	CustomField103    *string        `url:"custom_field_103,omitempty"`
	CustomField104    *string        `url:"custom_field_104,omitempty"`
	CustomField105    *string        `url:"custom_field_105,omitempty"`
	CustomField106    *string        `url:"custom_field_106,omitempty"`
	CustomField107    *string        `url:"custom_field_107,omitempty"`
	CustomField108    *string        `url:"custom_field_108,omitempty"`
	CustomField109    *string        `url:"custom_field_109,omitempty"`
	CustomField110    *string        `url:"custom_field_110,omitempty"`
	CustomField111    *string        `url:"custom_field_111,omitempty"`
	CustomField112    *string        `url:"custom_field_112,omitempty"`
	CustomField113    *string        `url:"custom_field_113,omitempty"`
	CustomField114    *string        `url:"custom_field_114,omitempty"`
	CustomField115    *string        `url:"custom_field_115,omitempty"`
	CustomField116    *string        `url:"custom_field_116,omitempty"`
	CustomField117    *string        `url:"custom_field_117,omitempty"`
	CustomField118    *string        `url:"custom_field_118,omitempty"`
	CustomField119    *string        `url:"custom_field_119,omitempty"`
	CustomField120    *string        `url:"custom_field_120,omitempty"`
	CustomField121    *string        `url:"custom_field_121,omitempty"`
	CustomField122    *string        `url:"custom_field_122,omitempty"`
	CustomField123    *string        `url:"custom_field_123,omitempty"`
	CustomField124    *string        `url:"custom_field_124,omitempty"`
	CustomField125    *string        `url:"custom_field_125,omitempty"`
	CustomField126    *string        `url:"custom_field_126,omitempty"`
	CustomField127    *string        `url:"custom_field_127,omitempty"`
	CustomField128    *string        `url:"custom_field_128,omitempty"`
	CustomField129    *string        `url:"custom_field_129,omitempty"`
	CustomField130    *string        `url:"custom_field_130,omitempty"`
	CustomField131    *string        `url:"custom_field_131,omitempty"`
	CustomField132    *string        `url:"custom_field_132,omitempty"`
	CustomField133    *string        `url:"custom_field_133,omitempty"`
	CustomField134    *string        `url:"custom_field_134,omitempty"`
	CustomField135    *string        `url:"custom_field_135,omitempty"`
	CustomField136    *string        `url:"custom_field_136,omitempty"`
	CustomField137    *string        `url:"custom_field_137,omitempty"`
	CustomField138    *string        `url:"custom_field_138,omitempty"`
	CustomField139    *string        `url:"custom_field_139,omitempty"`
	CustomField140    *string        `url:"custom_field_140,omitempty"`
	CustomField141    *string        `url:"custom_field_141,omitempty"`
	CustomField142    *string        `url:"custom_field_142,omitempty"`
	CustomField143    *string        `url:"custom_field_143,omitempty"`
	CustomField144    *string        `url:"custom_field_144,omitempty"`
	CustomField145    *string        `url:"custom_field_145,omitempty"`
	CustomField146    *string        `url:"custom_field_146,omitempty"`
	CustomField147    *string        `url:"custom_field_147,omitempty"`
	CustomField148    *string        `url:"custom_field_148,omitempty"`
	CustomField149    *string        `url:"custom_field_149,omitempty"`
	CustomField150    *string        `url:"custom_field_150,omitempty"`
	CustomField151    *string        `url:"custom_field_151,omitempty"`
	CustomField152    *string        `url:"custom_field_152,omitempty"`
	CustomField153    *string        `url:"custom_field_153,omitempty"`
	CustomField154    *string        `url:"custom_field_154,omitempty"`
	CustomField155    *string        `url:"custom_field_155,omitempty"`
	CustomField156    *string        `url:"custom_field_156,omitempty"`
	CustomField157    *string        `url:"custom_field_157,omitempty"`
	CustomField158    *string        `url:"custom_field_158,omitempty"`
	CustomField159    *string        `url:"custom_field_159,omitempty"`
	CustomField160    *string        `url:"custom_field_160,omitempty"`
	CustomField161    *string        `url:"custom_field_161,omitempty"`
	CustomField162    *string        `url:"custom_field_162,omitempty"`
	CustomField163    *string        `url:"custom_field_163,omitempty"`
	CustomField164    *string        `url:"custom_field_164,omitempty"`
	CustomField165    *string        `url:"custom_field_165,omitempty"`
	CustomField166    *string        `url:"custom_field_166,omitempty"`
	CustomField167    *string        `url:"custom_field_167,omitempty"`
	CustomField168    *string        `url:"custom_field_168,omitempty"`
	CustomField169    *string        `url:"custom_field_169,omitempty"`
	CustomField170    *string        `url:"custom_field_170,omitempty"`
	CustomField171    *string        `url:"custom_field_171,omitempty"`
	CustomField172    *string        `url:"custom_field_172,omitempty"`
	CustomField173    *string        `url:"custom_field_173,omitempty"`
	CustomField174    *string        `url:"custom_field_174,omitempty"`
	CustomField175    *string        `url:"custom_field_175,omitempty"`
	CustomField176    *string        `url:"custom_field_176,omitempty"`
	CustomField177    *string        `url:"custom_field_177,omitempty"`
	CustomField178    *string        `url:"custom_field_178,omitempty"`
	CustomField179    *string        `url:"custom_field_179,omitempty"`
	CustomField180    *string        `url:"custom_field_180,omitempty"`
	CustomField181    *string        `url:"custom_field_181,omitempty"`
	CustomField182    *string        `url:"custom_field_182,omitempty"`
	CustomField183    *string        `url:"custom_field_183,omitempty"`
	CustomField184    *string        `url:"custom_field_184,omitempty"`
	CustomField185    *string        `url:"custom_field_185,omitempty"`
	CustomField186    *string        `url:"custom_field_186,omitempty"`
	CustomField187    *string        `url:"custom_field_187,omitempty"`
	CustomField188    *string        `url:"custom_field_188,omitempty"`
	CustomField189    *string        `url:"custom_field_189,omitempty"`
	CustomField190    *string        `url:"custom_field_190,omitempty"`
	CustomField191    *string        `url:"custom_field_191,omitempty"`
	CustomField192    *string        `url:"custom_field_192,omitempty"`
	CustomField193    *string        `url:"custom_field_193,omitempty"`
	CustomField194    *string        `url:"custom_field_194,omitempty"`
	CustomField195    *string        `url:"custom_field_195,omitempty"`
	CustomField196    *string        `url:"custom_field_196,omitempty"`
	CustomField197    *string        `url:"custom_field_197,omitempty"`
	CustomField198    *string        `url:"custom_field_198,omitempty"`
	CustomField199    *string        `url:"custom_field_199,omitempty"`
	CustomField200    *string        `url:"custom_field_200,omitempty"`
	CustomPlanField1  *string        `url:"custom_plan_field_1,omitempty"`
	CustomPlanField2  *string        `url:"custom_plan_field_2,omitempty"`
	CustomPlanField3  *string        `url:"custom_plan_field_3,omitempty"`
	CustomPlanField4  *string        `url:"custom_plan_field_4,omitempty"`
	CustomPlanField5  *string        `url:"custom_plan_field_5,omitempty"`
	CustomPlanField6  *string        `url:"custom_plan_field_6,omitempty"`
	CustomPlanField7  *string        `url:"custom_plan_field_7,omitempty"`
	CustomPlanField8  *string        `url:"custom_plan_field_8,omitempty"`
	CustomPlanField9  *string        `url:"custom_plan_field_9,omitempty"`
	CustomPlanField10 *string        `url:"custom_plan_field_10,omitempty"`
}

type GetStoriesRequest

type GetStoriesRequest struct {
	ID                *Multi[int64]      `url:"id,omitempty"`               // ID	支持多ID查询,多个ID用逗号分隔
	Name              *string            `url:"name,omitempty"`             // 标题	支持模糊匹配
	Priority          *string            `url:"priority,omitempty"`         // 优先级
	PriorityLabel     *PriorityLabel     `url:"priority_label,omitempty"`   // 优先级。推荐使用这个字段
	BusinessValue     *int               `url:"business_value,omitempty"`   // 业务价值
	Status            *Enum[StoryStatus] `url:"status,omitempty"`           // 状态	支持枚举查询
	VStatus           *string            `url:"v_status,omitempty"`         // 状态(支持传入中文状态名称)
	WithVStatus       *string            `url:"with_v_status,omitempty"`    // 值=1可以返回中文状态
	Label             *string            `url:"label,omitempty"`            // 标签查询	支持枚举查询
	WorkitemTypeID    *string            `url:"workitem_type_id,omitempty"` // 需求类别ID	支持枚举查询
	Version           *string            `url:"version,omitempty"`          // 版本
	Module            *string            `url:"module,omitempty"`           // 模块
	Feature           *string            `url:"feature,omitempty"`          // 特性
	TestFocus         *string            `url:"test_focus,omitempty"`       // 测试重点
	Size              *int               `url:"size,omitempty"`             // 规模
	Owner             *string            `url:"owner,omitempty"`            // 处理人	支持模糊匹配
	CC                *string            `url:"cc,omitempty"`               // 抄送人	支持模糊匹配
	Creator           *string            `url:"creator,omitempty"`          // 创建人	支持多人员查询
	Developer         *string            `url:"developer,omitempty"`        // 开发人员
	Begin             *string            `url:"begin,omitempty"`            // 预计开始	支持时间查询
	Due               *string            `url:"due,omitempty"`              // 预计结束	支持时间查询
	Created           *string            `url:"created,omitempty"`          // 创建时间	支持时间查询
	Modified          *string            `url:"modified,omitempty"`         // 最后修改时间	支持时间查询
	Completed         *string            `url:"completed,omitempty"`        // 完成时间	支持时间查询
	IterationID       *string            `url:"iteration_id,omitempty"`     // 迭代ID	支持不等于查询
	Effort            *string            `url:"effort,omitempty"`           // 预估工时
	EffortCompleted   *string            `url:"effort_completed,omitempty"` // 完成工时
	Remain            *float64           `url:"remain,omitempty"`           // 剩余工时
	Exceed            *float64           `url:"exceed,omitempty"`           // 超出工时
	CategoryID        *string            `url:"category_id,omitempty"`      // 需求分类	支持枚举查询
	ReleaseID         *string            `url:"release_id,omitempty"`       // 发布计划
	Source            *string            `url:"source,omitempty"`           // 需求来源
	Type              *string            `url:"type,omitempty"`             // 需求类型
	ParentID          *string            `url:"parent_id,omitempty"`        // 父需求
	ChildrenID        *string            `url:"children_id,omitempty"`      // 子需求	为空查询传:丨
	Description       *string            `url:"description,omitempty"`      // 详细描述	支持模糊匹配
	WorkspaceID       *int               `url:"workspace_id,omitempty"`     // 项目ID
	Limit             *int               `url:"limit,omitempty"`            // 设置返回数量限制,默认为30
	Page              *int               `url:"page,omitempty"`             // 返回当前数量限制下第N页的数据,默认为1(第一页)
	Order             *Order             `url:"order,omitempty"`            // 排序规则,规则:字段名 ASC或者DESC
	Fields            *Multi[string]     `url:"fields,omitempty"`           // 设置获取的字段,多个字段间以','逗号隔开
	CustomFieldOne    *string            `url:"custom_field_one,omitempty"`
	CustomFieldTwo    *string            `url:"custom_field_two,omitempty"`
	CustomFieldThree  *string            `url:"custom_field_three,omitempty"`
	CustomFieldFour   *string            `url:"custom_field_four,omitempty"`
	CustomFieldFive   *string            `url:"custom_field_five,omitempty"`
	CustomFieldSix    *string            `url:"custom_field_six,omitempty"`
	CustomFieldSeven  *string            `url:"custom_field_seven,omitempty"`
	CustomFieldEight  *string            `url:"custom_field_eight,omitempty"`
	CustomField9      *string            `url:"custom_field_9,omitempty"`
	CustomField10     *string            `url:"custom_field_10,omitempty"`
	CustomField11     *string            `url:"custom_field_11,omitempty"`
	CustomField12     *string            `url:"custom_field_12,omitempty"`
	CustomField13     *string            `url:"custom_field_13,omitempty"`
	CustomField14     *string            `url:"custom_field_14,omitempty"`
	CustomField15     *string            `url:"custom_field_15,omitempty"`
	CustomField16     *string            `url:"custom_field_16,omitempty"`
	CustomField17     *string            `url:"custom_field_17,omitempty"`
	CustomField18     *string            `url:"custom_field_18,omitempty"`
	CustomField19     *string            `url:"custom_field_19,omitempty"`
	CustomField20     *string            `url:"custom_field_20,omitempty"`
	CustomField21     *string            `url:"custom_field_21,omitempty"`
	CustomField22     *string            `url:"custom_field_22,omitempty"`
	CustomField23     *string            `url:"custom_field_23,omitempty"`
	CustomField24     *string            `url:"custom_field_24,omitempty"`
	CustomField25     *string            `url:"custom_field_25,omitempty"`
	CustomField26     *string            `url:"custom_field_26,omitempty"`
	CustomField27     *string            `url:"custom_field_27,omitempty"`
	CustomField28     *string            `url:"custom_field_28,omitempty"`
	CustomField29     *string            `url:"custom_field_29,omitempty"`
	CustomField30     *string            `url:"custom_field_30,omitempty"`
	CustomField31     *string            `url:"custom_field_31,omitempty"`
	CustomField32     *string            `url:"custom_field_32,omitempty"`
	CustomField33     *string            `url:"custom_field_33,omitempty"`
	CustomField34     *string            `url:"custom_field_34,omitempty"`
	CustomField35     *string            `url:"custom_field_35,omitempty"`
	CustomField36     *string            `url:"custom_field_36,omitempty"`
	CustomField37     *string            `url:"custom_field_37,omitempty"`
	CustomField38     *string            `url:"custom_field_38,omitempty"`
	CustomField39     *string            `url:"custom_field_39,omitempty"`
	CustomField40     *string            `url:"custom_field_40,omitempty"`
	CustomField41     *string            `url:"custom_field_41,omitempty"`
	CustomField42     *string            `url:"custom_field_42,omitempty"`
	CustomField43     *string            `url:"custom_field_43,omitempty"`
	CustomField44     *string            `url:"custom_field_44,omitempty"`
	CustomField45     *string            `url:"custom_field_45,omitempty"`
	CustomField46     *string            `url:"custom_field_46,omitempty"`
	CustomField47     *string            `url:"custom_field_47,omitempty"`
	CustomField48     *string            `url:"custom_field_48,omitempty"`
	CustomField49     *string            `url:"custom_field_49,omitempty"`
	CustomField50     *string            `url:"custom_field_50,omitempty"`
	CustomField51     *string            `url:"custom_field_51,omitempty"`
	CustomField52     *string            `url:"custom_field_52,omitempty"`
	CustomField53     *string            `url:"custom_field_53,omitempty"`
	CustomField54     *string            `url:"custom_field_54,omitempty"`
	CustomField55     *string            `url:"custom_field_55,omitempty"`
	CustomField56     *string            `url:"custom_field_56,omitempty"`
	CustomField57     *string            `url:"custom_field_57,omitempty"`
	CustomField58     *string            `url:"custom_field_58,omitempty"`
	CustomField59     *string            `url:"custom_field_59,omitempty"`
	CustomField60     *string            `url:"custom_field_60,omitempty"`
	CustomField61     *string            `url:"custom_field_61,omitempty"`
	CustomField62     *string            `url:"custom_field_62,omitempty"`
	CustomField63     *string            `url:"custom_field_63,omitempty"`
	CustomField64     *string            `url:"custom_field_64,omitempty"`
	CustomField65     *string            `url:"custom_field_65,omitempty"`
	CustomField66     *string            `url:"custom_field_66,omitempty"`
	CustomField67     *string            `url:"custom_field_67,omitempty"`
	CustomField68     *string            `url:"custom_field_68,omitempty"`
	CustomField69     *string            `url:"custom_field_69,omitempty"`
	CustomField70     *string            `url:"custom_field_70,omitempty"`
	CustomField71     *string            `url:"custom_field_71,omitempty"`
	CustomField72     *string            `url:"custom_field_72,omitempty"`
	CustomField73     *string            `url:"custom_field_73,omitempty"`
	CustomField74     *string            `url:"custom_field_74,omitempty"`
	CustomField75     *string            `url:"custom_field_75,omitempty"`
	CustomField76     *string            `url:"custom_field_76,omitempty"`
	CustomField77     *string            `url:"custom_field_77,omitempty"`
	CustomField78     *string            `url:"custom_field_78,omitempty"`
	CustomField79     *string            `url:"custom_field_79,omitempty"`
	CustomField80     *string            `url:"custom_field_80,omitempty"`
	CustomField81     *string            `url:"custom_field_81,omitempty"`
	CustomField82     *string            `url:"custom_field_82,omitempty"`
	CustomField83     *string            `url:"custom_field_83,omitempty"`
	CustomField84     *string            `url:"custom_field_84,omitempty"`
	CustomField85     *string            `url:"custom_field_85,omitempty"`
	CustomField86     *string            `url:"custom_field_86,omitempty"`
	CustomField87     *string            `url:"custom_field_87,omitempty"`
	CustomField88     *string            `url:"custom_field_88,omitempty"`
	CustomField89     *string            `url:"custom_field_89,omitempty"`
	CustomField90     *string            `url:"custom_field_90,omitempty"`
	CustomField91     *string            `url:"custom_field_91,omitempty"`
	CustomField92     *string            `url:"custom_field_92,omitempty"`
	CustomField93     *string            `url:"custom_field_93,omitempty"`
	CustomField94     *string            `url:"custom_field_94,omitempty"`
	CustomField95     *string            `url:"custom_field_95,omitempty"`
	CustomField96     *string            `url:"custom_field_96,omitempty"`
	CustomField97     *string            `url:"custom_field_97,omitempty"`
	CustomField98     *string            `url:"custom_field_98,omitempty"`
	CustomField99     *string            `url:"custom_field_99,omitempty"`
	CustomField100    *string            `url:"custom_field_100,omitempty"`
	CustomField101    *string            `url:"custom_field_101,omitempty"`
	CustomField102    *string            `url:"custom_field_102,omitempty"`
	CustomField103    *string            `url:"custom_field_103,omitempty"`
	CustomField104    *string            `url:"custom_field_104,omitempty"`
	CustomField105    *string            `url:"custom_field_105,omitempty"`
	CustomField106    *string            `url:"custom_field_106,omitempty"`
	CustomField107    *string            `url:"custom_field_107,omitempty"`
	CustomField108    *string            `url:"custom_field_108,omitempty"`
	CustomField109    *string            `url:"custom_field_109,omitempty"`
	CustomField110    *string            `url:"custom_field_110,omitempty"`
	CustomField111    *string            `url:"custom_field_111,omitempty"`
	CustomField112    *string            `url:"custom_field_112,omitempty"`
	CustomField113    *string            `url:"custom_field_113,omitempty"`
	CustomField114    *string            `url:"custom_field_114,omitempty"`
	CustomField115    *string            `url:"custom_field_115,omitempty"`
	CustomField116    *string            `url:"custom_field_116,omitempty"`
	CustomField117    *string            `url:"custom_field_117,omitempty"`
	CustomField118    *string            `url:"custom_field_118,omitempty"`
	CustomField119    *string            `url:"custom_field_119,omitempty"`
	CustomField120    *string            `url:"custom_field_120,omitempty"`
	CustomField121    *string            `url:"custom_field_121,omitempty"`
	CustomField122    *string            `url:"custom_field_122,omitempty"`
	CustomField123    *string            `url:"custom_field_123,omitempty"`
	CustomField124    *string            `url:"custom_field_124,omitempty"`
	CustomField125    *string            `url:"custom_field_125,omitempty"`
	CustomField126    *string            `url:"custom_field_126,omitempty"`
	CustomField127    *string            `url:"custom_field_127,omitempty"`
	CustomField128    *string            `url:"custom_field_128,omitempty"`
	CustomField129    *string            `url:"custom_field_129,omitempty"`
	CustomField130    *string            `url:"custom_field_130,omitempty"`
	CustomField131    *string            `url:"custom_field_131,omitempty"`
	CustomField132    *string            `url:"custom_field_132,omitempty"`
	CustomField133    *string            `url:"custom_field_133,omitempty"`
	CustomField134    *string            `url:"custom_field_134,omitempty"`
	CustomField135    *string            `url:"custom_field_135,omitempty"`
	CustomField136    *string            `url:"custom_field_136,omitempty"`
	CustomField137    *string            `url:"custom_field_137,omitempty"`
	CustomField138    *string            `url:"custom_field_138,omitempty"`
	CustomField139    *string            `url:"custom_field_139,omitempty"`
	CustomField140    *string            `url:"custom_field_140,omitempty"`
	CustomField141    *string            `url:"custom_field_141,omitempty"`
	CustomField142    *string            `url:"custom_field_142,omitempty"`
	CustomField143    *string            `url:"custom_field_143,omitempty"`
	CustomField144    *string            `url:"custom_field_144,omitempty"`
	CustomField145    *string            `url:"custom_field_145,omitempty"`
	CustomField146    *string            `url:"custom_field_146,omitempty"`
	CustomField147    *string            `url:"custom_field_147,omitempty"`
	CustomField148    *string            `url:"custom_field_148,omitempty"`
	CustomField149    *string            `url:"custom_field_149,omitempty"`
	CustomField150    *string            `url:"custom_field_150,omitempty"`
	CustomField151    *string            `url:"custom_field_151,omitempty"`
	CustomField152    *string            `url:"custom_field_152,omitempty"`
	CustomField153    *string            `url:"custom_field_153,omitempty"`
	CustomField154    *string            `url:"custom_field_154,omitempty"`
	CustomField155    *string            `url:"custom_field_155,omitempty"`
	CustomField156    *string            `url:"custom_field_156,omitempty"`
	CustomField157    *string            `url:"custom_field_157,omitempty"`
	CustomField158    *string            `url:"custom_field_158,omitempty"`
	CustomField159    *string            `url:"custom_field_159,omitempty"`
	CustomField160    *string            `url:"custom_field_160,omitempty"`
	CustomField161    *string            `url:"custom_field_161,omitempty"`
	CustomField162    *string            `url:"custom_field_162,omitempty"`
	CustomField163    *string            `url:"custom_field_163,omitempty"`
	CustomField164    *string            `url:"custom_field_164,omitempty"`
	CustomField165    *string            `url:"custom_field_165,omitempty"`
	CustomField166    *string            `url:"custom_field_166,omitempty"`
	CustomField167    *string            `url:"custom_field_167,omitempty"`
	CustomField168    *string            `url:"custom_field_168,omitempty"`
	CustomField169    *string            `url:"custom_field_169,omitempty"`
	CustomField170    *string            `url:"custom_field_170,omitempty"`
	CustomField171    *string            `url:"custom_field_171,omitempty"`
	CustomField172    *string            `url:"custom_field_172,omitempty"`
	CustomField173    *string            `url:"custom_field_173,omitempty"`
	CustomField174    *string            `url:"custom_field_174,omitempty"`
	CustomField175    *string            `url:"custom_field_175,omitempty"`
	CustomField176    *string            `url:"custom_field_176,omitempty"`
	CustomField177    *string            `url:"custom_field_177,omitempty"`
	CustomField178    *string            `url:"custom_field_178,omitempty"`
	CustomField179    *string            `url:"custom_field_179,omitempty"`
	CustomField180    *string            `url:"custom_field_180,omitempty"`
	CustomField181    *string            `url:"custom_field_181,omitempty"`
	CustomField182    *string            `url:"custom_field_182,omitempty"`
	CustomField183    *string            `url:"custom_field_183,omitempty"`
	CustomField184    *string            `url:"custom_field_184,omitempty"`
	CustomField185    *string            `url:"custom_field_185,omitempty"`
	CustomField186    *string            `url:"custom_field_186,omitempty"`
	CustomField187    *string            `url:"custom_field_187,omitempty"`
	CustomField188    *string            `url:"custom_field_188,omitempty"`
	CustomField189    *string            `url:"custom_field_189,omitempty"`
	CustomField190    *string            `url:"custom_field_190,omitempty"`
	CustomField191    *string            `url:"custom_field_191,omitempty"`
	CustomField192    *string            `url:"custom_field_192,omitempty"`
	CustomField193    *string            `url:"custom_field_193,omitempty"`
	CustomField194    *string            `url:"custom_field_194,omitempty"`
	CustomField195    *string            `url:"custom_field_195,omitempty"`
	CustomField196    *string            `url:"custom_field_196,omitempty"`
	CustomField197    *string            `url:"custom_field_197,omitempty"`
	CustomField198    *string            `url:"custom_field_198,omitempty"`
	CustomField199    *string            `url:"custom_field_199,omitempty"`
	CustomField200    *string            `url:"custom_field_200,omitempty"`
	CustomPlanField1  *string            `url:"custom_plan_field_1,omitempty"`
	CustomPlanField2  *string            `url:"custom_plan_field_2,omitempty"`
	CustomPlanField3  *string            `url:"custom_plan_field_3,omitempty"`
	CustomPlanField4  *string            `url:"custom_plan_field_4,omitempty"`
	CustomPlanField5  *string            `url:"custom_plan_field_5,omitempty"`
	CustomPlanField6  *string            `url:"custom_plan_field_6,omitempty"`
	CustomPlanField7  *string            `url:"custom_plan_field_7,omitempty"`
	CustomPlanField8  *string            `url:"custom_plan_field_8,omitempty"`
	CustomPlanField9  *string            `url:"custom_plan_field_9,omitempty"`
	CustomPlanField10 *string            `url:"custom_plan_field_10,omitempty"`
}

type GetStoryCategoriesCountRequest

type GetStoryCategoriesCountRequest struct {
	WorkspaceID *int          `url:"workspace_id,omitempty"` // [必须]项目ID
	ID          *Multi[int64] `url:"id,omitempty"`           // ID 支持多ID查询,多个ID用逗号分隔
	Name        *string       `url:"name,omitempty"`         // 需求分类名称	支持模糊匹配
	Description *string       `url:"description,omitempty"`  // 需求分类描述
	ParentID    *int          `url:"parent_id,omitempty"`    // 父分类ID
	Created     *string       `url:"created,omitempty"`      // 创建时间	支持时间查询
	Modified    *string       `url:"modified,omitempty"`     // 最后修改时间	支持时间查询
}

type GetStoryCategoriesRequest

type GetStoryCategoriesRequest struct {
	WorkspaceID *int           `url:"workspace_id,omitempty"` // [必须]项目ID
	ID          *Multi[int64]  `url:"id,omitempty"`           // ID 支持多ID查询,多个ID用逗号分隔
	Name        *string        `url:"name,omitempty"`         // 需求分类名称	支持模糊匹配
	Description *string        `url:"description,omitempty"`  // 需求分类描述
	ParentID    *int           `url:"parent_id,omitempty"`    // 父分类ID
	Created     *string        `url:"created,omitempty"`      // 创建时间	支持时间查询
	Modified    *string        `url:"modified,omitempty"`     // 最后修改时间	支持时间查询
	Limit       *int           `url:"limit,omitempty"`        // 设置返回数量限制,默认为30
	Page        *int           `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1(第一页)
	Order       *Order         `url:"order,omitempty"`        //nolint:lll // 排序规则,规则:字段名 ASC或者DESC,然后 urlencode	如按创建时间逆序:order=created%20desc
	Fields      *Multi[string] `url:"fields,omitempty"`       // 设置获取的字段,多个字段间以','逗号隔开
}

type GetStoryChangesRequest

type GetStoryChangesRequest struct {
	ID               *Multi[int64]    `url:"id,omitempty"`
	StoryID          *Multi[int64]    `url:"story_id,omitempty"`           // 需求id	支持多ID查询
	WorkspaceID      *int             `url:"workspace_id,omitempty"`       // [必须]项目ID
	Creator          *string          `url:"creator,omitempty"`            // 创建人(操作人)
	Created          *string          `url:"created,omitempty"`            // 创建时间(变更时间)	支持时间查询
	ChangeType       *StoreChangeType `url:"change_type,omitempty"`        // 变更类型
	ChangeSummary    *string          `url:"change_summary,omitempty"`     // 需求变更描述
	Comment          *string          `url:"comment,omitempty"`            // 评论
	EntityType       *string          `url:"entity_type,omitempty"`        // 变更的对象类型
	ChangeField      *string          `url:"change_field,omitempty"`       // 设置获取变更字段如(status)
	NeedParseChanges *int             `url:"need_parse_changes,omitempty"` // 设置field_changes字段是否返回(默认取 1。取 0 则不返回)
	Limit            *int             `url:"limit,omitempty"`              // 设置返回数量限制,默认为30,最大取 100
	Page             *int             `url:"page,omitempty"`               // 返回当前数量限制下第N页的数据,默认为1(第一页)
	Order            *Order           `url:"order,omitempty"`              // 排序规则,规则:字段名 ASC或者DESC
	Fields           *Multi[string]   `url:"fields,omitempty"`             // 设置获取的字段,多个字段间以','逗号隔开
}

type GetStoryCustomFieldsSettingsRequest

type GetStoryCustomFieldsSettingsRequest struct {
	WorkspaceID *int `url:"workspace_id,omitempty"` // 项目ID
}

type GetStoryRelatedBugsRequest

type GetStoryRelatedBugsRequest struct {
	WorkspaceID *int          `url:"workspace_id,omitempty"`
	StoryID     *Multi[int64] `url:"story_id,omitempty"`
}

type GetStoryTemplateFieldsRequest

type GetStoryTemplateFieldsRequest struct {
	WorkspaceID *int   `url:"workspace_id,omitempty"` // [必须]项目ID
	TemplateID  *int64 `url:"template_id,omitempty"`  // [必须]模板ID
}

type GetStoryTemplatesRequest

type GetStoryTemplatesRequest struct {
	WorkspaceID    *int `url:"workspace_id,omitempty"`     // [必须]项目ID
	WorkitemTypeID *int `url:"workitem_type_id,omitempty"` // 需求类别ID
}

type GetTaskChangesCountRequest

type GetTaskChangesCountRequest struct {
	ID            *Multi[int64] `url:"id,omitempty"`             // 支持多ID查询
	WorkspaceID   *int          `url:"workspace_id,omitempty"`   // [必须]项目ID
	TaskID        *int64        `url:"task_id,omitempty"`        // 任务ID
	Creator       *string       `url:"creator,omitempty"`        // 创建人(操作人)
	Created       *string       `url:"created,omitempty"`        // 创建时间(变更时间)	支持时间查询
	ChangeSummary *string       `url:"change_summary,omitempty"` // 需求变更描述
	Comment       *string       `url:"comment,omitempty"`        // 评论
	Changes       *string       `url:"changes,omitempty"`        // 变更详细记录
	EntityType    *string       `url:"entity_type,omitempty"`    // 变更的对象类型
}

type GetTaskChangesRequest

type GetTaskChangesRequest struct {
	ID               *Multi[int64]  `url:"id,omitempty"`                 // 支持多ID查询
	WorkspaceID      *int           `url:"workspace_id,omitempty"`       // [必须]项目ID
	TaskID           *int64         `url:"task_id,omitempty"`            // 任务ID
	Creator          *string        `url:"creator,omitempty"`            // 创建人(操作人)
	Created          *string        `url:"created,omitempty"`            // 创建时间(变更时间)	支持时间查询
	ChangeSummary    *string        `url:"change_summary,omitempty"`     // 需求变更描述
	Comment          *string        `url:"comment,omitempty"`            // 评论
	Changes          *string        `url:"changes,omitempty"`            // 变更详细记录
	EntityType       *string        `url:"entity_type,omitempty"`        // 变更的对象类型
	NeedParseChanges *int           `url:"need_parse_changes,omitempty"` // 设置field_changes字段是否返回(默认取 1。取 0 则不返回)
	Limit            *int           `url:"limit,omitempty"`              // 设置返回数量限制,默认为30
	Page             *int           `url:"page,omitempty"`               // 返回当前数量限制下第N页的数据,默认为1(第一页)
	Order            *Order         `url:"order,omitempty"`              //nolint:lll // 排序规则,规则:字段名 ASC或者DESC,然后 urlencode	如按创建时间逆序:order=created%20desc
	Fields           *Multi[string] `url:"fields,omitempty"`             // 设置获取的字段,多个字段间以','逗号隔开
}

type GetTaskFieldsInfoRequest

type GetTaskFieldsInfoRequest struct {
	WorkspaceID *int `url:"workspace_id,omitempty"` // [必须]项目ID
}

type GetTasksCountRequest

type GetTasksCountRequest struct {
	ID               *Multi[int64]     `url:"id,omitempty"`               // 支持多ID查询、模糊匹配
	Name             *string           `url:"name,omitempty"`             // 任务标题	支持模糊匹配
	Description      *string           `url:"description,omitempty"`      // 任务详细描述
	WorkspaceID      *int              `url:"workspace_id,omitempty"`     // [必须]项目ID
	Creator          *string           `url:"creator,omitempty"`          // 创建人	支持多人员查询
	Created          *string           `url:"created,omitempty"`          // 创建时间	支持时间查询
	Modified         *string           `url:"modified,omitempty"`         // 最后修改时间	支持时间查询
	Status           *Enum[TaskStatus] `url:"status,omitempty"`           // 状态	支持枚举查询
	Label            *Enum[string]     `url:"label,omitempty"`            // 标签查询	支持枚举查询
	Owner            *string           `url:"owner,omitempty"`            // 任务当前处理人	支持模糊匹配
	CC               *string           `url:"cc,omitempty"`               // 抄送人
	Begin            *string           `url:"begin,omitempty"`            // 预计开始	支持时间查询
	Due              *string           `url:"due,omitempty"`              // 预计结束	支持时间查询
	StoryID          *Multi[int64]     `url:"story_id,omitempty"`         // 关联需求的ID	支持多ID查询
	IterationID      *Enum[int64]      `url:"iteration_id,omitempty"`     // 所属迭代的ID	支持枚举查询
	Priority         *string           `url:"priority,omitempty"`         //nolint:lll // 优先级。为了兼容自定义优先级,请使用 priority_label 字段,详情参考:如何兼容自定义优先级
	PriorityLabel    *PriorityLabel    `url:"priority_label,omitempty"`   // 优先级。推荐使用这个字段
	Progress         *int              `url:"progress,omitempty"`         // 进度
	Completed        *string           `url:"completed,omitempty"`        // 完成时间	支持时间查询
	EffortCompleted  *string           `url:"effort_completed,omitempty"` // 完成工时
	Exceed           *float64          `url:"exceed,omitempty"`           // 超出工时
	Remain           *float64          `url:"remain,omitempty"`           // 剩余工时
	Effort           *string           `url:"effort,omitempty"`           // 预估工时
	CustomFieldOne   *string           `url:"custom_field_one,omitempty"`
	CustomFieldTwo   *string           `url:"custom_field_two,omitempty"`
	CustomFieldThree *string           `url:"custom_field_three,omitempty"`
	CustomFieldFour  *string           `url:"custom_field_four,omitempty"`
	CustomFieldFive  *string           `url:"custom_field_five,omitempty"`
	CustomFieldSix   *string           `url:"custom_field_six,omitempty"`
	CustomFieldSeven *string           `url:"custom_field_seven,omitempty"`
	CustomFieldEight *string           `url:"custom_field_eight,omitempty"`
	CustomField9     *string           `url:"custom_field_9,omitempty"`
	CustomField10    *string           `url:"custom_field_10,omitempty"`
	CustomField11    *string           `url:"custom_field_11,omitempty"`
	CustomField12    *string           `url:"custom_field_12,omitempty"`
	CustomField13    *string           `url:"custom_field_13,omitempty"`
	CustomField14    *string           `url:"custom_field_14,omitempty"`
	CustomField15    *string           `url:"custom_field_15,omitempty"`
	CustomField16    *string           `url:"custom_field_16,omitempty"`
	CustomField17    *string           `url:"custom_field_17,omitempty"`
	CustomField18    *string           `url:"custom_field_18,omitempty"`
	CustomField19    *string           `url:"custom_field_19,omitempty"`
	CustomField20    *string           `url:"custom_field_20,omitempty"`
	CustomField21    *string           `url:"custom_field_21,omitempty"`
	CustomField22    *string           `url:"custom_field_22,omitempty"`
	CustomField23    *string           `url:"custom_field_23,omitempty"`
	CustomField24    *string           `url:"custom_field_24,omitempty"`
	CustomField25    *string           `url:"custom_field_25,omitempty"`
	CustomField26    *string           `url:"custom_field_26,omitempty"`
	CustomField27    *string           `url:"custom_field_27,omitempty"`
	CustomField28    *string           `url:"custom_field_28,omitempty"`
	CustomField29    *string           `url:"custom_field_29,omitempty"`
	CustomField30    *string           `url:"custom_field_30,omitempty"`
	CustomField31    *string           `url:"custom_field_31,omitempty"`
	CustomField32    *string           `url:"custom_field_32,omitempty"`
	CustomField33    *string           `url:"custom_field_33,omitempty"`
	CustomField34    *string           `url:"custom_field_34,omitempty"`
	CustomField35    *string           `url:"custom_field_35,omitempty"`
	CustomField36    *string           `url:"custom_field_36,omitempty"`
	CustomField37    *string           `url:"custom_field_37,omitempty"`
	CustomField38    *string           `url:"custom_field_38,omitempty"`
	CustomField39    *string           `url:"custom_field_39,omitempty"`
	CustomField40    *string           `url:"custom_field_40,omitempty"`
	CustomField41    *string           `url:"custom_field_41,omitempty"`
	CustomField42    *string           `url:"custom_field_42,omitempty"`
	CustomField43    *string           `url:"custom_field_43,omitempty"`
	CustomField44    *string           `url:"custom_field_44,omitempty"`
	CustomField45    *string           `url:"custom_field_45,omitempty"`
	CustomField46    *string           `url:"custom_field_46,omitempty"`
	CustomField47    *string           `url:"custom_field_47,omitempty"`
	CustomField48    *string           `url:"custom_field_48,omitempty"`
	CustomField49    *string           `url:"custom_field_49,omitempty"`
	CustomField50    *string           `url:"custom_field_50,omitempty"`
}

type GetTasksRequest

type GetTasksRequest struct {
	ID               *Multi[int64]     `url:"id,omitempty"`               // 支持多ID查询、模糊匹配
	Name             *string           `url:"name,omitempty"`             // 任务标题	支持模糊匹配
	Description      *string           `url:"description,omitempty"`      // 任务详细描述
	WorkspaceID      *int              `url:"workspace_id,omitempty"`     // [必须]项目ID
	Creator          *string           `url:"creator,omitempty"`          // 创建人	支持多人员查询
	Created          *string           `url:"created,omitempty"`          // 创建时间	支持时间查询
	Modified         *string           `url:"modified,omitempty"`         // 最后修改时间	支持时间查询
	Status           *Enum[TaskStatus] `url:"status,omitempty"`           // 状态	支持枚举查询
	Label            *Enum[string]     `url:"label,omitempty"`            // 标签查询	支持枚举查询
	Owner            *string           `url:"owner,omitempty"`            // 任务当前处理人	支持模糊匹配
	CC               *string           `url:"cc,omitempty"`               // 抄送人
	Begin            *string           `url:"begin,omitempty"`            // 预计开始	支持时间查询
	Due              *string           `url:"due,omitempty"`              // 预计结束	支持时间查询
	StoryID          *Multi[int64]     `url:"story_id,omitempty"`         // 关联需求的ID	支持多ID查询
	IterationID      *Enum[int64]      `url:"iteration_id,omitempty"`     // 所属迭代的ID	支持枚举查询
	Priority         *string           `url:"priority,omitempty"`         //nolint:lll // 优先级。为了兼容自定义优先级,请使用 priority_label 字段,详情参考:如何兼容自定义优先级
	PriorityLabel    *PriorityLabel    `url:"priority_label,omitempty"`   // 优先级。推荐使用这个字段
	Progress         *int              `url:"progress,omitempty"`         // 进度
	Completed        *string           `url:"completed,omitempty"`        // 完成时间	支持时间查询
	EffortCompleted  *string           `url:"effort_completed,omitempty"` // 完成工时
	Exceed           *float64          `url:"exceed,omitempty"`           // 超出工时
	Remain           *float64          `url:"remain,omitempty"`           // 剩余工时
	Effort           *string           `url:"effort,omitempty"`           // 预估工时
	CustomFieldOne   *string           `url:"custom_field_one,omitempty"`
	CustomFieldTwo   *string           `url:"custom_field_two,omitempty"`
	CustomFieldThree *string           `url:"custom_field_three,omitempty"`
	CustomFieldFour  *string           `url:"custom_field_four,omitempty"`
	CustomFieldFive  *string           `url:"custom_field_five,omitempty"`
	CustomFieldSix   *string           `url:"custom_field_six,omitempty"`
	CustomFieldSeven *string           `url:"custom_field_seven,omitempty"`
	CustomFieldEight *string           `url:"custom_field_eight,omitempty"`
	CustomField9     *string           `url:"custom_field_9,omitempty"`
	CustomField10    *string           `url:"custom_field_10,omitempty"`
	CustomField11    *string           `url:"custom_field_11,omitempty"`
	CustomField12    *string           `url:"custom_field_12,omitempty"`
	CustomField13    *string           `url:"custom_field_13,omitempty"`
	CustomField14    *string           `url:"custom_field_14,omitempty"`
	CustomField15    *string           `url:"custom_field_15,omitempty"`
	CustomField16    *string           `url:"custom_field_16,omitempty"`
	CustomField17    *string           `url:"custom_field_17,omitempty"`
	CustomField18    *string           `url:"custom_field_18,omitempty"`
	CustomField19    *string           `url:"custom_field_19,omitempty"`
	CustomField20    *string           `url:"custom_field_20,omitempty"`
	CustomField21    *string           `url:"custom_field_21,omitempty"`
	CustomField22    *string           `url:"custom_field_22,omitempty"`
	CustomField23    *string           `url:"custom_field_23,omitempty"`
	CustomField24    *string           `url:"custom_field_24,omitempty"`
	CustomField25    *string           `url:"custom_field_25,omitempty"`
	CustomField26    *string           `url:"custom_field_26,omitempty"`
	CustomField27    *string           `url:"custom_field_27,omitempty"`
	CustomField28    *string           `url:"custom_field_28,omitempty"`
	CustomField29    *string           `url:"custom_field_29,omitempty"`
	CustomField30    *string           `url:"custom_field_30,omitempty"`
	CustomField31    *string           `url:"custom_field_31,omitempty"`
	CustomField32    *string           `url:"custom_field_32,omitempty"`
	CustomField33    *string           `url:"custom_field_33,omitempty"`
	CustomField34    *string           `url:"custom_field_34,omitempty"`
	CustomField35    *string           `url:"custom_field_35,omitempty"`
	CustomField36    *string           `url:"custom_field_36,omitempty"`
	CustomField37    *string           `url:"custom_field_37,omitempty"`
	CustomField38    *string           `url:"custom_field_38,omitempty"`
	CustomField39    *string           `url:"custom_field_39,omitempty"`
	CustomField40    *string           `url:"custom_field_40,omitempty"`
	CustomField41    *string           `url:"custom_field_41,omitempty"`
	CustomField42    *string           `url:"custom_field_42,omitempty"`
	CustomField43    *string           `url:"custom_field_43,omitempty"`
	CustomField44    *string           `url:"custom_field_44,omitempty"`
	CustomField45    *string           `url:"custom_field_45,omitempty"`
	CustomField46    *string           `url:"custom_field_46,omitempty"`
	CustomField47    *string           `url:"custom_field_47,omitempty"`
	CustomField48    *string           `url:"custom_field_48,omitempty"`
	CustomField49    *string           `url:"custom_field_49,omitempty"`
	CustomField50    *string           `url:"custom_field_50,omitempty"`
	Limit            *int              `url:"limit,omitempty"`  // 设置返回数量限制,默认为30
	Page             *int              `url:"page,omitempty"`   // 返回当前数量限制下第N页的数据,默认为1(第一页)
	Order            *Order            `url:"order,omitempty"`  //nolint:lll // 排序规则,规则:字段名 ASC或者DESC,然后 urlencode	如按创建时间逆序:order=created%20desc
	Fields           *Multi[string]    `url:"fields,omitempty"` // 设置获取的字段,多个字段间以','逗号隔开
}

type GetTemplateListRequest added in v0.6.0

type GetTemplateListRequest struct {
	WorkspaceID *int `url:"workspace_id,omitempty"` // 项目 ID
}

type GetTimesheetsCountRequest

type GetTimesheetsCountRequest struct {
	// [可选]id 支持多ID查询
	ID *Multi[int64] `url:"id,omitempty"`

	// [必选]项目ID
	WorkspaceID *int `url:"workspace_id,omitempty"`

	// [可选]对象类型,如story、task、bug等
	EntityType *EntityType `url:"entity_type,omitempty"`

	// [可选]对象ID
	EntityID *int64 `url:"entity_id,omitempty"`

	// [可选]花费工时
	Timespent *string `url:"timespent,omitempty"`

	// [可选]花费日期 支持时间查询
	Spentdate *string `url:"spentdate,omitempty"`

	// [可选]最后修改时间 支持时间查询
	Modified *string `url:"modified,omitempty"`

	// [可选]花费创建人
	Owner *string `url:"owner,omitempty"`

	// [可选]值=0不返回父需求的花费
	IncludeParentStoryTimesheet *int `url:"include_parent_story_timesheet,omitempty"`

	// [可选]创建时间 支持时间查询
	Created *string `url:"created,omitempty"`

	// [可选]花费描述
	Memo *string `url:"memo,omitempty"`

	// [可选]是否已删除。默认取 0,不返回已删除的工时记录。取 1 可以返回已删除的记录
	IsDelete *int `url:"is_delete,omitempty"`
}

type GetTimesheetsRequest

type GetTimesheetsRequest struct {
	// [可选]id 支持多ID查询
	ID *Multi[int64] `url:"id,omitempty"`

	// [必选]项目ID
	WorkspaceID *int `url:"workspace_id,omitempty"`

	// [可选]对象类型,如story、task、bug等
	EntityType *EntityType `url:"entity_type,omitempty"`

	// [可选]对象ID
	EntityID *int64 `url:"entity_id,omitempty"`

	// [可选]花费工时
	Timespent *string `url:"timespent,omitempty"`

	// [可选]花费日期 支持时间查询
	Spentdate *string `url:"spentdate,omitempty"`

	// [可选]最后修改时间 支持时间查询
	Modified *string `url:"modified,omitempty"`

	// [可选]花费创建人
	Owner *string `url:"owner,omitempty"`

	// [可选]值=0不返回父需求的花费
	IncludeParentStoryTimesheet *int `url:"include_parent_story_timesheet,omitempty"`

	// [可选]创建时间 支持时间查询
	Created *string `url:"created,omitempty"`

	// [可选]花费描述
	Memo *string `url:"memo,omitempty"`

	// [可选]是否已删除。默认取 0,不返回已删除的工时记录。取 1 可以返回已删除的记录
	IsDelete *int `url:"is_delete,omitempty"`

	// [可选]设置返回数量限制,默认为30
	Limit *int `url:"limit,omitempty"`

	// [可选]返回当前数量限制下第N页的数据,默认为1(第一页)
	Page *int `url:"page,omitempty"`

	// [可选]排序规则,规则:字段名 ASC或者DESC,然后 urlencode 如按创建时间逆序
	Order *Order `url:"order,omitempty"`

	// [可选]设置获取的字段,多个字段间以','逗号隔开
	Fields *Multi[string] `url:"fields,omitempty"`
}

type GetUsersRequest added in v0.12.0

type GetUsersRequest struct {
	WorkspaceID *int           `url:"workspace_id,omitempty"` // [必须]项目ID
	User        *Multi[string] `url:"user,omitempty"`         // [可选]用户昵称或ID
	Fields      *Multi[string] `url:"fields,omitempty"`       // [可选]返回的字段列表,user,user_id,role_id,name,email,real_join_time 可选,以,分隔
}

type GetWorkitemTypesRequest added in v0.6.0

type GetWorkitemTypesRequest struct {
	WorkspaceID *int `url:"workspace_id,omitempty"` // 项目 ID
}

type GetWorkspaceSettingRequest

type GetWorkspaceSettingRequest struct {
	WorkspaceID *int    `url:"workspace_id,omitempty"` // 项目ID
	Type        *string `url:"type,omitempty"`         // nolint:lll // 配置名称(is_enabled_story_category 是否启用需求分类树,workspace_metrology 工时单位)
}

type GetWorkspaceSettingResponse

type GetWorkspaceSettingResponse struct {
	IsEnabledStoryCategory *int    `json:"is_enabled_story_category,omitempty"` // 是否启用需求分类树(1启用,0未启用 )
	WorkspaceMetrology     *string `json:"workspace_metrology,omitempty"`       // 工时单位(day 天,hour 小时)
}

type ImageAttachment

type ImageAttachment struct {
	Type        string `json:"type,omitempty"`         // 文件类型
	Value       string `json:"value,omitempty"`        // 图片路径
	WorkspaceID int    `json:"workspace_id,omitempty"` // 项目id
	Filename    string `json:"filename,omitempty"`     // 图片文件名
	DownloadURL string `json:"download_url,omitempty"` // 单个图片下载地址
}

type Iteration added in v0.6.0

type Iteration struct {
	ID             string `json:"id,omitempty"`
	Name           string `json:"name,omitempty"`
	WorkspaceID    string `json:"workspace_id,omitempty"`
	StartDate      string `json:"startdate,omitempty"`
	EndDate        string `json:"enddate,omitempty"`
	Status         string `json:"status,omitempty"`
	ReleaseID      string `json:"release_id,omitempty"`
	Description    string `json:"description,omitempty"`
	Creator        string `json:"creator,omitempty"`
	Created        string `json:"created,omitempty"`
	Modified       string `json:"modified,omitempty"`
	Completed      string `json:"completed,omitempty"`
	EntityType     string `json:"entity_type,omitempty"`
	ParentID       string `json:"parent_id,omitempty"`
	AncestorID     string `json:"ancestor_id,omitempty"`
	Path           string `json:"path,omitempty"`
	WorkitemTypeID string `json:"workitem_type_id,omitempty"`
	TemplatedID    string `json:"templated_id,omitempty"`
	PlanAppID      string `json:"plan_app_id,omitempty"`
	CrucialMoment  string `json:"crucial_moment,omitempty"`
	Label          string `json:"label,omitempty"`
	ReleaseOwner   string `json:"releaseowner,omitempty"`
	LaunchDate     string `json:"launchdate,omitempty"`
	Notice         string `json:"notice,omitempty"`
	ReleaseName    string `json:"releasename,omitempty"`
	CustomField1   string `json:"custom_field_1,omitempty"`
	CustomField2   string `json:"custom_field_2,omitempty"`
	CustomField3   string `json:"custom_field_3,omitempty"`
	CustomField4   string `json:"custom_field_4,omitempty"`
	CustomField5   string `json:"custom_field_5,omitempty"`
	CustomField6   string `json:"custom_field_6,omitempty"`
	CustomField7   string `json:"custom_field_7,omitempty"`
	CustomField8   string `json:"custom_field_8,omitempty"`
	CustomField9   string `json:"custom_field_9,omitempty"`
	CustomField10  string `json:"custom_field_10,omitempty"`
	CustomField11  string `json:"custom_field_11,omitempty"`
	CustomField12  string `json:"custom_field_12,omitempty"`
	CustomField13  string `json:"custom_field_13,omitempty"`
	CustomField14  string `json:"custom_field_14,omitempty"`
	CustomField15  string `json:"custom_field_15,omitempty"`
	CustomField16  string `json:"custom_field_16,omitempty"`
	CustomField17  string `json:"custom_field_17,omitempty"`
	CustomField18  string `json:"custom_field_18,omitempty"`
	CustomField19  string `json:"custom_field_19,omitempty"`
	CustomField20  string `json:"custom_field_20,omitempty"`
	CustomField21  string `json:"custom_field_21,omitempty"`
	CustomField22  string `json:"custom_field_22,omitempty"`
	CustomField23  string `json:"custom_field_23,omitempty"`
	CustomField24  string `json:"custom_field_24,omitempty"`
	CustomField25  string `json:"custom_field_25,omitempty"`
	CustomField26  string `json:"custom_field_26,omitempty"`
	CustomField27  string `json:"custom_field_27,omitempty"`
	CustomField28  string `json:"custom_field_28,omitempty"`
	CustomField29  string `json:"custom_field_29,omitempty"`
	CustomField30  string `json:"custom_field_30,omitempty"`
	CustomField31  string `json:"custom_field_31,omitempty"`
	CustomField32  string `json:"custom_field_32,omitempty"`
	CustomField33  string `json:"custom_field_33,omitempty"`
	CustomField34  string `json:"custom_field_34,omitempty"`
	CustomField35  string `json:"custom_field_35,omitempty"`
	CustomField36  string `json:"custom_field_36,omitempty"`
	CustomField37  string `json:"custom_field_37,omitempty"`
	CustomField38  string `json:"custom_field_38,omitempty"`
	CustomField39  string `json:"custom_field_39,omitempty"`
	CustomField40  string `json:"custom_field_40,omitempty"`
	CustomField41  string `json:"custom_field_41,omitempty"`
	CustomField42  string `json:"custom_field_42,omitempty"`
	CustomField43  string `json:"custom_field_43,omitempty"`
	CustomField44  string `json:"custom_field_44,omitempty"`
	CustomField45  string `json:"custom_field_45,omitempty"`
	CustomField46  string `json:"custom_field_46,omitempty"`
	CustomField47  string `json:"custom_field_47,omitempty"`
	CustomField48  string `json:"custom_field_48,omitempty"`
	CustomField49  string `json:"custom_field_49,omitempty"`
	CustomField50  string `json:"custom_field_50,omitempty"`
	OriginName     string `json:"origin_name,omitempty"`
}

type IterationService

type IterationService interface {
	// CreateIteration 创建迭代
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/iteration/add_iteration.html
	CreateIteration(ctx context.Context, request *CreateIterationRequest, opts ...RequestOption) (*Iteration, *Response, error)

	// GetIterations 获取迭代
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/iteration/get_iterations.html
	GetIterations(ctx context.Context, request *GetIterationsRequest, opts ...RequestOption) ([]*Iteration, *Response, error)

	// GetIterationsCount 获取迭代数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/iteration/get_iterations_count.html
	GetIterationsCount(ctx context.Context, request *GetIterationsCountRequest, opts ...RequestOption) (int, *Response, error)

	// UpdateIteration 更新迭代
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/iteration/update_iteration.html
	UpdateIteration(ctx context.Context, request *UpdateIterationRequest, opts ...RequestOption) (*Iteration, *Response, error)

	// GetWorkitemTypes 获取迭代类别列表
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/iteration/workitem_types.html
	GetWorkitemTypes(ctx context.Context, request *GetWorkitemTypesRequest, opts ...RequestOption) ([]*WorkitemType, *Response, error)

	// GetTemplateList 获取迭代模板列表
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/iteration/template_list.html
	GetTemplateList(ctx context.Context, request *GetTemplateListRequest, opts ...RequestOption) ([]*WorkitemTemplate, *Response, error)
}

IterationService 迭代

https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/iteration/

func NewIterationService added in v0.12.0

func NewIterationService(client *Client) IterationService

type Label

type Label struct {
	ID          string     `json:"id,omitempty"`
	WorkspaceID string     `json:"workspace_id,omitempty"`
	Name        string     `json:"name,omitempty"`
	Color       LabelColor `json:"color,omitempty"`
	Category    string     `json:"category,omitempty"`
	Creator     string     `json:"creator,omitempty"`
	Modifier    string     `json:"modifier,omitempty"`
	Created     string     `json:"created,omitempty"`
	Modified    string     `json:"modified,omitempty"`
	ColorValue  string     `json:"color_value,omitempty"`
}

Label represents a label.

type LabelColor

type LabelColor string

LabelColor is a type for label colors.

const (
	LabelColor1 LabelColor = "1"
	LabelColor2 LabelColor = "2"
	LabelColor3 LabelColor = "3"
	LabelColor4 LabelColor = "4"
)

type LabelPool

type LabelPool struct {
	LabelPool *Label `json:"LabelPool"`
}

type LabelService

LabelService handles communication with the label related methods of the Tapd API.

Tapd API docs: https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/label/index.html

func NewLabelService added in v0.12.0

func NewLabelService(client *Client) LabelService

type LifeTime

type LifeTime struct {
	ID              string     `json:"id"`                // id
	WorkspaceID     string     `json:"workspace_id"`      // 项目ID
	EntityType      EntityType `json:"entity_type"`       // 业务对象类型
	EntityID        string     `json:"entity_id"`         // 业务对象ID
	Status          string     `json:"status"`            // 状态
	Owner           string     `json:"owner"`             //
	IsRepeated      string     `json:"is_repeated"`       // 是否重复
	BeginDate       string     `json:"begin_date"`        // 开始时间
	EndDate         string     `json:"end_date"`          // 结束时间
	TimeCost        string     `json:"time_cost"`         // 停留时长,单位:小时
	TimeCostReduced string     `json:"time_cost_reduced"` // 停留时长,单位:小时
	Created         string     `json:"created"`           // 创建时间(变更时间)
	Operator        string     `json:"operator"`          // 操作人
	IsLatest        string     `json:"is_latest"`         // 是否最新
	IsDelete        string     `json:"is_delete"`         // 是否删除
}

LifeTime 状态流转时间

type LifeTimesRequest

type LifeTimesRequest struct {
	EntityID    *int           `url:"entity_id,omitempty"`    // [必须]业务对象ID
	EntityType  *EntityType    `url:"entity_type,omitempty"`  // [必须]业务对象类型 目前type可选值:task,story,bug
	WorkspaceID *int           `url:"workspace_id,omitempty"` // [必须]项目ID
	Created     *string        `url:"created,omitempty"`      // 创建时间
	Limit       *int           `url:"limit,omitempty"`        // 设置返回数量限制,默认为30
	Page        *int           `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1(第一页)
	Fields      *Multi[string] `url:"fields,omitempty"`       // 设置获取的字段,多个字段间以','逗号隔开
}

type MeasureService

type MeasureService interface {
	// LifeTimes 获取状态流转时间
	// Note: 一次插入一条数据。注意同一 entity_type、entity_id、spentdate、owner ,只能有一条工时记录
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/measure/get_life_times.html
	LifeTimes(ctx context.Context, request *LifeTimesRequest, opts ...RequestOption) ([]*LifeTime, *Response, error)
}

func NewMeasureService added in v0.12.0

func NewMeasureService(client *Client) MeasureService

type MemberActivityLog

type MemberActivityLog struct {
	ID            string        `json:"id,omitempty"`
	Action        string        `json:"action,omitempty"`
	Created       string        `json:"created,omitempty"`
	Creator       string        `json:"creator,omitempty"`
	ProjectName   string        `json:"project_name,omitempty"`
	OperateType   OperateType   `json:"operate_type,omitempty"`
	OperateObject OperateObject `json:"operate_object,omitempty"`
	Title         string        `json:"title,omitempty"`
	URL           string        `json:"url,omitempty"`
	IP            string        `json:"ip,omitempty"`
	UA            string        `json:"ua,omitempty"`
}

type Multi

type Multi[T any] []T

func NewMulti

func NewMulti[T any](values ...T) *Multi[T]

NewMulti creates a new multi value.

Example:

NewMulti("a", "b", "c") => "a,b,c"
NewMulti(1, 2, 3) => "1,2,3"

func (Multi[T]) EncodeValues

func (m Multi[T]) EncodeValues(key string, v *url.Values) error

func (Multi[T]) MarshalJSON

func (m Multi[T]) MarshalJSON() ([]byte, error)

func (Multi[T]) String

func (m Multi[T]) String() string

type OperateObject

type OperateObject string
const (
	OperateObjectAttachment        OperateObject = "attachment"
	OperateObjectBoard             OperateObject = "board"
	OperateObjectBug               OperateObject = "bug"
	OperateObjectDocument          OperateObject = "document"
	OperateObjectIteration         OperateObject = "iteration"
	OperateObjectLaunch            OperateObject = "launch"
	OperateObjectMemberActivityLog OperateObject = "member_activity_log"
	OperateObjectRelease           OperateObject = "release"
	OperateObjectStory             OperateObject = "story"
	OperateObjectTask              OperateObject = "task"
	OperateObjectTestCase          OperateObject = "tcase"
	OperateObjectTestPlan          OperateObject = "testplan"
	OperateObjectWiki              OperateObject = "wiki"
)

type OperateType

type OperateType string
const (
	OperateTypeAdd      OperateType = "add"
	OperateTypeDelete   OperateType = "delete"
	OperateTypeDownload OperateType = "download"
	OperateTypeUpload   OperateType = "upload"
)

type Order

type Order struct {
	// contains filtered or unexported fields
}

Order is a type for order parameters.

func NewOrder

func NewOrder(field string, opts ...OrderOption) *Order

NewOrder creates a new order parameter.

Example:

NewOrder("created") => "created asc"
NewOrder("created", OrderByAsc) => "created asc"
NewOrder("created", OrderByDesc) => "created desc"

func (*Order) EncodeValues

func (o *Order) EncodeValues(key string, v *url.Values) error

func (*Order) MarshalJSON

func (o *Order) MarshalJSON() ([]byte, error)

func (*Order) UnmarshalJSON

func (o *Order) UnmarshalJSON(bytes []byte) error

type OrderOption

type OrderOption func(*Order)

func WithOrderType

func WithOrderType(orderType OrderType) OrderOption

type OrderType

type OrderType string
const (
	OrderTypeAsc  OrderType = "asc"
	OrderTypeDesc OrderType = "desc"
)

type PriorityLabel

type PriorityLabel string
const (
	PriorityLabelHigh       PriorityLabel = "High"
	PriorityLabelMiddle     PriorityLabel = "Middle"
	PriorityLabelLow        PriorityLabel = "Low"
	PriorityLabelNiceToHave PriorityLabel = "Nice To Have"
)

func (PriorityLabel) String

func (p PriorityLabel) String() string

type RawBody

type RawBody struct {
	Status int             `json:"status"`
	Data   json.RawMessage `json:"data"`
	Info   string          `json:"info"`
}

RawBody represents a raw body.

type RemovedStory

type RemovedStory struct {
	ID            string `json:"id,omitempty"`             // 需求ID
	Name          string `json:"name,omitempty"`           // 标题
	Creator       string `json:"creator,omitempty"`        // 创建人
	Created       string `json:"created,omitempty"`        // 创建时间
	OperationUser string `json:"operation_user,omitempty"` // 删除人
	IsArchived    string `json:"is_archived,omitempty"`    // 是否为归档
	Deleted       string `json:"deleted,omitempty"`        // 删除时间
}

type Report

type Report struct {
	ID                      string       `json:"id,omitempty"`
	Title                   string       `json:"title,omitempty"`
	WorkspaceID             string       `json:"workspace_id,omitempty"`
	ReportType              ReportType   `json:"report_type,omitempty"`
	Receiver                string       `json:"receiver,omitempty"`
	Cc                      string       `json:"cc,omitempty"`
	ReceiverOrganizationIDs string       `json:"receiver_organization_ids,omitempty"`
	CcOrganizationIDs       string       `json:"cc_organization_ids,omitempty"`
	Sender                  string       `json:"sender,omitempty"`
	SendTime                string       `json:"send_time,omitempty"`
	Author                  string       `json:"author,omitempty"`
	Created                 string       `json:"created,omitempty"`
	Status                  ReportStatus `json:"status,omitempty"`
	Modified                string       `json:"modified,omitempty"`
	LastModify              string       `json:"last_modify,omitempty"`
}

Report 项目报告

type ReportService

type ReportService interface {
	// GetReports 获取项目报告
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/report/get_workspace_reports.html
	GetReports(ctx context.Context, request *GetReportsRequest, opts ...RequestOption) ([]*Report, *Response, error)
}

ReportService is a service to interact with report related API

func NewReportService added in v0.12.0

func NewReportService(client *Client) ReportService

type ReportStatus

type ReportStatus string

ReportStatus 报告状态(sent:已发送, draft:草稿, abandon:已删除)

const (
	ReportStatusSent    ReportStatus = "sent"
	ReportStatusDraft   ReportStatus = "draft"
	ReportStatusAbandon ReportStatus = "abandon"
)

type ReportType

type ReportType string

ReportType 报告类型(normal:项目进度报告, totest:项目转测试, test:测试报告)

const (
	ReportTypeNormal ReportType = "normal"
	ReportTypeToTest ReportType = "totest"
	ReportTypeTest   ReportType = "test"
)

type RequestOption

type RequestOption func(*http.Request) error

func WithRequestAccessToken added in v0.13.0

func WithRequestAccessToken(accessToken string) RequestOption

func WithRequestBasicAuth

func WithRequestBasicAuth(clientID, clientSecret string) RequestOption

func WithRequestHeader

func WithRequestHeader(name, value string) RequestOption

func WithRequestHeaderFunc

func WithRequestHeaderFunc(fn func(http.Header)) RequestOption

func WithRequestHeaders

func WithRequestHeaders(headers map[string]string) RequestOption

func WithRequestUserAgent

func WithRequestUserAgent(userAgent string) RequestOption

type Response

type Response struct {
	*http.Response
}

Response represents an API response.

type RetryableHTTPClientOption

type RetryableHTTPClientOption func(client *retryablehttp.Client)

func WithRetryableHTTPClientBackoff

func WithRetryableHTTPClientBackoff(backoff retryablehttp.Backoff) RetryableHTTPClientOption

func WithRetryableHTTPClientCheckRetry

func WithRetryableHTTPClientCheckRetry(checkRetry retryablehttp.CheckRetry) RetryableHTTPClientOption

func WithRetryableHTTPClientLogger

func WithRetryableHTTPClientLogger(logger retryablehttp.Logger) RetryableHTTPClientOption

func WithRetryableHTTPClientRetryMax

func WithRetryableHTTPClientRetryMax(retryMax int) RetryableHTTPClientOption

func WithRetryableHTTPClientRetryWaitMax

func WithRetryableHTTPClientRetryWaitMax(waitMax time.Duration) RetryableHTTPClientOption

func WithRetryableHTTPClientRetryWaitMin

func WithRetryableHTTPClientRetryWaitMin(waitMin time.Duration) RetryableHTTPClientOption

type SettingService

type SettingService interface {

	// GetWorkspaceSetting 获取项目配置开关
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/setting/get_workspace_setting.html
	GetWorkspaceSetting(ctx context.Context, request *GetWorkspaceSettingRequest, opts ...RequestOption) (*GetWorkspaceSettingResponse, *Response, error)
}

SettingService 配置

https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/setting/

func NewSettingService added in v0.12.0

func NewSettingService(client *Client) SettingService

type StoreChangeType

type StoreChangeType string

StoreChangeType 变更类型

https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_story_changes.html

const (
	StoreChangeTypeSyncCopy            StoreChangeType = "sync_copy"              // 同步复制联动
	StoreChangeTypeStoryStatusRelation StoreChangeType = "story_status_relation"  // 父子需求联动
	StoreChangeTypeStoryTaskRelation   StoreChangeType = "story_task_relation"    // 需求任务联动
	StoreChangeTypeAPI                 StoreChangeType = "api"                    // API变更
	StoreChangeTypeSmartCommit         StoreChangeType = "smart_commit"           // Smart Commit触发
	StoreChangeTypeAutoTask            StoreChangeType = "auto_task"              // 自动化任务触发
	StoreChangeTypeAutoWorkflow        StoreChangeType = "auto_workflow"          // 自动化工作流触发
	StoreChangeTypeManualUpdate        StoreChangeType = "manual_update"          // 手动变更
	StoreChangeTypeImportUpdate        StoreChangeType = "import_update"          // 导入更新
	StoreChangeTypeCodeChange          StoreChangeType = "code_change"            // 代码变更
	StoreChangeTypeStatusDelete        StoreChangeType = "status_delete"          // 状态删除
	StoreChangeTypeExitWorkspace       StoreChangeType = "exit_workspace"         // 退出项目触发
	StoreChangeTypeLinkUpdate          StoreChangeType = "link_update"            // 更新关联
	StoreChangeTypeLinkCreate          StoreChangeType = "link_create"            // 创建关联
	StoreChangeTypeLinkDelete          StoreChangeType = "link_delete"            // 删除关联
	StoreChangeTypeCreateStoryFromCopy StoreChangeType = "create_story_from_copy" // 复制创建
	StoreChangeTypeCreateStory         StoreChangeType = "create_story"           // 创建需求
)

type StoriesCountByCategory

type StoriesCountByCategory struct {
	CategoryID string `json:"category_id,omitempty"`
	Count      int    `json:"count,omitempty"`
}

type Story

type Story struct {
	ID                string        `json:"id,omitempty"`
	WorkitemTypeID    string        `json:"workitem_type_id,omitempty"`
	Name              string        `json:"name,omitempty"`
	Description       string        `json:"description,omitempty"`
	WorkspaceID       string        `json:"workspace_id,omitempty"`
	Creator           string        `json:"creator,omitempty"`
	Created           string        `json:"created,omitempty"`
	Modified          string        `json:"modified,omitempty"`
	Status            StoryStatus   `json:"status,omitempty"`
	Step              string        `json:"step,omitempty"`
	Owner             string        `json:"owner,omitempty"`
	Cc                string        `json:"cc,omitempty"`
	Begin             *string       `json:"begin,omitempty"`
	Due               *string       `json:"due,omitempty"`
	Size              *string       `json:"size,omitempty"`
	Priority          string        `json:"priority,omitempty"`
	Developer         string        `json:"developer,omitempty"`
	IterationID       string        `json:"iteration_id,omitempty"`
	TestFocus         string        `json:"test_focus,omitempty"`
	Type              string        `json:"type,omitempty"`
	Source            string        `json:"source,omitempty"`
	Module            string        `json:"module,omitempty"`
	Version           string        `json:"version,omitempty"`
	Completed         *string       `json:"completed,omitempty"`
	CategoryID        string        `json:"category_id,omitempty"`
	Path              string        `json:"path,omitempty"`
	ParentID          string        `json:"parent_id,omitempty"`
	ChildrenID        string        `json:"children_id,omitempty"`
	AncestorID        string        `json:"ancestor_id,omitempty"`
	Level             string        `json:"level,omitempty"`
	BusinessValue     *string       `json:"business_value,omitempty"`
	Effort            *string       `json:"effort,omitempty"`
	EffortCompleted   string        `json:"effort_completed,omitempty"`
	Exceed            string        `json:"exceed,omitempty"`
	Remain            string        `json:"remain,omitempty"`
	ReleaseID         string        `json:"release_id,omitempty"`
	BugID             string        `json:"bug_id,omitempty"`
	TemplatedID       string        `json:"templated_id,omitempty"`
	CreatedFrom       string        `json:"created_from,omitempty"`
	Feature           string        `json:"feature,omitempty"`
	Label             string        `json:"label,omitempty"`
	Progress          string        `json:"progress,omitempty"`
	IsArchived        string        `json:"is_archived,omitempty"`
	TechRisk          *string       `json:"tech_risk,omitempty"`
	Flows             *string       `json:"flows,omitempty"`
	SecretRootID      string        `json:"secret_root_id,omitempty"`
	PriorityLabel     PriorityLabel `json:"priority_label,omitempty"`
	CustomFieldOne    string        `json:"custom_field_one,omitempty"`
	CustomFieldTwo    string        `json:"custom_field_two,omitempty"`
	CustomFieldThree  string        `json:"custom_field_three,omitempty"`
	CustomFieldFour   string        `json:"custom_field_four,omitempty"`
	CustomFieldFive   string        `json:"custom_field_five,omitempty"`
	CustomFieldSix    string        `json:"custom_field_six,omitempty"`
	CustomFieldSeven  string        `json:"custom_field_seven,omitempty"`
	CustomFieldEight  string        `json:"custom_field_eight,omitempty"`
	CustomField9      string        `json:"custom_field_9,omitempty"`
	CustomField10     string        `json:"custom_field_10,omitempty"`
	CustomField11     string        `json:"custom_field_11,omitempty"`
	CustomField12     string        `json:"custom_field_12,omitempty"`
	CustomField13     string        `json:"custom_field_13,omitempty"`
	CustomField14     string        `json:"custom_field_14,omitempty"`
	CustomField15     string        `json:"custom_field_15,omitempty"`
	CustomField16     string        `json:"custom_field_16,omitempty"`
	CustomField17     string        `json:"custom_field_17,omitempty"`
	CustomField18     string        `json:"custom_field_18,omitempty"`
	CustomField19     string        `json:"custom_field_19,omitempty"`
	CustomField20     string        `json:"custom_field_20,omitempty"`
	CustomField21     string        `json:"custom_field_21,omitempty"`
	CustomField22     string        `json:"custom_field_22,omitempty"`
	CustomField23     string        `json:"custom_field_23,omitempty"`
	CustomField24     string        `json:"custom_field_24,omitempty"`
	CustomField25     string        `json:"custom_field_25,omitempty"`
	CustomField26     string        `json:"custom_field_26,omitempty"`
	CustomField27     string        `json:"custom_field_27,omitempty"`
	CustomField28     string        `json:"custom_field_28,omitempty"`
	CustomField29     string        `json:"custom_field_29,omitempty"`
	CustomField30     string        `json:"custom_field_30,omitempty"`
	CustomField31     string        `json:"custom_field_31,omitempty"`
	CustomField32     string        `json:"custom_field_32,omitempty"`
	CustomField33     string        `json:"custom_field_33,omitempty"`
	CustomField34     string        `json:"custom_field_34,omitempty"`
	CustomField35     string        `json:"custom_field_35,omitempty"`
	CustomField36     string        `json:"custom_field_36,omitempty"`
	CustomField37     string        `json:"custom_field_37,omitempty"`
	CustomField38     string        `json:"custom_field_38,omitempty"`
	CustomField39     string        `json:"custom_field_39,omitempty"`
	CustomField40     string        `json:"custom_field_40,omitempty"`
	CustomField41     string        `json:"custom_field_41,omitempty"`
	CustomField42     string        `json:"custom_field_42,omitempty"`
	CustomField43     string        `json:"custom_field_43,omitempty"`
	CustomField44     string        `json:"custom_field_44,omitempty"`
	CustomField45     string        `json:"custom_field_45,omitempty"`
	CustomField46     string        `json:"custom_field_46,omitempty"`
	CustomField47     string        `json:"custom_field_47,omitempty"`
	CustomField48     string        `json:"custom_field_48,omitempty"`
	CustomField49     string        `json:"custom_field_49,omitempty"`
	CustomField50     string        `json:"custom_field_50,omitempty"`
	CustomField51     string        `json:"custom_field_51,omitempty"`
	CustomField52     string        `json:"custom_field_52,omitempty"`
	CustomField53     string        `json:"custom_field_53,omitempty"`
	CustomField54     string        `json:"custom_field_54,omitempty"`
	CustomField55     string        `json:"custom_field_55,omitempty"`
	CustomField56     string        `json:"custom_field_56,omitempty"`
	CustomField57     string        `json:"custom_field_57,omitempty"`
	CustomField58     string        `json:"custom_field_58,omitempty"`
	CustomField59     string        `json:"custom_field_59,omitempty"`
	CustomField60     string        `json:"custom_field_60,omitempty"`
	CustomField61     string        `json:"custom_field_61,omitempty"`
	CustomField62     string        `json:"custom_field_62,omitempty"`
	CustomField63     string        `json:"custom_field_63,omitempty"`
	CustomField64     string        `json:"custom_field_64,omitempty"`
	CustomField65     string        `json:"custom_field_65,omitempty"`
	CustomField66     string        `json:"custom_field_66,omitempty"`
	CustomField67     string        `json:"custom_field_67,omitempty"`
	CustomField68     string        `json:"custom_field_68,omitempty"`
	CustomField69     string        `json:"custom_field_69,omitempty"`
	CustomField70     string        `json:"custom_field_70,omitempty"`
	CustomField71     string        `json:"custom_field_71,omitempty"`
	CustomField72     string        `json:"custom_field_72,omitempty"`
	CustomField73     string        `json:"custom_field_73,omitempty"`
	CustomField74     string        `json:"custom_field_74,omitempty"`
	CustomField75     string        `json:"custom_field_75,omitempty"`
	CustomField76     string        `json:"custom_field_76,omitempty"`
	CustomField77     string        `json:"custom_field_77,omitempty"`
	CustomField78     string        `json:"custom_field_78,omitempty"`
	CustomField79     string        `json:"custom_field_79,omitempty"`
	CustomField80     string        `json:"custom_field_80,omitempty"`
	CustomField81     string        `json:"custom_field_81,omitempty"`
	CustomField82     string        `json:"custom_field_82,omitempty"`
	CustomField83     string        `json:"custom_field_83,omitempty"`
	CustomField84     string        `json:"custom_field_84,omitempty"`
	CustomField85     string        `json:"custom_field_85,omitempty"`
	CustomField86     string        `json:"custom_field_86,omitempty"`
	CustomField87     string        `json:"custom_field_87,omitempty"`
	CustomField88     string        `json:"custom_field_88,omitempty"`
	CustomField89     string        `json:"custom_field_89,omitempty"`
	CustomField90     string        `json:"custom_field_90,omitempty"`
	CustomField91     string        `json:"custom_field_91,omitempty"`
	CustomField92     string        `json:"custom_field_92,omitempty"`
	CustomField93     string        `json:"custom_field_93,omitempty"`
	CustomField94     string        `json:"custom_field_94,omitempty"`
	CustomField95     string        `json:"custom_field_95,omitempty"`
	CustomField96     string        `json:"custom_field_96,omitempty"`
	CustomField97     string        `json:"custom_field_97,omitempty"`
	CustomField98     string        `json:"custom_field_98,omitempty"`
	CustomField99     string        `json:"custom_field_99,omitempty"`
	CustomField100    string        `json:"custom_field_100,omitempty"`
	CustomField101    string        `json:"custom_field_101,omitempty"`
	CustomField102    string        `json:"custom_field_102,omitempty"`
	CustomField103    string        `json:"custom_field_103,omitempty"`
	CustomField104    string        `json:"custom_field_104,omitempty"`
	CustomField105    string        `json:"custom_field_105,omitempty"`
	CustomField106    string        `json:"custom_field_106,omitempty"`
	CustomField107    string        `json:"custom_field_107,omitempty"`
	CustomField108    string        `json:"custom_field_108,omitempty"`
	CustomField109    string        `json:"custom_field_109,omitempty"`
	CustomField110    string        `json:"custom_field_110,omitempty"`
	CustomField111    string        `json:"custom_field_111,omitempty"`
	CustomField112    string        `json:"custom_field_112,omitempty"`
	CustomField113    string        `json:"custom_field_113,omitempty"`
	CustomField114    string        `json:"custom_field_114,omitempty"`
	CustomField115    string        `json:"custom_field_115,omitempty"`
	CustomField116    string        `json:"custom_field_116,omitempty"`
	CustomField117    string        `json:"custom_field_117,omitempty"`
	CustomField118    string        `json:"custom_field_118,omitempty"`
	CustomField119    string        `json:"custom_field_119,omitempty"`
	CustomField120    string        `json:"custom_field_120,omitempty"`
	CustomField121    string        `json:"custom_field_121,omitempty"`
	CustomField122    string        `json:"custom_field_122,omitempty"`
	CustomField123    string        `json:"custom_field_123,omitempty"`
	CustomField124    string        `json:"custom_field_124,omitempty"`
	CustomField125    string        `json:"custom_field_125,omitempty"`
	CustomField126    string        `json:"custom_field_126,omitempty"`
	CustomField127    string        `json:"custom_field_127,omitempty"`
	CustomField128    string        `json:"custom_field_128,omitempty"`
	CustomField129    string        `json:"custom_field_129,omitempty"`
	CustomField130    string        `json:"custom_field_130,omitempty"`
	CustomField131    string        `json:"custom_field_131,omitempty"`
	CustomField132    string        `json:"custom_field_132,omitempty"`
	CustomField133    string        `json:"custom_field_133,omitempty"`
	CustomField134    string        `json:"custom_field_134,omitempty"`
	CustomField135    string        `json:"custom_field_135,omitempty"`
	CustomField136    string        `json:"custom_field_136,omitempty"`
	CustomField137    string        `json:"custom_field_137,omitempty"`
	CustomField138    string        `json:"custom_field_138,omitempty"`
	CustomField139    string        `json:"custom_field_139,omitempty"`
	CustomField140    string        `json:"custom_field_140,omitempty"`
	CustomField141    string        `json:"custom_field_141,omitempty"`
	CustomField142    string        `json:"custom_field_142,omitempty"`
	CustomField143    string        `json:"custom_field_143,omitempty"`
	CustomField144    string        `json:"custom_field_144,omitempty"`
	CustomField145    string        `json:"custom_field_145,omitempty"`
	CustomField146    string        `json:"custom_field_146,omitempty"`
	CustomField147    string        `json:"custom_field_147,omitempty"`
	CustomField148    string        `json:"custom_field_148,omitempty"`
	CustomField149    string        `json:"custom_field_149,omitempty"`
	CustomField150    string        `json:"custom_field_150,omitempty"`
	CustomField151    string        `json:"custom_field_151,omitempty"`
	CustomField152    string        `json:"custom_field_152,omitempty"`
	CustomField153    string        `json:"custom_field_153,omitempty"`
	CustomField154    string        `json:"custom_field_154,omitempty"`
	CustomField155    string        `json:"custom_field_155,omitempty"`
	CustomField156    string        `json:"custom_field_156,omitempty"`
	CustomField157    string        `json:"custom_field_157,omitempty"`
	CustomField158    string        `json:"custom_field_158,omitempty"`
	CustomField159    string        `json:"custom_field_159,omitempty"`
	CustomField160    string        `json:"custom_field_160,omitempty"`
	CustomField161    string        `json:"custom_field_161,omitempty"`
	CustomField162    string        `json:"custom_field_162,omitempty"`
	CustomField163    string        `json:"custom_field_163,omitempty"`
	CustomField164    string        `json:"custom_field_164,omitempty"`
	CustomField165    string        `json:"custom_field_165,omitempty"`
	CustomField166    string        `json:"custom_field_166,omitempty"`
	CustomField167    string        `json:"custom_field_167,omitempty"`
	CustomField168    string        `json:"custom_field_168,omitempty"`
	CustomField169    string        `json:"custom_field_169,omitempty"`
	CustomField170    string        `json:"custom_field_170,omitempty"`
	CustomField171    string        `json:"custom_field_171,omitempty"`
	CustomField172    string        `json:"custom_field_172,omitempty"`
	CustomField173    string        `json:"custom_field_173,omitempty"`
	CustomField174    string        `json:"custom_field_174,omitempty"`
	CustomField175    string        `json:"custom_field_175,omitempty"`
	CustomField176    string        `json:"custom_field_176,omitempty"`
	CustomField177    string        `json:"custom_field_177,omitempty"`
	CustomField178    string        `json:"custom_field_178,omitempty"`
	CustomField179    string        `json:"custom_field_179,omitempty"`
	CustomField180    string        `json:"custom_field_180,omitempty"`
	CustomField181    string        `json:"custom_field_181,omitempty"`
	CustomField182    string        `json:"custom_field_182,omitempty"`
	CustomField183    string        `json:"custom_field_183,omitempty"`
	CustomField184    string        `json:"custom_field_184,omitempty"`
	CustomField185    string        `json:"custom_field_185,omitempty"`
	CustomField186    string        `json:"custom_field_186,omitempty"`
	CustomField187    string        `json:"custom_field_187,omitempty"`
	CustomField188    string        `json:"custom_field_188,omitempty"`
	CustomField189    string        `json:"custom_field_189,omitempty"`
	CustomField190    string        `json:"custom_field_190,omitempty"`
	CustomField191    string        `json:"custom_field_191,omitempty"`
	CustomField192    string        `json:"custom_field_192,omitempty"`
	CustomField193    string        `json:"custom_field_193,omitempty"`
	CustomField194    string        `json:"custom_field_194,omitempty"`
	CustomField195    string        `json:"custom_field_195,omitempty"`
	CustomField196    string        `json:"custom_field_196,omitempty"`
	CustomField197    string        `json:"custom_field_197,omitempty"`
	CustomField198    string        `json:"custom_field_198,omitempty"`
	CustomField199    string        `json:"custom_field_199,omitempty"`
	CustomField200    string        `json:"custom_field_200,omitempty"`
	CustomPlanField1  string        `json:"custom_plan_field_1,omitempty"`
	CustomPlanField2  string        `json:"custom_plan_field_2,omitempty"`
	CustomPlanField3  string        `json:"custom_plan_field_3,omitempty"`
	CustomPlanField4  string        `json:"custom_plan_field_4,omitempty"`
	CustomPlanField5  string        `json:"custom_plan_field_5,omitempty"`
	CustomPlanField6  string        `json:"custom_plan_field_6,omitempty"`
	CustomPlanField7  string        `json:"custom_plan_field_7,omitempty"`
	CustomPlanField8  string        `json:"custom_plan_field_8,omitempty"`
	CustomPlanField9  string        `json:"custom_plan_field_9,omitempty"`
	CustomPlanField10 string        `json:"custom_plan_field_10,omitempty"`
}

type StoryCategory

type StoryCategory struct {
	ID          string `json:"id,omitempty"`           // ID
	WorkspaceID string `json:"workspace_id,omitempty"` // 项目ID
	Name        string `json:"name,omitempty"`         // 需求分类名称
	Description string `json:"description,omitempty"`  // 需求分类描述
	ParentID    string `json:"parent_id,omitempty"`    // 父分类ID
	Created     string `json:"created,omitempty"`      // 创建时间
	Modified    string `json:"modified,omitempty"`     // 最后修改时间
	Creator     string `json:"creator,omitempty"`      // 创建人
	Modifier    string `json:"modifier,omitempty"`     // 最后修改人
}

type StoryChange

type StoryChange struct {
	ID             string          `json:"id,omitempty"`
	WorkspaceID    string          `json:"workspace_id,omitempty"`
	AppID          string          `json:"app_id,omitempty"`
	WorkitemTypeID string          `json:"workitem_type_id,omitempty"`
	Creator        string          `json:"creator,omitempty"`
	Created        string          `json:"created,omitempty"`
	ChangeSummary  string          `json:"change_summary,omitempty"`
	Comment        *string         `json:"comment,omitempty"`
	Changes        string          `json:"changes,omitempty"`
	EntityType     string          `json:"entity_type,omitempty"`
	ChangeType     StoreChangeType `json:"change_type,omitempty"`
	ChangeTypeText string          `json:"change_type_text,omitempty"`
	Updated        string          `json:"updated,omitempty"`
	FieldChanges   []struct {
		Field             string `json:"field,omitempty"`
		ValueBefore       any    `json:"value_before,omitempty"` // todo: any to string
		ValueAfter        any    `json:"value_after,omitempty"`  // todo: any to string
		ValueBeforeParsed string `json:"value_before_parsed,omitempty"`
		ValueAfterParsed  string `json:"value_after_parsed,omitempty"`
		FieldLabel        string `json:"field_label,omitempty"`
	} `json:"field_changes,omitempty"`
	StoryID string `json:"story_id,omitempty"`
}

type StoryCustomFieldsSetting

type StoryCustomFieldsSetting struct {
	ID              string  `json:"id,omitempty"`           // 自定义字段配置的ID
	WorkspaceID     string  `json:"workspace_id,omitempty"` // 所属项目ID
	AppID           string  `json:"app_id,omitempty"`
	EntryType       string  `json:"entry_type,omitempty"`   // 所属实体对象
	CustomField     string  `json:"custom_field,omitempty"` // 自定义字段标识(英文名)
	Type            string  `json:"type,omitempty"`         // 输入类型
	Name            string  `json:"name,omitempty"`         // 自定义字段显示名称
	Options         *string `json:"options,omitempty"`      // 自定义字段可选值
	ExtraConfig     *string `json:"extra_config,omitempty"` // 额外配置
	Enabled         string  `json:"enabled,omitempty"`      // 是否启用
	Freeze          string  `json:"freeze,omitempty"`
	Sort            *string `json:"sort,omitempty"` // 显示时排序系数
	Memo            *string `json:"memo,omitempty"`
	OpenExtensionID string  `json:"open_extension_id,omitempty"`
	IsOut           int     `json:"is_out,omitempty"`
	IsUninstall     int     `json:"is_uninstall,omitempty"`
	AppName         string  `json:"app_name,omitempty"`
}

type StoryRelatedBug

type StoryRelatedBug struct {
	WorkspaceID int    `json:"workspace_id,omitempty"`
	StoryID     string `json:"story_id,omitempty"`
	BugID       string `json:"bug_id,omitempty"`
}

type StoryService

type StoryService interface {
	// CreateStory 创建需求
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/add_story.html
	CreateStory(ctx context.Context, request *CreateStoryRequest, opts ...RequestOption) (*Story, *Response, error)

	// GetStories 获取需求
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_stories.html
	GetStories(ctx context.Context, request *GetStoriesRequest, opts ...RequestOption) ([]*Story, *Response, error)

	// GetStoriesCount 获取需求数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_stories_count.html
	GetStoriesCount(ctx context.Context, request *GetStoriesCountRequest, opts ...RequestOption) (int, *Response, error)

	// GetStoryCategories 获取需求分类
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_story_categories.html
	GetStoryCategories(ctx context.Context, request *GetStoryCategoriesRequest, opts ...RequestOption) ([]*StoryCategory, *Response, error)

	// GetStoryCategoriesCount 获取需求分类数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_story_categories_count.html
	GetStoryCategoriesCount(ctx context.Context, request *GetStoryCategoriesCountRequest, opts ...RequestOption) (int, *Response, error)

	// GetStoriesCountByCategories 获取指定分类下需求数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/count_by_categories.html
	GetStoriesCountByCategories(ctx context.Context, request *GetStoriesCountByCategoriesRequest, opts ...RequestOption) ([]*StoriesCountByCategory, *Response, error)

	// GetStoryChanges 获取需求变更历史
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_story_changes.html
	GetStoryChanges(ctx context.Context, request *GetStoryChangesRequest, opts ...RequestOption) ([]*StoryChange, *Response, error)

	// GetStoryCustomFieldsSettings 获取需求自定义字段配置
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_story_custom_fields_settings.html
	GetStoryCustomFieldsSettings(ctx context.Context, request *GetStoryCustomFieldsSettingsRequest, opts ...RequestOption) ([]*StoryCustomFieldsSetting, *Response, error)

	// UpdateStory 更新需求
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/update_story.html
	UpdateStory(ctx context.Context, request *UpdateStoryRequest, opts ...RequestOption) (*Story, *Response, error)

	// GetStoryTemplates 获取需求模板列表
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_story_template_list.html
	GetStoryTemplates(ctx context.Context, request *GetStoryTemplatesRequest, opts ...RequestOption) ([]*StoryTemplate, *Response, error)

	// GetStoryTemplateFields 获取需求模板字段
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_default_story_template.html
	GetStoryTemplateFields(ctx context.Context, request *GetStoryTemplateFieldsRequest, opts ...RequestOption) ([]*StoryTemplateField, *Response, error)

	// GetRemovedStories 获取回收站中的需求
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_removed_stories.html
	GetRemovedStories(ctx context.Context, request *GetRemovedStoriesRequest, opts ...RequestOption) ([]*RemovedStory, *Response, error)

	// GetStoryRelatedBugs 获取需求关联的缺陷
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_story_related_bugs.html
	GetStoryRelatedBugs(ctx context.Context, request *GetStoryRelatedBugsRequest, opts ...RequestOption) ([]*StoryRelatedBug, *Response, error)

	// GetConvertStoryIDsToQueryToken 转换需求ID成列表queryToken
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/story_ids_to_query_token.html
	GetConvertStoryIDsToQueryToken(ctx context.Context, request *GetConvertStoryIDsToQueryTokenRequest, opts ...RequestOption) (*GetConvertStoryIDsToQueryTokenResponse, *Response, error)
}

func NewStoryService added in v0.12.0

func NewStoryService(client *Client) StoryService

type StoryStatus

type StoryStatus string
const (
	StoryStatusAudited    StoryStatus = "audited"     // 已评审
	StoryStatusDeveloping StoryStatus = "developing"  // 开发中
	StoryStatusForTest    StoryStatus = "for_test"    // 待测试
	StoryStatusInProgress StoryStatus = "in_progress" // 处理中
	StoryStatusPlanning   StoryStatus = "planning"    // 规划中
	StoryStatusRejected   StoryStatus = "rejected"    // 已拒绝
	StoryStatusResolved   StoryStatus = "resolved"    // 已处理
	StoryStatusTesting    StoryStatus = "testing"     // 测试中
)

func (StoryStatus) String added in v0.12.0

func (s StoryStatus) String() string

type StoryTemplate

type StoryTemplate struct {
	ID          string `json:"id,omitempty"`          // 模板ID
	Name        string `json:"name,omitempty"`        // 标题
	Description string `json:"description,omitempty"` // 详细描述
	Sort        string `json:"sort,omitempty"`        // 排序
	Default     string `json:"default,omitempty"`     // 是否启用
	Creator     string `json:"creator,omitempty"`     // 提交人
	EditorType  string `json:"editor_type,omitempty"` // 编辑器类型
}

type StoryTemplateField

type StoryTemplateField struct {
	ID           string `json:"id,omitempty"`           // 模板字段ID
	WorkspaceID  string `json:"workspace_id,omitempty"` // 项目ID
	Type         string `json:"type,omitempty"`         // 类型
	TemplateID   string `json:"template_id,omitempty"`  // 模板ID
	Field        string `json:"field,omitempty"`        // 字段名称
	Value        string `json:"value,omitempty"`        // 默认值
	Required     string `json:"required,omitempty"`     // 是否必填
	Sort         string `json:"sort,omitempty"`         // 排序
	LinkageRules string `json:"linkage_rules,omitempty"`
}

type Task

type Task struct {
	ID                string        `json:"id,omitempty"`               // 任务ID
	Name              string        `json:"name,omitempty"`             // 任务标题
	Description       string        `json:"description,omitempty"`      // 任务详细描述
	WorkspaceID       string        `json:"workspace_id,omitempty"`     // 项目ID
	Creator           string        `json:"creator,omitempty"`          // 创建人
	Created           string        `json:"created,omitempty"`          // 创建时间
	Modified          string        `json:"modified,omitempty"`         // 最后修改时间
	Status            TaskStatus    `json:"status,omitempty"`           // 状态
	Owner             string        `json:"owner,omitempty"`            // 任务当前处理人
	CC                string        `json:"cc,omitempty"`               // 抄送人
	Begin             string        `json:"begin,omitempty"`            // 预计开始
	Due               string        `json:"due,omitempty"`              // 预计结束
	StoryID           string        `json:"story_id,omitempty"`         // 关联需求的ID
	IterationID       string        `json:"iteration_id,omitempty"`     // 所属迭代的ID
	Priority          string        `json:"priority,omitempty"`         // 优先级
	Progress          string        `json:"progress,omitempty"`         // 进度
	Completed         string        `json:"completed,omitempty"`        // 完成时间
	EffortCompleted   string        `json:"effort_completed,omitempty"` // 完成工时
	Exceed            string        `json:"exceed,omitempty"`           // 超出工时
	Remain            string        `json:"remain,omitempty"`           // 剩余工时
	Effort            string        `json:"effort,omitempty"`           // 预估工时
	HasAttachment     string        `json:"has_attachment,omitempty"`   // 是否有附件
	ReleaseID         string        `json:"release_id,omitempty"`       // 发布计划ID
	Label             string        `json:"label,omitempty"`            // 标签
	CustomFieldOne    string        `json:"custom_field_one,omitempty"` // 自定义字段
	CustomFieldTwo    string        `json:"custom_field_two,omitempty"`
	CustomFieldThree  string        `json:"custom_field_three,omitempty"`
	CustomFieldFour   string        `json:"custom_field_four,omitempty"`
	CustomFieldFive   string        `json:"custom_field_five,omitempty"`
	CustomFieldSix    string        `json:"custom_field_six,omitempty"`
	CustomFieldSeven  string        `json:"custom_field_seven,omitempty"`
	CustomFieldEight  string        `json:"custom_field_eight,omitempty"`
	CustomField9      string        `json:"custom_field_9,omitempty"`
	CustomField10     string        `json:"custom_field_10,omitempty"`
	CustomField11     string        `json:"custom_field_11,omitempty"`
	CustomField12     string        `json:"custom_field_12,omitempty"`
	CustomField13     string        `json:"custom_field_13,omitempty"`
	CustomField14     string        `json:"custom_field_14,omitempty"`
	CustomField15     string        `json:"custom_field_15,omitempty"`
	CustomField16     string        `json:"custom_field_16,omitempty"`
	CustomField17     string        `json:"custom_field_17,omitempty"`
	CustomField18     string        `json:"custom_field_18,omitempty"`
	CustomField19     string        `json:"custom_field_19,omitempty"`
	CustomField20     string        `json:"custom_field_20,omitempty"`
	CustomField21     string        `json:"custom_field_21,omitempty"`
	CustomField22     string        `json:"custom_field_22,omitempty"`
	CustomField23     string        `json:"custom_field_23,omitempty"`
	CustomField24     string        `json:"custom_field_24,omitempty"`
	CustomField25     string        `json:"custom_field_25,omitempty"`
	CustomField26     string        `json:"custom_field_26,omitempty"`
	CustomField27     string        `json:"custom_field_27,omitempty"`
	CustomField28     string        `json:"custom_field_28,omitempty"`
	CustomField29     string        `json:"custom_field_29,omitempty"`
	CustomField30     string        `json:"custom_field_30,omitempty"`
	CustomField31     string        `json:"custom_field_31,omitempty"`
	CustomField32     string        `json:"custom_field_32,omitempty"`
	CustomField33     string        `json:"custom_field_33,omitempty"`
	CustomField34     string        `json:"custom_field_34,omitempty"`
	CustomField35     string        `json:"custom_field_35,omitempty"`
	CustomField36     string        `json:"custom_field_36,omitempty"`
	CustomField37     string        `json:"custom_field_37,omitempty"`
	CustomField38     string        `json:"custom_field_38,omitempty"`
	CustomField39     string        `json:"custom_field_39,omitempty"`
	CustomField40     string        `json:"custom_field_40,omitempty"`
	CustomField41     string        `json:"custom_field_41,omitempty"`
	CustomField42     string        `json:"custom_field_42,omitempty"`
	CustomField43     string        `json:"custom_field_43,omitempty"`
	CustomField44     string        `json:"custom_field_44,omitempty"`
	CustomField45     string        `json:"custom_field_45,omitempty"`
	CustomField46     string        `json:"custom_field_46,omitempty"`
	CustomField47     string        `json:"custom_field_47,omitempty"`
	CustomField48     string        `json:"custom_field_48,omitempty"`
	CustomField49     string        `json:"custom_field_49,omitempty"`
	CustomField50     string        `json:"custom_field_50,omitempty"`
	CustomPlanField1  string        `json:"custom_plan_field_1,omitempty"`
	CustomPlanField2  string        `json:"custom_plan_field_2,omitempty"`
	CustomPlanField3  string        `json:"custom_plan_field_3,omitempty"`
	CustomPlanField4  string        `json:"custom_plan_field_4,omitempty"`
	CustomPlanField5  string        `json:"custom_plan_field_5,omitempty"`
	CustomPlanField6  string        `json:"custom_plan_field_6,omitempty"`
	CustomPlanField7  string        `json:"custom_plan_field_7,omitempty"`
	CustomPlanField8  string        `json:"custom_plan_field_8,omitempty"`
	CustomPlanField9  string        `json:"custom_plan_field_9,omitempty"`
	CustomPlanField10 string        `json:"custom_plan_field_10,omitempty"`
	PriorityLabel     PriorityLabel `json:"priority_label,omitempty"` // 优先级
}

Task 任务

type TaskChange

type TaskChange struct {
	ID             string                  `json:"id,omitempty"`
	WorkspaceID    string                  `json:"workspace_id,omitempty"`
	AppID          string                  `json:"app_id,omitempty"`
	WorkitemTypeID string                  `json:"workitem_type_id,omitempty"`
	Creator        string                  `json:"creator,omitempty"`
	Created        string                  `json:"created,omitempty"`
	ChangeSummary  string                  `json:"change_summary,omitempty"`
	Comment        string                  `json:"comment,omitempty"`
	Changes        string                  `json:"changes,omitempty"`
	EntityType     string                  `json:"entity_type,omitempty"`
	ChangeType     string                  `json:"change_type,omitempty"`
	ChangeTypeText string                  `json:"change_type_text,omitempty"`
	FieldChanges   []TaskChangeFieldChange `json:"field_changes,omitempty"`
	TaskID         string                  `json:"task_id,omitempty"`
}

type TaskChangeFieldChange

type TaskChangeFieldChange struct {
	Field             string `json:"field,omitempty"`
	ValueBefore       string `json:"value_before,omitempty"`
	ValueAfter        string `json:"value_after,omitempty"`
	ValueBeforeParsed string `json:"value_before_parsed,omitempty"`
	ValueAfterParsed  string `json:"value_after_parsed,omitempty"`
	FieldLabel        string `json:"field_label,omitempty"`
}

type TaskFieldsInfo

type TaskFieldsInfo struct {
	Name         string                      `json:"name,omitempty"`      // name
	HTMLType     TaskFieldsInfoHTMLType      `json:"html_type,omitempty"` // 类型
	Label        string                      `json:"label,omitempty"`     // 中文名称
	Options      []TaskFieldsInfoOption      `json:"options,omitempty"`   // 候选值
	ColorOptions []TaskFieldsInfoColorOption `json:"color_options,omitempty"`
	PureOptions  []TaskFieldsInfoPureOption  `json:"pure_options,omitempty"`
}

type TaskFieldsInfoColorOption

type TaskFieldsInfoColorOption struct {
	Value string `json:"value,omitempty"`
	Label string `json:"label,omitempty"`
	Color string `json:"color,omitempty"`
}

type TaskFieldsInfoHTMLType

type TaskFieldsInfoHTMLType string
const (
	TaskFieldsInfoHTMLTypeInput       TaskFieldsInfoHTMLType = "input"
	TaskFieldsInfoHTMLTypeSelect      TaskFieldsInfoHTMLType = "select"
	TaskFieldsInfoHTMLTypeRichEdit    TaskFieldsInfoHTMLType = "rich_edit"
	TaskFieldsInfoHTMLTypeUserChooser TaskFieldsInfoHTMLType = "user_chooser"
	TaskFieldsInfoHTMLTypeDatetime    TaskFieldsInfoHTMLType = "datetime"
	TaskFieldsInfoHTMLTypeFloat       TaskFieldsInfoHTMLType = "float"
	TaskFieldsInfoHTMLTypeMixChooser  TaskFieldsInfoHTMLType = "mix_chooser"
	TaskFieldsInfoHTMLTypeDateInput   TaskFieldsInfoHTMLType = "dateinput"
	TaskFieldsInfoHTMLTypeCheckbox    TaskFieldsInfoHTMLType = "checkbox"
	TaskFieldsInfoHTMLTypeMultiSelect TaskFieldsInfoHTMLType = "multi_select"
)

type TaskFieldsInfoOption

type TaskFieldsInfoOption struct {
	Value string `json:"key,omitempty"`   // 值
	Label string `json:"label,omitempty"` // 中文名称
}

type TaskFieldsInfoPureOption

type TaskFieldsInfoPureOption struct {
	ParentID    string `json:"parent_id,omitempty"`
	WorkspaceID string `json:"workspace_id,omitempty"`
	Sort        string `json:"sort,omitempty"`
	OriginName  string `json:"origin_name,omitempty"`
	Value       string `json:"value,omitempty"`
	Label       string `json:"label,omitempty"`
	Panel       int    `json:"panel,omitempty"`
}

type TaskService

TaskService 任务服务

func NewTaskService added in v0.12.0

func NewTaskService(client *Client) TaskService

type TaskStatus

type TaskStatus string

TaskStatus 任务状态

const (
	TaskStatusOpen        TaskStatus = "open"        // 未开始
	TaskStatusProgressing TaskStatus = "progressing" // 进行中
	TaskStatusDone        TaskStatus = "done"        // 已完成
)

func (TaskStatus) String added in v0.7.0

func (s TaskStatus) String() string

type Timesheet

type Timesheet struct {
	ID          string     `json:"id,omitempty"`           // id
	EntityType  EntityType `json:"entity_type,omitempty"`  // 对象类型,如story、task、bug等
	EntityID    string     `json:"entity_id,omitempty"`    // 对象ID
	Timespent   string     `json:"timespent,omitempty"`    // 花费工时
	Spentdate   string     `json:"spentdate,omitempty"`    // 花费日期
	Owner       string     `json:"owner,omitempty"`        // 花费创建人
	Created     string     `json:"created,omitempty"`      // 创建时间
	Modified    string     `json:"modified,omitempty"`     // 最后修改时间
	WorkspaceID string     `json:"workspace_id,omitempty"` // 项目ID
	Memo        string     `json:"memo,omitempty"`         // 花费描述
	IsDelete    string     `json:"is_delete,omitempty"`    // 是否已删除
}

type TimesheetService

func NewTimesheetService added in v0.12.0

func NewTimesheetService(client *Client) TimesheetService

type UpdateBugRequest added in v0.8.0

type UpdateBugRequest struct {
	ID                *int64             `json:"id,omitempty"`               // ID 支持多ID查询
	Title             *string            `json:"title,omitempty"`            // 标题 支持模糊匹配
	Priority          *string            `json:"priority,omitempty"`         // 优先级。为了兼容自定义优先级,请使用 priority_label 字段,详情参考:如何兼容自定义优先级
	PriorityLabel     *PriorityLabel     `json:"priority_label,omitempty"`   // 优先级。推荐使用这个字段
	Severity          *Enum[BugSeverity] `json:"severity,omitempty"`         // 严重程度 支持枚举查询
	Status            *Enum[string]      `json:"status,omitempty"`           // 状态 支持不等于查询、枚举查询
	VStatus           *string            `json:"v_status,omitempty"`         // 状态(支持传入中文状态名称)
	Label             *Enum[string]      `json:"label,omitempty"`            // 标签查询 支持枚举查询
	IterationID       *Enum[string]      `json:"iteration_id,omitempty"`     // 迭代 支持枚举查询
	Module            *Enum[string]      `json:"module,omitempty"`           // 模块 支持枚举查询
	ReleaseID         *int               `json:"release_id,omitempty"`       // 发布计划
	VersionReport     *Enum[string]      `json:"version_report,omitempty"`   // 发现版本 枚举查询
	VersionTest       *string            `json:"version_test,omitempty"`     // 验证版本
	VersionFix        *string            `json:"version_fix,omitempty"`      // 合入版本
	VersionClose      *string            `json:"version_close,omitempty"`    // 关闭版本
	BaselineFind      *string            `json:"baseline_find,omitempty"`    // 发现基线
	BaselineJoin      *string            `json:"baseline_join,omitempty"`    // 合入基线
	BaselineTest      *string            `json:"baseline_test,omitempty"`    // 验证基线
	BaselineClose     *string            `json:"baseline_close,omitempty"`   // 关闭基线
	Feature           *string            `json:"feature,omitempty"`          // 特性
	CurrentOwner      *string            `json:"current_owner,omitempty"`    // 处理人 支持模糊匹配
	CC                *string            `json:"cc,omitempty"`               // 抄送人
	Reporter          *Multi[string]     `json:"reporter,omitempty"`         // 创建人 支持多人员查询
	Participator      *Multi[string]     `json:"participator,omitempty"`     // 参与人 支持多人员查询
	TE                *string            `json:"te,omitempty"`               // 测试人员 支持模糊匹配
	DE                *string            `json:"de,omitempty"`               // 开发人员 支持模糊匹配
	Auditer           *string            `json:"auditer,omitempty"`          // 审核人
	Confirmer         *string            `json:"confirmer,omitempty"`        // 验证人
	Fixer             *string            `json:"fixer,omitempty"`            // 修复人
	Closer            *string            `json:"closer,omitempty"`           // 关闭人
	LastModify        *string            `json:"lastmodify,omitempty"`       // 最后修改人
	Created           *string            `json:"created,omitempty"`          // 创建时间 支持时间查询
	InProgressTime    *string            `json:"in_progress_time,omitempty"` // 接受处理时间 支持时间查询
	Resolved          *string            `json:"resolved,omitempty"`         // 解决时间 支持时间查询
	VerifyTime        *string            `json:"verify_time,omitempty"`      // 验证时间 支持时间查询
	Closed            *string            `json:"closed,omitempty"`           // 关闭时间 支持时间查询
	RejectTime        *string            `json:"reject_time,omitempty"`      // 拒绝时间 支持时间查询
	Modified          *string            `json:"modified,omitempty"`         // 最后修改时间 支持时间查询
	Begin             *string            `json:"begin,omitempty"`            // 预计开始
	Due               *string            `json:"due,omitempty"`              // 预计结束
	Deadline          *string            `json:"deadline,omitempty"`         // 解决期限
	OS                *string            `json:"os,omitempty"`               // 操作系统
	Platform          *string            `json:"platform,omitempty"`         // 软件平台
	TestMode          *string            `json:"testmode,omitempty"`         // 测试方式
	TestPhase         *string            `json:"testphase,omitempty"`        // 测试阶段
	TestType          *string            `json:"testtype,omitempty"`         // 测试类型
	Source            *Enum[string]      `json:"source,omitempty"`           // 缺陷根源 支持枚举查询
	BugType           *string            `json:"bugtype,omitempty"`          // 缺陷类型
	Frequency         *Enum[string]      `json:"frequency,omitempty"`        // 重现规律 支持枚举查询
	OriginPhase       *string            `json:"originphase,omitempty"`      // 发现阶段
	SourcePhase       *string            `json:"sourcephase,omitempty"`      // 引入阶段
	Resolution        *Enum[string]      `json:"resolution,omitempty"`       // 解决方法 支持枚举查询
	Estimate          *int               `json:"estimate,omitempty"`         // 预计解决时间
	Description       *string            `json:"description,omitempty"`      // 详细描述 支持模糊匹配
	WorkspaceID       *int               `json:"workspace_id,omitempty"`     // 项目ID
	CustomFieldOne    *string            `json:"custom_field_one,omitempty"` // 自定义字段参数,具体字段名通过接口 获取缺陷自定义字段配置 获取 支持枚举查询
	CustomFieldTwo    *string            `json:"custom_field_two,omitempty"`
	CustomFieldThree  *string            `json:"custom_field_three,omitempty"`
	CustomFieldFour   *string            `json:"custom_field_four,omitempty"`
	CustomFieldFive   *string            `json:"custom_field_five,omitempty"`
	CustomField6      *string            `json:"custom_field_6,omitempty"`
	CustomField7      *string            `json:"custom_field_7,omitempty"`
	CustomField8      *string            `json:"custom_field_8,omitempty"`
	CustomField9      *string            `json:"custom_field_9,omitempty"`
	CustomField10     *string            `json:"custom_field_10,omitempty"`
	CustomField11     *string            `json:"custom_field_11,omitempty"`
	CustomField12     *string            `json:"custom_field_12,omitempty"`
	CustomField13     *string            `json:"custom_field_13,omitempty"`
	CustomField14     *string            `json:"custom_field_14,omitempty"`
	CustomField15     *string            `json:"custom_field_15,omitempty"`
	CustomField16     *string            `json:"custom_field_16,omitempty"`
	CustomField17     *string            `json:"custom_field_17,omitempty"`
	CustomField18     *string            `json:"custom_field_18,omitempty"`
	CustomField19     *string            `json:"custom_field_19,omitempty"`
	CustomField20     *string            `json:"custom_field_20,omitempty"`
	CustomField21     *string            `json:"custom_field_21,omitempty"`
	CustomField22     *string            `json:"custom_field_22,omitempty"`
	CustomField23     *string            `json:"custom_field_23,omitempty"`
	CustomField24     *string            `json:"custom_field_24,omitempty"`
	CustomField25     *string            `json:"custom_field_25,omitempty"`
	CustomField26     *string            `json:"custom_field_26,omitempty"`
	CustomField27     *string            `json:"custom_field_27,omitempty"`
	CustomField28     *string            `json:"custom_field_28,omitempty"`
	CustomField29     *string            `json:"custom_field_29,omitempty"`
	CustomField30     *string            `json:"custom_field_30,omitempty"`
	CustomField31     *string            `json:"custom_field_31,omitempty"`
	CustomField32     *string            `json:"custom_field_32,omitempty"`
	CustomField33     *string            `json:"custom_field_33,omitempty"`
	CustomField34     *string            `json:"custom_field_34,omitempty"`
	CustomField35     *string            `json:"custom_field_35,omitempty"`
	CustomField36     *string            `json:"custom_field_36,omitempty"`
	CustomField37     *string            `json:"custom_field_37,omitempty"`
	CustomField38     *string            `json:"custom_field_38,omitempty"`
	CustomField39     *string            `json:"custom_field_39,omitempty"`
	CustomField40     *string            `json:"custom_field_40,omitempty"`
	CustomField41     *string            `json:"custom_field_41,omitempty"`
	CustomField42     *string            `json:"custom_field_42,omitempty"`
	CustomField43     *string            `json:"custom_field_43,omitempty"`
	CustomField44     *string            `json:"custom_field_44,omitempty"`
	CustomField45     *string            `json:"custom_field_45,omitempty"`
	CustomField46     *string            `json:"custom_field_46,omitempty"`
	CustomField47     *string            `json:"custom_field_47,omitempty"`
	CustomField48     *string            `json:"custom_field_48,omitempty"`
	CustomField49     *string            `json:"custom_field_49,omitempty"`
	CustomField50     *string            `json:"custom_field_50,omitempty"`
	CustomField51     *string            `json:"custom_field_51,omitempty"`
	CustomField52     *string            `json:"custom_field_52,omitempty"`
	CustomField53     *string            `json:"custom_field_53,omitempty"`
	CustomField54     *string            `json:"custom_field_54,omitempty"`
	CustomField55     *string            `json:"custom_field_55,omitempty"`
	CustomField56     *string            `json:"custom_field_56,omitempty"`
	CustomField57     *string            `json:"custom_field_57,omitempty"`
	CustomField58     *string            `json:"custom_field_58,omitempty"`
	CustomField59     *string            `json:"custom_field_59,omitempty"`
	CustomField60     *string            `json:"custom_field_60,omitempty"`
	CustomField61     *string            `json:"custom_field_61,omitempty"`
	CustomField62     *string            `json:"custom_field_62,omitempty"`
	CustomField63     *string            `json:"custom_field_63,omitempty"`
	CustomField64     *string            `json:"custom_field_64,omitempty"`
	CustomField65     *string            `json:"custom_field_65,omitempty"`
	CustomField66     *string            `json:"custom_field_66,omitempty"`
	CustomField67     *string            `json:"custom_field_67,omitempty"`
	CustomField68     *string            `json:"custom_field_68,omitempty"`
	CustomField69     *string            `json:"custom_field_69,omitempty"`
	CustomField70     *string            `json:"custom_field_70,omitempty"`
	CustomField71     *string            `json:"custom_field_71,omitempty"`
	CustomField72     *string            `json:"custom_field_72,omitempty"`
	CustomField73     *string            `json:"custom_field_73,omitempty"`
	CustomField74     *string            `json:"custom_field_74,omitempty"`
	CustomField75     *string            `json:"custom_field_75,omitempty"`
	CustomField76     *string            `json:"custom_field_76,omitempty"`
	CustomField77     *string            `json:"custom_field_77,omitempty"`
	CustomField78     *string            `json:"custom_field_78,omitempty"`
	CustomField79     *string            `json:"custom_field_79,omitempty"`
	CustomField80     *string            `json:"custom_field_80,omitempty"`
	CustomField81     *string            `json:"custom_field_81,omitempty"`
	CustomField82     *string            `json:"custom_field_82,omitempty"`
	CustomField83     *string            `json:"custom_field_83,omitempty"`
	CustomField84     *string            `json:"custom_field_84,omitempty"`
	CustomField85     *string            `json:"custom_field_85,omitempty"`
	CustomField86     *string            `json:"custom_field_86,omitempty"`
	CustomField87     *string            `json:"custom_field_87,omitempty"`
	CustomField88     *string            `json:"custom_field_88,omitempty"`
	CustomField89     *string            `json:"custom_field_89,omitempty"`
	CustomField90     *string            `json:"custom_field_90,omitempty"`
	CustomField91     *string            `json:"custom_field_91,omitempty"`
	CustomField92     *string            `json:"custom_field_92,omitempty"`
	CustomField93     *string            `json:"custom_field_93,omitempty"`
	CustomField94     *string            `json:"custom_field_94,omitempty"`
	CustomField95     *string            `json:"custom_field_95,omitempty"`
	CustomField96     *string            `json:"custom_field_96,omitempty"`
	CustomField97     *string            `json:"custom_field_97,omitempty"`
	CustomField98     *string            `json:"custom_field_98,omitempty"`
	CustomField99     *string            `json:"custom_field_99,omitempty"`
	CustomField100    *string            `json:"custom_field_100,omitempty"`
	CustomField101    *string            `json:"custom_field_101,omitempty"`
	CustomField102    *string            `json:"custom_field_102,omitempty"`
	CustomField103    *string            `json:"custom_field_103,omitempty"`
	CustomField104    *string            `json:"custom_field_104,omitempty"`
	CustomField105    *string            `json:"custom_field_105,omitempty"`
	CustomField106    *string            `json:"custom_field_106,omitempty"`
	CustomField107    *string            `json:"custom_field_107,omitempty"`
	CustomField108    *string            `json:"custom_field_108,omitempty"`
	CustomField109    *string            `json:"custom_field_109,omitempty"`
	CustomField110    *string            `json:"custom_field_110,omitempty"`
	CustomField111    *string            `json:"custom_field_111,omitempty"`
	CustomField112    *string            `json:"custom_field_112,omitempty"`
	CustomField113    *string            `json:"custom_field_113,omitempty"`
	CustomField114    *string            `json:"custom_field_114,omitempty"`
	CustomField115    *string            `json:"custom_field_115,omitempty"`
	CustomField116    *string            `json:"custom_field_116,omitempty"`
	CustomField117    *string            `json:"custom_field_117,omitempty"`
	CustomField118    *string            `json:"custom_field_118,omitempty"`
	CustomField119    *string            `json:"custom_field_119,omitempty"`
	CustomField120    *string            `json:"custom_field_120,omitempty"`
	CustomField121    *string            `json:"custom_field_121,omitempty"`
	CustomField122    *string            `json:"custom_field_122,omitempty"`
	CustomField123    *string            `json:"custom_field_123,omitempty"`
	CustomField124    *string            `json:"custom_field_124,omitempty"`
	CustomField125    *string            `json:"custom_field_125,omitempty"`
	CustomField126    *string            `json:"custom_field_126,omitempty"`
	CustomField127    *string            `json:"custom_field_127,omitempty"`
	CustomField128    *string            `json:"custom_field_128,omitempty"`
	CustomField129    *string            `json:"custom_field_129,omitempty"`
	CustomField130    *string            `json:"custom_field_130,omitempty"`
	CustomField131    *string            `json:"custom_field_131,omitempty"`
	CustomField132    *string            `json:"custom_field_132,omitempty"`
	CustomField133    *string            `json:"custom_field_133,omitempty"`
	CustomField134    *string            `json:"custom_field_134,omitempty"`
	CustomField135    *string            `json:"custom_field_135,omitempty"`
	CustomField136    *string            `json:"custom_field_136,omitempty"`
	CustomField137    *string            `json:"custom_field_137,omitempty"`
	CustomField138    *string            `json:"custom_field_138,omitempty"`
	CustomField139    *string            `json:"custom_field_139,omitempty"`
	CustomField140    *string            `json:"custom_field_140,omitempty"`
	CustomField141    *string            `json:"custom_field_141,omitempty"`
	CustomField142    *string            `json:"custom_field_142,omitempty"`
	CustomField143    *string            `json:"custom_field_143,omitempty"`
	CustomField144    *string            `json:"custom_field_144,omitempty"`
	CustomField145    *string            `json:"custom_field_145,omitempty"`
	CustomField146    *string            `json:"custom_field_146,omitempty"`
	CustomField147    *string            `json:"custom_field_147,omitempty"`
	CustomField148    *string            `json:"custom_field_148,omitempty"`
	CustomField149    *string            `json:"custom_field_149,omitempty"`
	CustomField150    *string            `json:"custom_field_150,omitempty"`
	CustomPlanField1  *string            `json:"custom_plan_field_1,omitempty"` // 自定义计划应用参数,具体字段名通过接口 获取自定义计划应用 获取
	CustomPlanField2  *string            `json:"custom_plan_field_2,omitempty"`
	CustomPlanField3  *string            `json:"custom_plan_field_3,omitempty"`
	CustomPlanField4  *string            `json:"custom_plan_field_4,omitempty"`
	CustomPlanField5  *string            `json:"custom_plan_field_5,omitempty"`
	CustomPlanField6  *string            `json:"custom_plan_field_6,omitempty"`
	CustomPlanField7  *string            `json:"custom_plan_field_7,omitempty"`
	CustomPlanField8  *string            `json:"custom_plan_field_8,omitempty"`
	CustomPlanField9  *string            `json:"custom_plan_field_9,omitempty"`
	CustomPlanField10 *string            `json:"custom_plan_field_10,omitempty"`
}

type UpdateCommentRequest

type UpdateCommentRequest struct {
	WorkspaceID   *int    `json:"workspace_id,omitempty"`   // [必须]项目ID
	ID            *int64  `json:"id,omitempty"`             // [必须]评论ID
	Description   *string `json:"description,omitempty"`    // [必须]内容
	ChangeCreator *string `json:"change_creator,omitempty"` // 变更人
}

type UpdateIterationRequest added in v0.7.0

type UpdateIterationRequest struct {
	ID            *int64        `json:"id,omitempty"`              // [必须] ID
	WorkspaceID   *int          `json:"workspace_id,omitempty"`    // [必须] 项目 ID
	CurrentUser   *string       `json:"current_user,omitempty"`    // [必须]变更人
	Name          *string       `json:"name,omitempty"`            // 标题 支持模糊匹配
	Description   *string       `json:"description,omitempty"`     // 详细描述
	StartDate     *string       `json:"startdate,omitempty"`       // 开始时间 支持时间查询
	EndDate       *string       `json:"enddate,omitempty"`         // 结束时间 支持时间查询
	Creator       *string       `json:"creator,omitempty"`         // 创建人
	Status        *string       `json:"status,omitempty"`          // 状态(系统状态 open/done,自定义状态可传中文)
	Label         *Enum[string] `json:"label,omitempty"`           // 标签, 可传多个
	CustomField1  *string       `json:"custom_field_1,omitempty"`  // 自定义字段参数
	CustomField2  *string       `json:"custom_field_2,omitempty"`  // 自定义字段参数
	CustomField3  *string       `json:"custom_field_3,omitempty"`  // 自定义字段参数
	CustomField4  *string       `json:"custom_field_4,omitempty"`  // 自定义字段参数
	CustomField5  *string       `json:"custom_field_5,omitempty"`  // 自定义字段参数
	CustomField6  *string       `json:"custom_field_6,omitempty"`  // 自定义字段参数
	CustomField7  *string       `json:"custom_field_7,omitempty"`  // 自定义字段参数
	CustomField8  *string       `json:"custom_field_8,omitempty"`  // 自定义字段参数
	CustomField9  *string       `json:"custom_field_9,omitempty"`  // 自定义字段参数
	CustomField10 *string       `json:"custom_field_10,omitempty"` // 自定义字段参数
	CustomField11 *string       `json:"custom_field_11,omitempty"` // 自定义字段参数
	CustomField12 *string       `json:"custom_field_12,omitempty"` // 自定义字段参数
	CustomField13 *string       `json:"custom_field_13,omitempty"` // 自定义字段参数
	CustomField14 *string       `json:"custom_field_14,omitempty"` // 自定义字段参数
	CustomField15 *string       `json:"custom_field_15,omitempty"` // 自定义字段参数
	CustomField16 *string       `json:"custom_field_16,omitempty"` // 自定义字段参数
	CustomField17 *string       `json:"custom_field_17,omitempty"` // 自定义字段参数
	CustomField18 *string       `json:"custom_field_18,omitempty"` // 自定义字段参数
	CustomField19 *string       `json:"custom_field_19,omitempty"` // 自定义字段参数
	CustomField20 *string       `json:"custom_field_20,omitempty"` // 自定义字段参数
	CustomField21 *string       `json:"custom_field_21,omitempty"` // 自定义字段参数
	CustomField22 *string       `json:"custom_field_22,omitempty"` // 自定义字段参数
	CustomField23 *string       `json:"custom_field_23,omitempty"` // 自定义字段参数
	CustomField24 *string       `json:"custom_field_24,omitempty"` // 自定义字段参数
	CustomField25 *string       `json:"custom_field_25,omitempty"` // 自定义字段参数
	CustomField26 *string       `json:"custom_field_26,omitempty"` // 自定义字段参数
	CustomField27 *string       `json:"custom_field_27,omitempty"` // 自定义字段参数
	CustomField28 *string       `json:"custom_field_28,omitempty"` // 自定义字段参数
	CustomField29 *string       `json:"custom_field_29,omitempty"` // 自定义字段参数
	CustomField30 *string       `json:"custom_field_30,omitempty"` // 自定义字段参数
	CustomField31 *string       `json:"custom_field_31,omitempty"` // 自定义字段参数
	CustomField32 *string       `json:"custom_field_32,omitempty"` // 自定义字段参数
	CustomField33 *string       `json:"custom_field_33,omitempty"` // 自定义字段参数
	CustomField34 *string       `json:"custom_field_34,omitempty"` // 自定义字段参数
	CustomField35 *string       `json:"custom_field_35,omitempty"` // 自定义字段参数
	CustomField36 *string       `json:"custom_field_36,omitempty"` // 自定义字段参数
	CustomField37 *string       `json:"custom_field_37,omitempty"` // 自定义字段参数
	CustomField38 *string       `json:"custom_field_38,omitempty"` // 自定义字段参数
	CustomField39 *string       `json:"custom_field_39,omitempty"` // 自定义字段参数
	CustomField40 *string       `json:"custom_field_40,omitempty"` // 自定义字段参数
	CustomField41 *string       `json:"custom_field_41,omitempty"` // 自定义字段参数
	CustomField42 *string       `json:"custom_field_42,omitempty"` // 自定义字段参数
	CustomField43 *string       `json:"custom_field_43,omitempty"` // 自定义字段参数
	CustomField44 *string       `json:"custom_field_44,omitempty"` // 自定义字段参数
	CustomField45 *string       `json:"custom_field_45,omitempty"` // 自定义字段参数
	CustomField46 *string       `json:"custom_field_46,omitempty"` // 自定义字段参数
	CustomField47 *string       `json:"custom_field_47,omitempty"` // 自定义字段参数
	CustomField48 *string       `json:"custom_field_48,omitempty"` // 自定义字段参数
	CustomField49 *string       `json:"custom_field_49,omitempty"` // 自定义字段参数
	CustomField50 *string       `json:"custom_field_50,omitempty"` // 自定义字段参数
}

type UpdateLabelRequest

type UpdateLabelRequest struct {
	ID          *int        `json:"id"`           // [必选]ID
	WorkspaceID *int        `json:"workspace_id"` // [必选]项目ID
	Color       *LabelColor `json:"color"`        // 标签颜色
	Modifier    *string     `json:"modifier"`     // 更新人
}

type UpdateStoryRequest

type UpdateStoryRequest struct {
	ID                *int64         `json:"id"`                           // 必须
	WorkspaceID       *int           `json:"workspace_id"`                 // 必须
	Name              *string        `json:"name,omitempty"`               // 标题
	Priority          *string        `json:"priority,omitempty"`           // 优先级。
	PriorityLabel     *PriorityLabel `json:"priority_label,omitempty"`     // 优先级。推荐使用这个字段
	BusinessValue     *int           `json:"business_value,omitempty"`     // 业务价值
	Status            *string        `json:"status,omitempty"`             // 状态
	VStatus           *string        `json:"v_status,omitempty"`           // 中文状态名称
	Version           *string        `json:"version,omitempty"`            // 版本
	Module            *string        `json:"module,omitempty"`             // 模块
	TestFocus         *string        `json:"test_focus,omitempty"`         // 测试重点
	Size              *int           `json:"size,omitempty"`               // 规模
	Owner             *string        `json:"owner,omitempty"`              // 处理人
	CurrentUser       *string        `json:"current_user,omitempty"`       // 变更人
	CC                *string        `json:"cc,omitempty"`                 // 抄送人
	Developer         *string        `json:"developer,omitempty"`          // 开发人员
	Begin             *string        `json:"begin,omitempty"`              // 预计开始
	Due               *string        `json:"due,omitempty"`                // 预计结束
	IterationID       *string        `json:"iteration_id,omitempty"`       // 迭代ID
	Effort            *string        `json:"effort,omitempty"`             // 预估工时
	EffortCompleted   *string        `json:"effort_completed,omitempty"`   // 完成工时
	Remain            *float64       `json:"remain,omitempty"`             // 剩余工时
	Exceed            *float64       `json:"exceed,omitempty"`             // 超出工时
	CategoryID        *int64         `json:"category_id,omitempty"`        // 需求分类ID
	ReleaseID         *int           `json:"release_id,omitempty"`         // 发布计划ID
	Source            *string        `json:"source,omitempty"`             // 来源
	Type              *string        `json:"type,omitempty"`               // 类型
	Description       *string        `json:"description,omitempty"`        // 详细描述
	IsAutoCloseTask   *int           `json:"is_auto_close_task,omitempty"` // 自动关闭关联任务
	Label             *string        `json:"label,omitempty"`              // 标签
	CustomFieldOne    *string        `json:"custom_field_one,omitempty"`
	CustomFieldTwo    *string        `json:"custom_field_two,omitempty"`
	CustomFieldThree  *string        `json:"custom_field_three,omitempty"`
	CustomFieldFour   *string        `json:"custom_field_four,omitempty"`
	CustomFieldFive   *string        `json:"custom_field_five,omitempty"`
	CustomFieldSix    *string        `json:"custom_field_six,omitempty"`
	CustomFieldSeven  *string        `json:"custom_field_seven,omitempty"`
	CustomFieldEight  *string        `json:"custom_field_eight,omitempty"`
	CustomField9      *string        `json:"custom_field_9,omitempty"`
	CustomField10     *string        `json:"custom_field_10,omitempty"`
	CustomField11     *string        `json:"custom_field_11,omitempty"`
	CustomField12     *string        `json:"custom_field_12,omitempty"`
	CustomField13     *string        `json:"custom_field_13,omitempty"`
	CustomField14     *string        `json:"custom_field_14,omitempty"`
	CustomField15     *string        `json:"custom_field_15,omitempty"`
	CustomField16     *string        `json:"custom_field_16,omitempty"`
	CustomField17     *string        `json:"custom_field_17,omitempty"`
	CustomField18     *string        `json:"custom_field_18,omitempty"`
	CustomField19     *string        `json:"custom_field_19,omitempty"`
	CustomField20     *string        `json:"custom_field_20,omitempty"`
	CustomField21     *string        `json:"custom_field_21,omitempty"`
	CustomField22     *string        `json:"custom_field_22,omitempty"`
	CustomField23     *string        `json:"custom_field_23,omitempty"`
	CustomField24     *string        `json:"custom_field_24,omitempty"`
	CustomField25     *string        `json:"custom_field_25,omitempty"`
	CustomField26     *string        `json:"custom_field_26,omitempty"`
	CustomField27     *string        `json:"custom_field_27,omitempty"`
	CustomField28     *string        `json:"custom_field_28,omitempty"`
	CustomField29     *string        `json:"custom_field_29,omitempty"`
	CustomField30     *string        `json:"custom_field_30,omitempty"`
	CustomField31     *string        `json:"custom_field_31,omitempty"`
	CustomField32     *string        `json:"custom_field_32,omitempty"`
	CustomField33     *string        `json:"custom_field_33,omitempty"`
	CustomField34     *string        `json:"custom_field_34,omitempty"`
	CustomField35     *string        `json:"custom_field_35,omitempty"`
	CustomField36     *string        `json:"custom_field_36,omitempty"`
	CustomField37     *string        `json:"custom_field_37,omitempty"`
	CustomField38     *string        `json:"custom_field_38,omitempty"`
	CustomField39     *string        `json:"custom_field_39,omitempty"`
	CustomField40     *string        `json:"custom_field_40,omitempty"`
	CustomField41     *string        `json:"custom_field_41,omitempty"`
	CustomField42     *string        `json:"custom_field_42,omitempty"`
	CustomField43     *string        `json:"custom_field_43,omitempty"`
	CustomField44     *string        `json:"custom_field_44,omitempty"`
	CustomField45     *string        `json:"custom_field_45,omitempty"`
	CustomField46     *string        `json:"custom_field_46,omitempty"`
	CustomField47     *string        `json:"custom_field_47,omitempty"`
	CustomField48     *string        `json:"custom_field_48,omitempty"`
	CustomField49     *string        `json:"custom_field_49,omitempty"`
	CustomField50     *string        `json:"custom_field_50,omitempty"`
	CustomField51     *string        `json:"custom_field_51,omitempty"`
	CustomField52     *string        `json:"custom_field_52,omitempty"`
	CustomField53     *string        `json:"custom_field_53,omitempty"`
	CustomField54     *string        `json:"custom_field_54,omitempty"`
	CustomField55     *string        `json:"custom_field_55,omitempty"`
	CustomField56     *string        `json:"custom_field_56,omitempty"`
	CustomField57     *string        `json:"custom_field_57,omitempty"`
	CustomField58     *string        `json:"custom_field_58,omitempty"`
	CustomField59     *string        `json:"custom_field_59,omitempty"`
	CustomField60     *string        `json:"custom_field_60,omitempty"`
	CustomField61     *string        `json:"custom_field_61,omitempty"`
	CustomField62     *string        `json:"custom_field_62,omitempty"`
	CustomField63     *string        `json:"custom_field_63,omitempty"`
	CustomField64     *string        `json:"custom_field_64,omitempty"`
	CustomField65     *string        `json:"custom_field_65,omitempty"`
	CustomField66     *string        `json:"custom_field_66,omitempty"`
	CustomField67     *string        `json:"custom_field_67,omitempty"`
	CustomField68     *string        `json:"custom_field_68,omitempty"`
	CustomField69     *string        `json:"custom_field_69,omitempty"`
	CustomField70     *string        `json:"custom_field_70,omitempty"`
	CustomField71     *string        `json:"custom_field_71,omitempty"`
	CustomField72     *string        `json:"custom_field_72,omitempty"`
	CustomField73     *string        `json:"custom_field_73,omitempty"`
	CustomField74     *string        `json:"custom_field_74,omitempty"`
	CustomField75     *string        `json:"custom_field_75,omitempty"`
	CustomField76     *string        `json:"custom_field_76,omitempty"`
	CustomField77     *string        `json:"custom_field_77,omitempty"`
	CustomField78     *string        `json:"custom_field_78,omitempty"`
	CustomField79     *string        `json:"custom_field_79,omitempty"`
	CustomField80     *string        `json:"custom_field_80,omitempty"`
	CustomField81     *string        `json:"custom_field_81,omitempty"`
	CustomField82     *string        `json:"custom_field_82,omitempty"`
	CustomField83     *string        `json:"custom_field_83,omitempty"`
	CustomField84     *string        `json:"custom_field_84,omitempty"`
	CustomField85     *string        `json:"custom_field_85,omitempty"`
	CustomField86     *string        `json:"custom_field_86,omitempty"`
	CustomField87     *string        `json:"custom_field_87,omitempty"`
	CustomField88     *string        `json:"custom_field_88,omitempty"`
	CustomField89     *string        `json:"custom_field_89,omitempty"`
	CustomField90     *string        `json:"custom_field_90,omitempty"`
	CustomField91     *string        `json:"custom_field_91,omitempty"`
	CustomField92     *string        `json:"custom_field_92,omitempty"`
	CustomField93     *string        `json:"custom_field_93,omitempty"`
	CustomField94     *string        `json:"custom_field_94,omitempty"`
	CustomField95     *string        `json:"custom_field_95,omitempty"`
	CustomField96     *string        `json:"custom_field_96,omitempty"`
	CustomField97     *string        `json:"custom_field_97,omitempty"`
	CustomField98     *string        `json:"custom_field_98,omitempty"`
	CustomField99     *string        `json:"custom_field_99,omitempty"`
	CustomField100    *string        `json:"custom_field_100,omitempty"`
	CustomField101    *string        `json:"custom_field_101,omitempty"`
	CustomField102    *string        `json:"custom_field_102,omitempty"`
	CustomField103    *string        `json:"custom_field_103,omitempty"`
	CustomField104    *string        `json:"custom_field_104,omitempty"`
	CustomField105    *string        `json:"custom_field_105,omitempty"`
	CustomField106    *string        `json:"custom_field_106,omitempty"`
	CustomField107    *string        `json:"custom_field_107,omitempty"`
	CustomField108    *string        `json:"custom_field_108,omitempty"`
	CustomField109    *string        `json:"custom_field_109,omitempty"`
	CustomField110    *string        `json:"custom_field_110,omitempty"`
	CustomField111    *string        `json:"custom_field_111,omitempty"`
	CustomField112    *string        `json:"custom_field_112,omitempty"`
	CustomField113    *string        `json:"custom_field_113,omitempty"`
	CustomField114    *string        `json:"custom_field_114,omitempty"`
	CustomField115    *string        `json:"custom_field_115,omitempty"`
	CustomField116    *string        `json:"custom_field_116,omitempty"`
	CustomField117    *string        `json:"custom_field_117,omitempty"`
	CustomField118    *string        `json:"custom_field_118,omitempty"`
	CustomField119    *string        `json:"custom_field_119,omitempty"`
	CustomField120    *string        `json:"custom_field_120,omitempty"`
	CustomField121    *string        `json:"custom_field_121,omitempty"`
	CustomField122    *string        `json:"custom_field_122,omitempty"`
	CustomField123    *string        `json:"custom_field_123,omitempty"`
	CustomField124    *string        `json:"custom_field_124,omitempty"`
	CustomField125    *string        `json:"custom_field_125,omitempty"`
	CustomField126    *string        `json:"custom_field_126,omitempty"`
	CustomField127    *string        `json:"custom_field_127,omitempty"`
	CustomField128    *string        `json:"custom_field_128,omitempty"`
	CustomField129    *string        `json:"custom_field_129,omitempty"`
	CustomField130    *string        `json:"custom_field_130,omitempty"`
	CustomField131    *string        `json:"custom_field_131,omitempty"`
	CustomField132    *string        `json:"custom_field_132,omitempty"`
	CustomField133    *string        `json:"custom_field_133,omitempty"`
	CustomField134    *string        `json:"custom_field_134,omitempty"`
	CustomField135    *string        `json:"custom_field_135,omitempty"`
	CustomField136    *string        `json:"custom_field_136,omitempty"`
	CustomField137    *string        `json:"custom_field_137,omitempty"`
	CustomField138    *string        `json:"custom_field_138,omitempty"`
	CustomField139    *string        `json:"custom_field_139,omitempty"`
	CustomField140    *string        `json:"custom_field_140,omitempty"`
	CustomField141    *string        `json:"custom_field_141,omitempty"`
	CustomField142    *string        `json:"custom_field_142,omitempty"`
	CustomField143    *string        `json:"custom_field_143,omitempty"`
	CustomField144    *string        `json:"custom_field_144,omitempty"`
	CustomField145    *string        `json:"custom_field_145,omitempty"`
	CustomField146    *string        `json:"custom_field_146,omitempty"`
	CustomField147    *string        `json:"custom_field_147,omitempty"`
	CustomField148    *string        `json:"custom_field_148,omitempty"`
	CustomField149    *string        `json:"custom_field_149,omitempty"`
	CustomField150    *string        `json:"custom_field_150,omitempty"`
	CustomField151    *string        `json:"custom_field_151,omitempty"`
	CustomField152    *string        `json:"custom_field_152,omitempty"`
	CustomField153    *string        `json:"custom_field_153,omitempty"`
	CustomField154    *string        `json:"custom_field_154,omitempty"`
	CustomField155    *string        `json:"custom_field_155,omitempty"`
	CustomField156    *string        `json:"custom_field_156,omitempty"`
	CustomField157    *string        `json:"custom_field_157,omitempty"`
	CustomField158    *string        `json:"custom_field_158,omitempty"`
	CustomField159    *string        `json:"custom_field_159,omitempty"`
	CustomField160    *string        `json:"custom_field_160,omitempty"`
	CustomField161    *string        `json:"custom_field_161,omitempty"`
	CustomField162    *string        `json:"custom_field_162,omitempty"`
	CustomField163    *string        `json:"custom_field_163,omitempty"`
	CustomField164    *string        `json:"custom_field_164,omitempty"`
	CustomField165    *string        `json:"custom_field_165,omitempty"`
	CustomField166    *string        `json:"custom_field_166,omitempty"`
	CustomField167    *string        `json:"custom_field_167,omitempty"`
	CustomField168    *string        `json:"custom_field_168,omitempty"`
	CustomField169    *string        `json:"custom_field_169,omitempty"`
	CustomField170    *string        `json:"custom_field_170,omitempty"`
	CustomField171    *string        `json:"custom_field_171,omitempty"`
	CustomField172    *string        `json:"custom_field_172,omitempty"`
	CustomField173    *string        `json:"custom_field_173,omitempty"`
	CustomField174    *string        `json:"custom_field_174,omitempty"`
	CustomField175    *string        `json:"custom_field_175,omitempty"`
	CustomField176    *string        `json:"custom_field_176,omitempty"`
	CustomField177    *string        `json:"custom_field_177,omitempty"`
	CustomField178    *string        `json:"custom_field_178,omitempty"`
	CustomField179    *string        `json:"custom_field_179,omitempty"`
	CustomField180    *string        `json:"custom_field_180,omitempty"`
	CustomField181    *string        `json:"custom_field_181,omitempty"`
	CustomField182    *string        `json:"custom_field_182,omitempty"`
	CustomField183    *string        `json:"custom_field_183,omitempty"`
	CustomField184    *string        `json:"custom_field_184,omitempty"`
	CustomField185    *string        `json:"custom_field_185,omitempty"`
	CustomField186    *string        `json:"custom_field_186,omitempty"`
	CustomField187    *string        `json:"custom_field_187,omitempty"`
	CustomField188    *string        `json:"custom_field_188,omitempty"`
	CustomField189    *string        `json:"custom_field_189,omitempty"`
	CustomField190    *string        `json:"custom_field_190,omitempty"`
	CustomField191    *string        `json:"custom_field_191,omitempty"`
	CustomField192    *string        `json:"custom_field_192,omitempty"`
	CustomField193    *string        `json:"custom_field_193,omitempty"`
	CustomField194    *string        `json:"custom_field_194,omitempty"`
	CustomField195    *string        `json:"custom_field_195,omitempty"`
	CustomField196    *string        `json:"custom_field_196,omitempty"`
	CustomField197    *string        `json:"custom_field_197,omitempty"`
	CustomField198    *string        `json:"custom_field_198,omitempty"`
	CustomField199    *string        `json:"custom_field_199,omitempty"`
	CustomField200    *string        `json:"custom_field_200,omitempty"`
	CustomPlanField1  *string        `json:"custom_plan_field_1,omitempty"`
	CustomPlanField2  *string        `json:"custom_plan_field_2,omitempty"`
	CustomPlanField3  *string        `json:"custom_plan_field_3,omitempty"`
	CustomPlanField4  *string        `json:"custom_plan_field_4,omitempty"`
	CustomPlanField5  *string        `json:"custom_plan_field_5,omitempty"`
	CustomPlanField6  *string        `json:"custom_plan_field_6,omitempty"`
	CustomPlanField7  *string        `json:"custom_plan_field_7,omitempty"`
	CustomPlanField8  *string        `json:"custom_plan_field_8,omitempty"`
	CustomPlanField9  *string        `json:"custom_plan_field_9,omitempty"`
	CustomPlanField10 *string        `json:"custom_plan_field_10,omitempty"`
}

type UpdateTimesheetRequest

type UpdateTimesheetRequest struct {
	ID          *int64  `json:"id"`                     // [必须]工时花费ID
	Timespent   *string `json:"timespent,omitempty"`    // [可选]花费工时
	Timeremain  *string `json:"timeremain,omitempty"`   // [可选]剩余工时
	WorkspaceID *int    `json:"workspace_id,omitempty"` // [必须]项目ID
	Memo        *string `json:"memo,omitempty"`         // [可选]花费描述
}

type User added in v0.12.0

type User struct {
	User             string   `json:"user"`
	RoleID           []string `json:"role_id"`
	Name             string   `json:"name"`
	JoinProjectTime  *string  `json:"join_project_time"`
	RealJoinTime     string   `json:"real_join_time"`
	Status           string   `json:"status"`
	Allocation       string   `json:"allocation"`
	LeaveProjectTime *string  `json:"leave_project_time"`
}

type UserRole

type UserRole struct {
	ID   string `json:"id"`
	Name string `json:"name"`
}

type UserService

type UserService interface {
	// GetRoles 获取角色ID对照关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/user/get_roles.html
	GetRoles(ctx context.Context, request *GetRolesRequest, opts ...RequestOption) ([]*UserRole, *Response, error)
}

func NewUserService added in v0.12.0

func NewUserService(client *Client) UserService

type WorkflowAllLastStep added in v0.7.0

type WorkflowAllLastStep struct {
	Key    string                       `json:"key,omitempty"`    // 工作流ID 或者 需求类别ID , 根据group_key确定
	Status []*WorkflowAllLastStepStatus `json:"status,omitempty"` // 状态列表
}

type WorkflowAllLastStepStatus added in v0.7.0

type WorkflowAllLastStepStatus struct {
	Alias string `json:"alias,omitempty"` // 状态别名
	Name  string `json:"name,omitempty"`  // 状态名称
}

type WorkflowService added in v0.7.0

type WorkflowService interface {

	// GetAllLastSteps 获取所有结束状态
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workflow/get_workflow_all_last_steps.html
	GetAllLastSteps(ctx context.Context, request *GetAllLastStepsRequest, opts ...RequestOption) ([]*WorkflowAllLastStep, *Response, error)
}

WorkflowService 工作流

func NewWorkflowService added in v0.12.0

func NewWorkflowService(client *Client) WorkflowService

type WorkitemTemplate added in v0.6.0

type WorkitemTemplate struct {
	ID          string `json:"id"`
	WorkspaceID string `json:"workspace_id"`
	Type        string `json:"type"`
	Name        string `json:"name"`
	Creator     string `json:"creator"`
	Created     string `json:"created"`
	Modified    string `json:"modified"`
}

type WorkitemType added in v0.6.0

type WorkitemType struct {
	ID          string `json:"id"`
	WorkspaceID string `json:"workspace_id"`
	EntityType  string `json:"entity_type"`
	Name        string `json:"name"`
	Creator     string `json:"creator"`
	Created     string `json:"created"`
	Modified    string `json:"modified"`
}

type WorkspaceService

type WorkspaceService interface {

	// GetUsers 获取指定项目成员
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/users.html
	GetUsers(
		ctx context.Context, request *GetUsersRequest, opts ...RequestOption,
	) ([]*User, *Response, error)

	// GetMemberActivityLog 获取成员活动日志
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/member_activity_log.html
	GetMemberActivityLog(
		ctx context.Context, request *GetMemberActivityLogRequest, opts ...RequestOption,
	) (*GetMemberActivityLogResponse, *Response, error)
}

func NewWorkspaceService added in v0.12.0

func NewWorkspaceService(client *Client) WorkspaceService

Directories

Path Synopsis
mcp module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL