tapd

package module
v0.17.1 Latest Latest
Warning

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

Go to latest
Published: May 30, 2026 License: MIT Imports: 15 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.

🧰 Command Line Tool

[!NOTE] 🧰 Prefer terminal or CI usage? Try the sibling project go-tapd/cli, a command line tool built on this SDK.

⚙️ Use the CLI for quick local operations, shell scripts, and automation. See the repository for installation and usage examples.

📥 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 AddCodeCommitInfoRequest added in v0.17.0

type AddCodeCommitInfoRequest struct {
	WorkspaceID *int      `json:"workspace_id,omitempty"` // [必须]项目ID
	CommitID    *string   `json:"commit_id,omitempty"`    // [必须]提交ID
	Author      *string   `json:"author,omitempty"`       // [必须]代码提交人
	Message     *string   `json:"message,omitempty"`      // [必须]提交信息
	Files       *[]string `json:"files,omitempty"`        // [必须]变更文件
	Repo        *string   `json:"repo,omitempty"`         // [必须]仓库名
	RepoID      *string   `json:"repo_id,omitempty"`      // [必须]仓库ID
	CommitTime  *string   `json:"commit_time,omitempty"`  // [必须]提交时间
	GitEnv      *string   `json:"git_env,omitempty"`      // 信息来源,github、gitlab、svn、p4 等
	RepoURL     *string   `json:"repo_url,omitempty"`     // 仓库链接
	CommitURL   *string   `json:"commit_url,omitempty"`   // 提交链接
}

type AddWorkspaceMemberRequest added in v0.17.0

type AddWorkspaceMemberRequest struct {
	WorkspaceID *int          `json:"workspace_id,omitempty"` // [必须]项目ID
	Nick        *string       `json:"nick,omitempty"`         // [必须]用户英文昵称
	CompanyID   *int          `json:"company_id,omitempty"`   // 成员所在公司ID,云端必填
	RoleIDs     *Multi[int64] `json:"role_ids,omitempty"`     // 角色组,多个使用逗号分隔
}

type AddWorkspaceMemberResponse added in v0.17.0

type AddWorkspaceMemberResponse struct {
	Success bool `json:"success,omitempty"` // 是否添加成功
}

type AssignTestCaseRequest added in v0.17.0

type AssignTestCaseRequest struct {
	TestPlanID  *int64        `json:"test_plan_id,omitempty"` // [必须]测试计划ID
	TestCaseID  *Multi[int64] `json:"tcase_id,omitempty"`     // 用例ID,多个使用英文逗号分隔
	CategoryID  *int64        `json:"category_id,omitempty"`  // 用例目录ID
	WorkspaceID *int          `json:"workspace_id,omitempty"` // [必须]项目ID
	Executor    *string       `json:"executor,omitempty"`     // 执行人
	Assignee    *string       `json:"assignee,omitempty"`     // 负责人
}

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 附件

func (*Attachment) UnmarshalJSON added in v0.17.1

func (a *Attachment) UnmarshalJSON(data []byte) error

type AttachmentService

type AttachmentService interface {
	// UploadAttachment 附件上传
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/mini_api_reference/attachment/upload_attachment.html
	UploadAttachment(ctx context.Context, request *UploadAttachmentRequest, opts ...RequestOption) (*Attachment, *Response, error)

	// UploadImageBase64 上传base64图片
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/mini_api_reference/attachment/upload_image_base64.html
	UploadImageBase64(ctx context.Context, request *UploadImageBase64Request, opts ...RequestOption) (*Attachment, *Response, error)

	// GetAttachments 获取附件
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/attachment/get_attachments.html
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/mini_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
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/mini_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 BatchCreateTestCasesRequest added in v0.17.0

type BatchCreateTestCasesRequest []*CreateTestCaseRequest

type BatchUpdateBugsRequest added in v0.17.0

type BatchUpdateBugsRequest struct {
	ProjectID *int                `json:"project_id,omitempty"` // [必须]项目ID
	Workitems []*UpdateBugRequest `json:"workitems,omitempty"`  // [必须]批量更新的缺陷,每次最多50条
}

type BatchUpdateBugsResponse added in v0.17.0

type BatchUpdateBugsResponse struct {
	Msg string `json:"msg,omitempty"` // 更新结果提示
}

type BatchUpdateStoriesRequest added in v0.17.0

type BatchUpdateStoriesRequest struct {
	WorkspaceID *int                  `json:"workspace_id,omitempty"` // [必须]项目ID
	Workitems   []*UpdateStoryRequest `json:"workitems,omitempty"`    // [必须]批量更新的需求,每次最多50条
}

type BatchUpdateStoriesResponse added in v0.17.0

type BatchUpdateStoriesResponse struct {
	Msg string `json:"msg,omitempty"` // 更新结果提示
}

type BatchUpdateStorySecretInfoRequest added in v0.17.0

type BatchUpdateStorySecretInfoRequest struct {
	WorkspaceID          *int         `json:"workspace_id,omitempty"`           // [必须]项目ID
	StoryIDList          *Enum[int64] `json:"story_id_list,omitempty"`          // [必须]需求ID列表,多个用|分隔
	SecretScope          *string      `json:"secret_scope,omitempty"`           // [必须]保密范围,public 为公开,secret 为保密
	AllowList            *string      `json:"allow_list,omitempty"`             // [必须]保密白名单,成员 nick 或用户组ID用;分隔
	AddParticipantFields *string      `json:"add_participant_fields,omitempty"` // [必须]保密范围是否纳入参与人,true 或 false
	OperationType        *int         `json:"operation_type,omitempty"`         // 操作类型,0覆盖,1新增,2删除
	CurrentUser          *string      `json:"current_user,omitempty"`           // [必须]操作人 nick
}

type BatchUpdateStorySecretInfoResult added in v0.17.0

type BatchUpdateStorySecretInfoResult struct {
	Code string `json:"code,omitempty"` // 结果码
	Msg  string `json:"msg,omitempty"`  // 结果提示
}

type BatchUpdateTasksRequest added in v0.17.0

type BatchUpdateTasksRequest struct {
	WorkspaceID *int                 `json:"workspace_id,omitempty"` // [必须]项目ID
	Workitems   []*UpdateTaskRequest `json:"workitems,omitempty"`    // [必须]批量更新的任务
}

type BatchUpdateTasksResponse added in v0.17.0

type BatchUpdateTasksResponse struct {
	Msg string `json:"msg,omitempty"` // 更新结果提示
}

type BoardCard added in v0.17.0

type BoardCard struct {
	ID          string  `json:"id,omitempty"`           // 工作项ID
	Name        string  `json:"name,omitempty"`         // 工作项标题
	Description *string `json:"description,omitempty"`  // 详细描述
	Created     string  `json:"created,omitempty"`      // 创建时间
	Modified    string  `json:"modified,omitempty"`     // 最后修改时间
	WorkspaceID string  `json:"workspace_id,omitempty"` // 项目ID
	Owner       *string `json:"owner,omitempty"`        // 负责人
	Due         *string `json:"due,omitempty"`          // 截止时间
	Label       string  `json:"b_label,omitempty"`      // 标签ID
	Sort        string  `json:"b_sort,omitempty"`       // 排序
	BoardID     string  `json:"b_board_id,omitempty"`   // 看板ID
	ColumnID    string  `json:"b_column_id,omitempty"`  // 板块ID
	Status      string  `json:"status,omitempty"`       // 状态
	CC          *string `json:"cc,omitempty"`           // 参与人
	Begin       *string `json:"begin,omitempty"`        // 开始时间
}

BoardCard 看板工作项

type BoardColumn added in v0.17.0

type BoardColumn struct {
	ID          string `json:"id,omitempty"`           // 板块ID
	Name        string `json:"name,omitempty"`         // 板块名称
	BoardID     string `json:"board_id,omitempty"`     // 看板ID
	Status      string `json:"status,omitempty"`       // 状态
	Sort        string `json:"sort,omitempty"`         // 排序
	Created     string `json:"created,omitempty"`      // 创建时间
	Creator     string `json:"creator,omitempty"`      // 创建人
	WorkspaceID string `json:"workspace_id,omitempty"` // 项目ID
}

BoardColumn 看板板块

type BoardService added in v0.17.0

BoardService 看板服务。

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

func NewBoardService added in v0.17.0

func NewBoardService(client *Client) BoardService

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 BugChange added in v0.17.0

type BugChange struct {
	ID          string  `json:"id,omitempty"`           // 变更记录ID
	BugID       string  `json:"bug_id,omitempty"`       // 缺陷ID
	Author      string  `json:"author,omitempty"`       // 变更人
	Field       string  `json:"field,omitempty"`        // 变更字段
	OldValue    string  `json:"old_value,omitempty"`    // 变更前
	NewValue    string  `json:"new_value,omitempty"`    // 变更后
	Memo        *string `json:"memo,omitempty"`         // 备注
	Created     string  `json:"created,omitempty"`      // 创建时间
	WorkspaceID string  `json:"workspace_id,omitempty"` // 项目ID
}

type BugCustomFieldsSetting added in v0.17.0

type BugCustomFieldsSetting struct {
	ID              string  `json:"id,omitempty"`           // 自定义字段配置的ID
	WorkspaceID     string  `json:"workspace_id,omitempty"` // 所属项目ID
	AppID           string  `json:"app_id,omitempty"`       // 应用ID
	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 BugFieldLabel added in v0.17.0

type BugFieldLabel struct {
	EN string `json:"en,omitempty"` // 字段英文名
	CN string `json:"cn,omitempty"` // 字段中文标签
}

type BugFieldsInfo added in v0.17.0

type BugFieldsInfo struct {
	Name         string                     `json:"name,omitempty"`          // 字段名
	HTMLType     BugFieldsInfoHTMLType      `json:"html_type,omitempty"`     // 类型
	Label        string                     `json:"label,omitempty"`         // 中文名称
	Memo         string                     `json:"memo,omitempty"`          // 备注
	Options      []BugFieldsInfoOption      `json:"options,omitempty"`       // 候选值
	ColorOptions []BugFieldsInfoColorOption `json:"color_options,omitempty"` // 带颜色的候选值
	PureOptions  []BugFieldsInfoPureOption  `json:"pure_options,omitempty"`  // 原始候选值
}

type BugFieldsInfoColorOption added in v0.17.0

type BugFieldsInfoColorOption struct {
	Value string `json:"value,omitempty"` // 值
	Label string `json:"label,omitempty"` // 中文名称
	Color string `json:"color,omitempty"` // 颜色
}

type BugFieldsInfoHTMLType added in v0.17.0

type BugFieldsInfoHTMLType string

BugFieldsInfoHTMLType 缺陷字段控件类型。

const (
	BugFieldsInfoHTMLTypeInput       BugFieldsInfoHTMLType = "input"
	BugFieldsInfoHTMLTypeSelect      BugFieldsInfoHTMLType = "select"
	BugFieldsInfoHTMLTypeRichEdit    BugFieldsInfoHTMLType = "rich_edit"
	BugFieldsInfoHTMLTypeUserChooser BugFieldsInfoHTMLType = "user_chooser"
	BugFieldsInfoHTMLTypeDatetime    BugFieldsInfoHTMLType = "datetime"
	BugFieldsInfoHTMLTypeFloat       BugFieldsInfoHTMLType = "float"
	BugFieldsInfoHTMLTypeMixChooser  BugFieldsInfoHTMLType = "mix_chooser"
	BugFieldsInfoHTMLTypeDateInput   BugFieldsInfoHTMLType = "dateinput"
	BugFieldsInfoHTMLTypeCheckbox    BugFieldsInfoHTMLType = "checkbox"
	BugFieldsInfoHTMLTypeMultiSelect BugFieldsInfoHTMLType = "multi_select"
)

type BugFieldsInfoOption added in v0.17.0

type BugFieldsInfoOption struct {
	Key   string `json:"key,omitempty"`   // 英文Key
	Label string `json:"label,omitempty"` // 中文名称
}

type BugFieldsInfoPureOption added in v0.17.0

type BugFieldsInfoPureOption struct {
	ParentID    string `json:"parent_id,omitempty"`    // 父选项ID
	WorkspaceID string `json:"workspace_id,omitempty"` // 项目ID
	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 BugLinkRelation added in v0.17.0

type BugLinkRelation struct {
	Type              string `json:"type,omitempty"`                // 关系类型
	ID                string `json:"id,omitempty"`                  // 关联的缺陷ID
	WorkspaceID       string `json:"workspace_id,omitempty"`        // 项目ID
	ActAs             string `json:"actas,omitempty"`               // 角色
	LinkedWorkspaceID int    `json:"linked_workspace_id,omitempty"` // 关联项目ID
	LinkID            string `json:"link_id,omitempty"`             // 缺陷之间关联关系link的ID
}

type BugRelatedStory added in v0.17.0

type BugRelatedStory struct {
	WorkspaceID string `json:"workspace_id,omitempty"` // 项目ID,官方响应为字符串
	BugID       string `json:"bug_id,omitempty"`       // 缺陷ID
	StoryID     string `json:"story_id,omitempty"`     // 需求ID
}

type BugService

type BugService interface {
	// CreateBug 创建缺陷
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/add_bug.html
	CreateBug(ctx context.Context, request *CreateBugRequest, opts ...RequestOption) (*Bug, *Response, error)

	// CopyBug 复制缺陷
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/copy_bug.html
	CopyBug(ctx context.Context, request *CopyBugRequest, opts ...RequestOption) (*Bug, *Response, error)

	// GetBugChanges 获取缺陷变更历史
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/get_bug_changes.html
	GetBugChanges(ctx context.Context, request *GetBugChangesRequest, opts ...RequestOption) ([]*BugChange, *Response, error)

	// GetBugChangesCount 获取缺陷变更次数
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/get_bug_changes_count.html
	GetBugChangesCount(ctx context.Context, request *GetBugChangesCountRequest, opts ...RequestOption) (int, *Response, error)

	// GetBugCustomFieldsSettings 获取缺陷自定义字段配置
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/get_bug_custom_fields_settings.html
	GetBugCustomFieldsSettings(
		ctx context.Context, request *GetBugCustomFieldsSettingsRequest, opts ...RequestOption,
	) ([]*BugCustomFieldsSetting, *Response, error)

	// GetBugs 获取缺陷
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/get_bugs.html
	GetBugs(ctx context.Context, request *GetBugsRequest, opts ...RequestOption) ([]*Bug, *Response, error)

	// GetBugsCount 获取缺陷数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/get_bugs_count.html
	GetBugsCount(ctx context.Context, request *GetBugsCountRequest, opts ...RequestOption) (int, *Response, error)

	// GetBugLinkBugs 获取缺陷与其它缺陷的所有关联关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/get_link_bugs.html
	GetBugLinkBugs(ctx context.Context, request *GetBugLinkBugsRequest, opts ...RequestOption) ([]*BugLinkRelation, *Response, error)

	// GetBugTemplates 获取缺陷模板列表
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/get_bug_template_list.html
	GetBugTemplates(ctx context.Context, request *GetBugTemplatesRequest, opts ...RequestOption) ([]*BugTemplate, *Response, error)

	// GetBugTemplateFields 获取缺陷模板字段
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/get_default_bug_template.html
	GetBugTemplateFields(ctx context.Context, request *GetBugTemplateFieldsRequest, opts ...RequestOption) ([]*BugTemplateField, *Response, error)

	// GetBugsByViewConfID 获取视图对应的缺陷列表
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/get_bugs_by_view_conf_id.html
	GetBugsByViewConfID(ctx context.Context, request *GetBugsByViewConfIDRequest, opts ...RequestOption) ([]*Bug, *Response, error)

	// GetBugFieldsInfo 获取缺陷所有字段及候选值
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/get_bug_fields_info.html
	GetBugFieldsInfo(ctx context.Context, request *GetBugFieldsInfoRequest, opts ...RequestOption) ([]*BugFieldsInfo, *Response, error)

	// GetBugFieldsLabel 获取缺陷所有字段的中英文
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/get_bug_fields_lable.html
	GetBugFieldsLabel(ctx context.Context, request *GetBugFieldsLabelRequest, opts ...RequestOption) ([]*BugFieldLabel, *Response, error)

	// UpdateBug 更新缺陷
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/update_bug.html
	UpdateBug(ctx context.Context, request *UpdateBugRequest, opts ...RequestOption) (*Bug, *Response, error)

	// UpdateBugSystemSelectFieldOptions 更新系统字段
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/update_system_select_field_options.html
	UpdateBugSystemSelectFieldOptions(
		ctx context.Context, request *UpdateBugSystemSelectFieldOptionsRequest, opts ...RequestOption,
	) (bool, *Response, error)

	// BatchUpdateBugs 批量更新缺陷
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/batch_update_bug.html
	BatchUpdateBugs(ctx context.Context, request *BatchUpdateBugsRequest, opts ...RequestOption) (*BatchUpdateBugsResponse, *Response, error)

	// GetRemovedBugs 获取回收站下的缺陷
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/get_removed_bugs.html
	GetRemovedBugs(ctx context.Context, request *GetRemovedBugsRequest, opts ...RequestOption) ([]*RemovedBug, *Response, error)

	// GetBugRelatedStories 获取缺陷关联的需求ID
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/get_related_stories.html
	GetBugRelatedStories(ctx context.Context, request *GetBugRelatedStoriesRequest, opts ...RequestOption) ([]*BugRelatedStory, *Response, error)

	// LinkBugs 关联缺陷
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/link_bugs.html
	LinkBugs(ctx context.Context, request *LinkBugsRequest, opts ...RequestOption) (bool, *Response, error)

	// DeleteLinkBugs 取消关联缺陷
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/delete_link_bugs.html
	DeleteLinkBugs(ctx context.Context, request *DeleteLinkBugsRequest, opts ...RequestOption) (bool, *Response, error)

	// GetConvertBugIDsToQueryToken 转换缺陷ID成列表queryToken
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/bug/bug_ids_to_query_token.html
	GetConvertBugIDsToQueryToken(
		ctx context.Context, request *GetConvertBugIDsToQueryTokenRequest, opts ...RequestOption,
	) (*GetConvertBugIDsToQueryTokenResponse, *Response, error)
}

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 BugSystemSelectFieldOption added in v0.17.0

type BugSystemSelectFieldOption struct {
	Value *string `json:"value,omitempty"` // 选项对应 value
}

type BugTemplate added in v0.17.0

type BugTemplate 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 BugTemplateField added in v0.17.0

type BugTemplateField 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 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
	TestService       TestService
	BoardService      BoardService
	WikiService       WikiService
	ReleaseService    ReleaseService
	SourceService     SourceService
	// 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 CodeCommitInfo added in v0.17.0

type CodeCommitInfo struct {
	ID              string                   `json:"id,omitempty"`                // 记录ID
	HookUserName    string                   `json:"hook_user_name,omitempty"`    // 代码提交人
	CommitID        string                   `json:"commit_id,omitempty"`         // 提交ID
	UserName        string                   `json:"user_name,omitempty"`         // 关联用户
	UserID          string                   `json:"user_id,omitempty"`           // 关联用户ID
	WorkspaceID     StringNumber             `json:"workspace_id,omitempty"`      // 项目ID
	Message         string                   `json:"message,omitempty"`           // 提交信息
	Path            string                   `json:"path,omitempty"`              // 提交地址
	WebURL          string                   `json:"web_url,omitempty"`           // 仓库地址
	HookProjectName string                   `json:"hook_project_name,omitempty"` // 仓库名
	CommitTime      string                   `json:"commit_time,omitempty"`       // 提交时间
	Created         string                   `json:"created,omitempty"`           // 创建时间
	Ref             string                   `json:"ref,omitempty"`               // 分支引用
	RefStatus       string                   `json:"ref_status,omitempty"`        // 分支状态
	GitEnv          string                   `json:"git_env,omitempty"`           // 信息来源
	FileCommit      string                   `json:"file_commit,omitempty"`       // 变更文件
	RepoID          string                   `json:"repo_id,omitempty"`           // 仓库ID
	BranchID        string                   `json:"branch_id,omitempty"`         // 分支ID
	FileSort        map[string]int           `json:"file_sort,omitempty"`         // 文件排序
	Related         []*CodeCommitInfoRelated `json:"related,omitempty"`           // 关联结果
}

type CodeCommitInfoRelated added in v0.17.0

type CodeCommitInfoRelated struct {
	Type        EntityType   `json:"type,omitempty"`         // 业务对象类型
	ObjectID    string       `json:"object_id,omitempty"`    // 业务对象ID
	CommitID    string       `json:"commit_id,omitempty"`    // 提交记录ID
	WorkspaceID StringNumber `json:"workspace_id,omitempty"` // 项目ID
	Code        string       `json:"code,omitempty"`         // 关联结果代码
}

type CodeCommitRelatedType added in v0.17.0

type CodeCommitRelatedType string

CodeCommitRelatedType 源码提交关联类型。

const (
	CodeCommitRelatedTypeAll        CodeCommitRelatedType = "all"
	CodeCommitRelatedTypeBranch     CodeCommitRelatedType = "branch"
	CodeCommitRelatedTypeSourceCode CodeCommitRelatedType = "source_code"
)

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 CommitObject added in v0.17.0

type CommitObject struct {
	Story *Story `json:"Story,omitempty"` // 关联需求
	Bug   *Bug   `json:"Bug,omitempty"`   // 关联缺陷
	Task  *Task  `json:"Task,omitempty"`  // 关联任务
}

type CopyBugRequest added in v0.17.0

type CopyBugRequest struct {
	WorkspaceID    *int           `json:"workspace_id,omitempty"`     // [必须]源项目ID
	SourceBugID    *int64         `json:"src_bug_id,omitempty"`       // [必须]源缺陷ID
	DstWorkspaceID *int           `json:"dst_workspace_id,omitempty"` // [必须]目标项目ID
	SyncFields     *Multi[string] `json:"sync_fields,omitempty"`      // 需要同步的字段,多个字段以逗号分隔
}

type CopyStoryRequest added in v0.17.0

type CopyStoryRequest struct {
	WorkspaceID       *int           `json:"workspace_id,omitempty"`         // [必须]源项目ID
	SrcStoryID        *int64         `json:"src_story_id,omitempty"`         // [必须]源需求ID
	DstWorkspaceID    *int           `json:"dst_workspace_id,omitempty"`     // [必须]目标项目ID
	SyncFields        *Multi[string] `json:"sync_fields,omitempty"`          // 需要同步的字段,多个字段以逗号分隔
	DstWorkitemTypeID *int64         `json:"dst_workitem_type_id,omitempty"` // 目标需求类别ID
	NewCreator        *string        `json:"new_creator,omitempty"`          // 新需求创建人
	NewStatus         *StoryStatus   `json:"new_status,omitempty"`           // 新需求状态
}

type CountResponse

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

CountResponse represents the response of count.

type CreateBoardCardRequest added in v0.17.0

type CreateBoardCardRequest struct {
	WorkspaceID *int    `json:"workspace_id,omitempty"` // [必须]项目ID
	BoardID     *int64  `json:"b_board_id,omitempty"`   // [必须]看板ID
	ColumnID    *int64  `json:"b_column_id,omitempty"`  // [必须]板块ID
	Name        *string `json:"name,omitempty"`         // [必须]工作项标题
	Owner       *string `json:"owner,omitempty"`        // 负责人
	CC          *string `json:"cc,omitempty"`           // 参与人
	Status      *string `json:"status,omitempty"`       // 状态
	Begin       *string `json:"begin,omitempty"`        // 开始时间
	Due         *string `json:"due,omitempty"`          // 截止时间
	Label       *int64  `json:"b_label,omitempty"`      // 标签ID
	Description *string `json:"description,omitempty"`  // 详细描述
}

type CreateBugRequest added in v0.17.0

type CreateBugRequest struct {
	WorkspaceID   *int           `json:"workspace_id,omitempty"`   // [必须]项目ID
	Title         *string        `json:"title,omitempty"`          // [必须]缺陷标题
	Description   *string        `json:"description,omitempty"`    // 详细描述
	Priority      *string        `json:"priority,omitempty"`       // 优先级。为了兼容自定义优先级,请使用 priority_label 字段
	PriorityLabel *PriorityLabel `json:"priority_label,omitempty"` // 优先级。推荐使用这个字段
	Severity      *BugSeverity   `json:"severity,omitempty"`       // 严重程度
	Module        *string        `json:"module,omitempty"`         // 模块
	CurrentOwner  *string        `json:"current_owner,omitempty"`  // 处理人
	CC            *string        `json:"cc,omitempty"`             // 抄送人
	Reporter      *string        `json:"reporter,omitempty"`       // 创建人
	TE            *string        `json:"te,omitempty"`             // 测试人员
	DE            *string        `json:"de,omitempty"`             // 开发人员
	VersionReport *string        `json:"version_report,omitempty"` // 发现版本
	IterationID   *int64         `json:"iteration_id,omitempty"`   // 迭代ID
	ReleaseID     *int64         `json:"release_id,omitempty"`     // 发布计划
	Source        *string        `json:"source,omitempty"`         // 缺陷根源
	BugType       *string        `json:"bugtype,omitempty"`        // 缺陷类型
	Label         *string        `json:"label,omitempty"`          // 标签,多个以英文竖线分隔
	Deadline      *string        `json:"deadline,omitempty"`       // 解决期限
}

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 CreateLaunchAccessoryRequest added in v0.17.0

type CreateLaunchAccessoryRequest struct {
	WorkspaceID *int    `json:"workspace_id,omitempty"` // [必须]项目ID
	FormID      *int64  `json:"form_id,omitempty"`      // [必须]发布评审ID
	Type        *string `json:"type,omitempty"`         // [必须]类型,仅支持 launch_url
	Content     *string `json:"content,omitempty"`      // [必须]url 地址
}

type CreateLaunchFormRequest added in v0.17.0

type CreateLaunchFormRequest struct {
	WorkspaceID    *int    `json:"workspace_id,omitempty"`    // [必须]项目ID
	Creator        *string `json:"creator,omitempty"`         // [必须]创建人
	TemplateID     *string `json:"template_id,omitempty"`     // [必须]模板ID
	Title          *string `json:"title,omitempty"`           // 标题
	VersionType    *string `json:"version_type,omitempty"`    // 版本类型
	Baseline       *string `json:"baseline,omitempty"`        // 基线
	ReleaseModel   *string `json:"release_model,omitempty"`   // 发布模块
	RoadmapVersion *string `json:"roadmap_version,omitempty"` // 路标版本
	ReleaseType    *string `json:"release_type,omitempty"`    // 发布类型
	SignedBy       *string `json:"signed_by,omitempty"`       // 签发人
	ArchivedBy     *string `json:"archived_by,omitempty"`     // 发布确认人
	CC             *string `json:"cc,omitempty"`              // 抄送人
}

type CreateReleaseRequest added in v0.17.0

type CreateReleaseRequest struct {
	WorkspaceID *int    `json:"workspace_id,omitempty"` // [必须]项目ID
	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"`      // 创建人
}

type CreateStoryBugRelationRequest added in v0.17.0

type CreateStoryBugRelationRequest struct {
	WorkspaceID *int    `json:"workspace_id,omitempty"` // [必须]项目ID
	SourceType  *string `json:"source_type,omitempty"`  // [必须]源对象类型,story 或 bug
	SourceID    *int64  `json:"source_id,omitempty"`    // [必须]源对象ID
	TargetType  *string `json:"target_type,omitempty"`  // [必须]目标对象类型,story 或 bug
	TargetID    *int64  `json:"target_id,omitempty"`    // [必须]目标对象ID
}

type CreateStoryCategoryRequest added in v0.17.0

type CreateStoryCategoryRequest struct {
	WorkspaceID *int    `json:"workspace_id,omitempty"` // [必须]项目ID
	Name        *string `json:"name,omitempty"`         // [必须]需求分类名称
	Description *string `json:"description,omitempty"`  // 需求分类描述
	ParentID    *int64  `json:"parent_id,omitempty"`    // 父分类ID
}

type CreateStoryLinkRelationRequest added in v0.17.0

type CreateStoryLinkRelationRequest struct {
	WorkspaceID   *int   `json:"workspace_id,omitempty"`    // [必须]项目ID
	SourceStoryID *int64 `json:"src_story_id,omitempty"`    // [必须]源需求ID
	TargetStoryID *int64 `json:"target_story_id,omitempty"` // [必须]目标需求ID
}

type CreateStoryLinkRelationResult added in v0.17.0

type CreateStoryLinkRelationResult struct {
	Success int `json:"success,omitempty"` // 是否创建成功
}

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 CreateStoryTestCaseRelationRequest added in v0.17.0

type CreateStoryTestCaseRelationRequest struct {
	WorkspaceID *int          `json:"workspace_id,omitempty"` // [必须]项目ID
	StoryID     *int64        `json:"story_id,omitempty"`     // [必须]需求ID
	TestCaseID  *Multi[int64] `json:"tcase_id,omitempty"`     // [必须]测试用例ID,支持多ID,英文逗号分隔,不超过20个
}

type CreateStoryTestCaseRelationResult added in v0.17.0

type CreateStoryTestCaseRelationResult struct {
	SuccessID []string `json:"success_id,omitempty"` // 成功关联的测试用例ID
}

type CreateTaskRequest added in v0.14.0

type CreateTaskRequest struct {
	Name             *string           `json:"name,omitempty"`             // 任务标题	支持模糊匹配
	Description      *string           `json:"description,omitempty"`      // 任务详细描述
	WorkspaceID      *int              `json:"workspace_id,omitempty"`     // [必须]项目ID
	Creator          *string           `json:"creator,omitempty"`          // 创建人	支持多人员查询
	Created          *string           `json:"created,omitempty"`          // 创建时间	支持时间查询
	Modified         *string           `json:"modified,omitempty"`         // 最后修改时间	支持时间查询
	Status           *Enum[TaskStatus] `json:"status,omitempty"`           // 状态	支持枚举查询
	Label            *Enum[string]     `json:"label,omitempty"`            // 标签查询	支持枚举查询
	Owner            *string           `json:"owner,omitempty"`            // 任务当前处理人	支持模糊匹配
	CC               *string           `json:"cc,omitempty"`               // 抄送人
	Begin            *string           `json:"begin,omitempty"`            // 预计开始	支持时间查询
	Due              *string           `json:"due,omitempty"`              // 预计结束	支持时间查询
	StoryID          *Multi[int64]     `json:"story_id,omitempty"`         // 关联需求的ID	支持多ID查询
	IterationID      *Enum[int64]      `json:"iteration_id,omitempty"`     // 所属迭代的ID	支持枚举查询
	Priority         *string           `json:"priority,omitempty"`         //nolint:lll // 优先级。为了兼容自定义优先级,请使用 priority_label 字段,详情参考:如何兼容自定义优先级
	PriorityLabel    *PriorityLabel    `json:"priority_label,omitempty"`   // 优先级。推荐使用这个字段
	Progress         *int              `json:"progress,omitempty"`         // 进度
	Completed        *string           `json:"completed,omitempty"`        // 完成时间	支持时间查询
	EffortCompleted  *string           `json:"effort_completed,omitempty"` // 完成工时
	Exceed           *float64          `json:"exceed,omitempty"`           // 超出工时
	Remain           *float64          `json:"remain,omitempty"`           // 剩余工时
	Effort           *string           `json:"effort,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"`
}

type CreateTestCaseCategoryRequest added in v0.17.0

type CreateTestCaseCategoryRequest struct {
	WorkspaceID *int    `json:"workspace_id,omitempty"` // [必须]项目ID
	Name        *string `json:"name,omitempty"`         // [必须]目录名称
	Description *string `json:"description,omitempty"`  // 目录描述
	ParentID    *int64  `json:"parent_id,omitempty"`    // 父目录ID
	Creator     *string `json:"creator,omitempty"`      // 目录创建人
}

type CreateTestCaseRequest added in v0.17.0

type CreateTestCaseRequest struct {
	ID            *int64          `json:"id,omitempty"`             // 测试用例ID
	Steps         *string         `json:"steps,omitempty"`          // 用例步骤
	WorkspaceID   *int            `json:"workspace_id,omitempty"`   // [必须]项目ID
	CategoryID    *int64          `json:"category_id,omitempty"`    // 用例目录
	Status        *TestCaseStatus `json:"status,omitempty"`         // 用例状态
	Name          *string         `json:"name,omitempty"`           // [必须]用例名称
	Precondition  *string         `json:"precondition,omitempty"`   // 前置条件
	Expectation   *string         `json:"expectation,omitempty"`    // 预期结果
	Type          *string         `json:"type,omitempty"`           // 用例类型
	Priority      *string         `json:"priority,omitempty"`       // 用例等级
	Creator       *string         `json:"creator,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 CreateTestPlanRequest added in v0.17.0

type CreateTestPlanRequest struct {
	Name          *string `json:"name,omitempty"`           // [必须]测试计划标题
	Description   *string `json:"description,omitempty"`    // 测试计划详细描述
	WorkspaceID   *int    `json:"workspace_id,omitempty"`   // [必须]项目ID
	Creator       *string `json:"creator,omitempty"`        // 创建人
	Modifier      *string `json:"modifier,omitempty"`       // 修改人
	Owner         *string `json:"owner,omitempty"`          // 测试计划负责人
	StartDate     *string `json:"start_date,omitempty"`     // 预计开始
	EndDate       *string `json:"end_date,omitempty"`       // 预计结束
	IterationID   *int64  `json:"iteration_id,omitempty"`   // 关联迭代ID
	Version       *string `json:"version,omitempty"`        // 版本号
	Type          *string `json:"type,omitempty"`           // 测试类型
	Status        *string `json:"status,omitempty"`         // 状态,默认open
	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"`
}

type CreateTestPlanStoryRelationRequest added in v0.17.0

type CreateTestPlanStoryRelationRequest struct {
	PlanID      *int64        `json:"plan_id,omitempty"`      // [必须]测试计划ID
	WorkspaceID *int          `json:"workspace_id,omitempty"` // [必须]项目ID
	StoryIDs    *Multi[int64] `json:"story_ids,omitempty"`    // [必须]需求ID,多个使用英文逗号分隔
	Creator     *string       `json:"creator,omitempty"`      // [必须]创建人
}

type CreateTestPlanTestCaseRelationRequest added in v0.17.0

type CreateTestPlanTestCaseRelationRequest struct {
	TestPlanID  *int64        `json:"test_plan_id,omitempty"` // [必须]测试计划ID
	WorkspaceID *int          `json:"workspace_id,omitempty"` // [必须]项目ID
	TestCaseIDs *Multi[int64] `json:"tcase_ids,omitempty"`    // [必须]测试用例ID,多个使用英文逗号分隔
	Creator     *string       `json:"creator,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 CreateWikiRequest added in v0.17.0

type CreateWikiRequest struct {
	Name                *string `json:"name,omitempty"`                 // [必须]标题
	MarkdownDescription *string `json:"markdown_description,omitempty"` // Markdown
	Description         *string `json:"description,omitempty"`          // 富文本
	Creator             *string `json:"creator,omitempty"`              // [必须]创建人
	Note                *string `json:"note,omitempty"`                 // 备注
	WorkspaceID         *int    `json:"workspace_id,omitempty"`         // [必须]项目ID
	ParentWikiID        *string `json:"parent_wiki_id,omitempty"`       // 父wiki ID
}

type CustomWorkCalendar added in v0.17.0

type CustomWorkCalendar struct {
	Weekdays []string `json:"weekdays,omitempty"` // 周内工作日
	Holidays []string `json:"holidays,omitempty"` // 额外假日
	Workdays []string `json:"workdays,omitempty"` // 额外工作日
}

type DeleteLinkBugsRequest added in v0.17.0

type DeleteLinkBugsRequest struct {
	WorkspaceID *int          `json:"workspace_id,omitempty"` // [必须]项目ID
	BugID       *int64        `json:"bug_id,omitempty"`       // [必须]缺陷ID
	LinkIDs     *Multi[int64] `json:"link_ids,omitempty"`     // [必须]关联关系ID,多个以逗号分隔
}

type DeleteStoryTimeRelation added in v0.17.0

type DeleteStoryTimeRelation struct {
	WorkitemID    *int64 `json:"workitem_id,omitempty"`     // 起点需求ID
	DstWorkitemID *int64 `json:"dst_workitem_id,omitempty"` // 终点需求ID
}

type DeleteStoryTimeRelationsRequest added in v0.17.0

type DeleteStoryTimeRelationsRequest struct {
	WorkspaceID *int                       `json:"workspace_id,omitempty"` // [必须]项目ID
	Relations   []*DeleteStoryTimeRelation `json:"relations,omitempty"`    // 按起点和终点删除的关系列表
	RelationIDs *[]int64                   `json:"relation_ids,omitempty"` // 按关系ID删除的关系列表
	CurrentUser *string                    `json:"current_user,omitempty"` // [必须]执行此操作的用户 nick
}

type DeleteStoryTimeRelationsResult added in v0.17.0

type DeleteStoryTimeRelationsResult struct {
	Num int `json:"num,omitempty"` // 实际删除的条数
}

type DeleteTestCaseStoryRelationRequest added in v0.17.0

type DeleteTestCaseStoryRelationRequest struct {
	WorkspaceID *int   `json:"workspace_id,omitempty"` // [必须]项目ID
	StoryID     *int64 `json:"story_id,omitempty"`     // [必须]需求ID
	TestCaseID  *int64 `json:"tcase_id,omitempty"`     // [必须]测试用例ID
	TestPlanID  *int64 `json:"test_plan_id,omitempty"` // [必须]测试计划ID
}

type DeleteTestPlanStoryRelationRequest added in v0.17.0

type DeleteTestPlanStoryRelationRequest struct {
	PlanID      *int64        `json:"plan_id,omitempty"`      // [必须]测试计划ID
	WorkspaceID *int          `json:"workspace_id,omitempty"` // [必须]项目ID
	StoryIDs    *Multi[int64] `json:"story_ids,omitempty"`    // [必须]需求ID,多个使用英文逗号分隔
	Creator     *string       `json:"creator,omitempty"`      // [必须]操作人
}

type DeleteTimesheetsRequest added in v0.17.0

type DeleteTimesheetsRequest struct {
	EntityType  *EntityType `json:"entity_type,omitempty"`  // [必须]对象类型,如story、task、bug等
	EntityID    *int64      `json:"entity_id,omitempty"`    // [必须]对象ID
	WorkspaceID *int        `json:"workspace_id,omitempty"` // [必须]项目ID
	CostIDs     *[]int64    `json:"cost_ids,omitempty"`     // [必须]工时花费ID列表,一次最多100条
}

type DeleteTimesheetsResponse added in v0.17.0

type DeleteTimesheetsResponse struct {
	Msg  string                 `json:"msg,omitzero"`  // 处理结果消息
	Data DeleteTimesheetsResult `json:"data,omitzero"` // 删除结果明细
}

type DeleteTimesheetsResult added in v0.17.0

type DeleteTimesheetsResult struct {
	Success DeleteTimesheetsResultItem   `json:"success,omitzero"` // 删除成功明细
	Failed  []DeleteTimesheetsResultItem `json:"failed,omitempty"` // 删除失败明细
}

type DeleteTimesheetsResultItem added in v0.17.0

type DeleteTimesheetsResultItem struct {
	CostIDs []string `json:"cost_ids,omitempty"` // 工时花费ID列表
	Msg     string   `json:"msg,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 EnableWorkCalendarRequest added in v0.17.0

type EnableWorkCalendarRequest struct {
	WorkspaceID *int              `json:"workspace_id,omitempty"` // [必须]项目ID
	Type        *WorkCalendarType `json:"type,omitempty"`         // [必须]启用类型,system 或 custom
}

type EnableWorkCalendarResponse added in v0.17.0

type EnableWorkCalendarResponse struct {
	Success bool `json:"success,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 ExecuteTestCaseRequest added in v0.17.0

type ExecuteTestCaseRequest struct {
	TestPlanID   *int64                `json:"test_plan_id,omitempty"`  // [必须]测试计划ID
	TestCaseID   *Multi[int64]         `json:"tcase_id,omitempty"`      // [必须]测试用例ID,支持批量执行
	WorkspaceID  *int                  `json:"workspace_id,omitempty"`  // [必须]项目ID
	ResultStatus *TestCaseResultStatus `json:"result_status,omitempty"` // [必须]执行结果
	LastExecutor *string               `json:"last_executor,omitempty"` // [必须]执行人
	ResultRemark *string               `json:"result_remark,omitempty"` // 实际执行结果
}

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"`        // [可选]上传人
	Limit       *int    `url:"limit,omitempty"`        // [可选]每页数量,最大 200
	Page        *int    `url:"page,omitempty"`         // [可选]页码
	DownloadURL string  `url:"-" json:"download_url,omitempty"`
}

type GetBoardCardsRequest added in v0.17.0

type GetBoardCardsRequest struct {
	WorkspaceID *int           `url:"workspace_id,omitempty"` // [必须]项目ID
	ID          *Multi[int64]  `url:"id,omitempty"`           // 工作项ID,支持多ID查询
	BoardID     *int64         `url:"b_board_id,omitempty"`   // 看板ID
	ColumnID    *int64         `url:"b_column_id,omitempty"`  // 板块ID
	Owner       *string        `url:"owner,omitempty"`        // 负责人
	CC          *string        `url:"cc,omitempty"`           // 参与人
	Status      *string        `url:"status,omitempty"`       // 状态
	Name        *string        `url:"name,omitempty"`         // 工作项标题
	Created     *string        `url:"created,omitempty"`      // 创建时间,支持时间查询
	Begin       *string        `url:"begin,omitempty"`        // 开始时间,支持时间查询
	Due         *string        `url:"due,omitempty"`          // 截止时间,支持时间查询
	Label       *int64         `url:"b_label,omitempty"`      // 标签ID
	Limit       *int           `url:"limit,omitempty"`        // 设置返回数量限制,默认为30,最大取200
	Page        *int           `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1
	Fields      *Multi[string] `url:"fields,omitempty"`       // 设置获取的字段,多个字段间以','逗号隔开
}

type GetBoardColumnsRequest added in v0.17.0

type GetBoardColumnsRequest struct {
	WorkspaceID *int           `url:"workspace_id,omitempty"` // [必须]项目ID
	ID          *Multi[int64]  `url:"id,omitempty"`           // 板块ID,支持多ID查询
	Name        *string        `url:"name,omitempty"`         // 板块名称
	BoardID     *int64         `url:"board_id,omitempty"`     // 看板ID
	Status      *string        `url:"status,omitempty"`       // 状态
	Created     *string        `url:"created,omitempty"`      // 创建时间
	Creator     *string        `url:"creator,omitempty"`      // 创建人
	Limit       *int           `url:"limit,omitempty"`        // 设置返回数量限制,默认为30,最大取200
	Page        *int           `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1
	Order       *Order         `url:"order,omitempty"`        // 排序规则
	Fields      *Multi[string] `url:"fields,omitempty"`       // 设置获取的字段,多个字段间以','逗号隔开
}

type GetBugChangesCountRequest added in v0.17.0

type GetBugChangesCountRequest struct {
	ID          *Multi[int64] `url:"id,omitempty"`           // 变更记录ID,支持多ID查询
	BugID       *Multi[int64] `url:"bug_id,omitempty"`       // 缺陷ID,支持多ID查询
	WorkspaceID *int          `url:"workspace_id,omitempty"` // [必须]项目ID
	Author      *string       `url:"author,omitempty"`       // 变更人
	Field       *string       `url:"field,omitempty"`        // 变更字段
	OldValue    *string       `url:"old_value,omitempty"`    // 变更前
	NewValue    *string       `url:"new_value,omitempty"`    // 变更后
	Memo        *string       `url:"memo,omitempty"`         // 备注
	Created     *string       `url:"created,omitempty"`      // 创建时间,支持时间查询
}

type GetBugChangesRequest added in v0.17.0

type GetBugChangesRequest struct {
	ID            *Multi[int64]  `url:"id,omitempty"`              // 变更记录ID,支持多ID查询
	BugID         *Multi[int64]  `url:"bug_id,omitempty"`          // 缺陷ID,支持多ID查询
	WorkspaceID   *int           `url:"workspace_id,omitempty"`    // [必须]项目ID
	Author        *string        `url:"author,omitempty"`          // 变更人
	Field         *string        `url:"field,omitempty"`           // 变更字段
	OldValue      *string        `url:"old_value,omitempty"`       // 变更前
	NewValue      *string        `url:"new_value,omitempty"`       // 变更后
	Memo          *string        `url:"memo,omitempty"`            // 备注
	Created       *string        `url:"created,omitempty"`         // 创建时间,支持时间查询
	IncludeAddBug *int           `url:"include_add_bug,omitempty"` // 是否返回创建缺陷的记录,值传1
	Limit         *int           `url:"limit,omitempty"`           // 设置返回数量限制,默认为30,最大取200
	Page          *int           `url:"page,omitempty"`            // 返回当前数量限制下第N页的数据,默认为1(第一页)
	Order         *Order         `url:"order,omitempty"`           // 排序规则,规则:字段名 ASC或者DESC
	Fields        *Multi[string] `url:"fields,omitempty"`          // 设置获取的字段,多个字段间以','逗号隔开
}

type GetBugCustomFieldsSettingsRequest added in v0.17.0

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

type GetBugFieldsInfoRequest added in v0.17.0

type GetBugFieldsInfoRequest struct {
	WorkspaceID *int `url:"workspace_id,omitempty"` // [必须]项目ID
	AllOptions  *int `url:"all_options,omitempty"`  // 是否返回已关闭的选项,all_options=1 则返回
}

type GetBugFieldsLabelRequest added in v0.17.0

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

type GetBugLinkBugsRequest added in v0.17.0

type GetBugLinkBugsRequest struct {
	WorkspaceID *int   `url:"workspace_id,omitempty"` // [必须]项目ID
	BugID       *int64 `url:"bug_id,omitempty"`       // [必须]缺陷ID
}

type GetBugRelatedStoriesRequest added in v0.17.0

type GetBugRelatedStoriesRequest struct {
	WorkspaceID *int          `url:"workspace_id,omitempty"` // [必须]项目ID
	BugID       *Multi[int64] `url:"bug_id,omitempty"`       // [必须]缺陷ID,支持多ID查询
}

type GetBugTemplateFieldsRequest added in v0.17.0

type GetBugTemplateFieldsRequest struct {
	WorkspaceID      *int   `url:"workspace_id,omitempty"`       // [必须]项目ID
	TemplateID       *int64 `url:"template_id,omitempty"`        // [必须]模板ID
	UsePriorityLabel *int   `url:"use_priority_label,omitempty"` // 是否替换优先级字段为 priority_label,取值0和1
}

type GetBugTemplatesRequest added in v0.17.0

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

type GetBugsByViewConfIDRequest added in v0.17.0

type GetBugsByViewConfIDRequest struct {
	ViewConfID  *int64  `url:"view_conf_id,omitempty"` // [必须]视图ID
	CurrentUser *string `url:"current_user,omitempty"` // 当前登录用户视图
	GetBugsRequest
}

type GetBugsCountRequest added in v0.15.0

type GetBugsCountRequest 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"`
}

GetBugsCountRequest 获取缺陷数量请求 获取缺陷数量

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

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 GetCodeCommitInfosRequest added in v0.17.0

type GetCodeCommitInfosRequest struct {
	WorkspaceID *int                   `url:"workspace_id,omitempty"` // [必须]项目ID
	Type        *EntityType            `url:"type,omitempty"`         // [必须]TAPD业务对象类型,story、bug、task
	ObjectID    *int64                 `url:"object_id,omitempty"`    // [必须]TAPD业务对象ID
	CommitTime  *string                `url:"commit_time,omitempty"`  // 提交时间查询条件
	RelatedType *CodeCommitRelatedType `url:"related_type,omitempty"` // 关联类型,all、branch、source_code
	Limit       *int                   `url:"limit,omitempty"`        // 返回数量限制,默认30,最大200
	Page        *int                   `url:"page,omitempty"`         // 当前页,默认1
}

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 GetCommitObjectsRequest added in v0.17.0

type GetCommitObjectsRequest struct {
	WorkspaceID *int           `url:"workspace_id,omitempty"` // [必须]项目ID
	CommitID    *Multi[string] `url:"commit_id,omitempty"`    // [必须]提交ID,多个以逗号分隔
	EntityType  *EntityType    `url:"entity_type,omitempty"`  // [必须]业务对象类型,story、bug、task
	SCMType     *string        `url:"scm_type,omitempty"`     // 来源类型
	Limit       *int           `url:"limit,omitempty"`        // 返回数量限制,默认30,最大200
	Page        *int           `url:"page,omitempty"`         // 当前页,默认1
	Order       *Order         `url:"order,omitempty"`        // 排序规则
	Fields      *Multi[string] `url:"fields,omitempty"`       // 返回字段,多个以逗号分隔
}

type GetCompanyWorkspacesRequest added in v0.17.0

type GetCompanyWorkspacesRequest struct {
	CompanyID   *int    `url:"company_id,omitempty"`   // [必须]公司ID
	Category    *string `url:"category,omitempty"`     // [可选]项目类型,project 或 mini_project
	WithExtends *int    `url:"with_extends,omitempty"` // [可选]是否返回项目扩展信息
}

type GetConvertBugIDsToQueryTokenRequest added in v0.17.0

type GetConvertBugIDsToQueryTokenRequest struct {
	WorkspaceID *int          `json:"workspace_id,omitempty"` // [必须]项目ID
	BugIDs      *Multi[int64] `json:"ids,omitempty"`          // [必须]缺陷ID,多个以逗号分隔
}

type GetConvertBugIDsToQueryTokenResponse added in v0.17.0

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

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 GetCustomWorkCalendarRequest added in v0.17.0

type GetCustomWorkCalendarRequest struct {
	WorkspaceID *int    `url:"workspace_id,omitempty"` // [必须]项目ID
	Year        *string `url:"year,omitempty"`         // [必须]年份
}

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 GetIterationChangesRequest added in v0.17.0

type GetIterationChangesRequest struct {
	ID          *Multi[int64]  `url:"id,omitempty"`           // 变更记录ID,支持多ID查询
	WorkspaceID *int           `url:"workspace_id,omitempty"` // [必须]项目ID
	IterationID *int64         `url:"iteration_id,omitempty"` // [必须]迭代ID
	Author      *string        `url:"author,omitempty"`       // 变更人
	Field       *string        `url:"field,omitempty"`        // 字段名称
	OldValue    *string        `url:"old_value,omitempty"`    // 变更前
	NewValue    *string        `url:"new_value,omitempty"`    // 变更后
	Created     *string        `url:"created,omitempty"`      // 创建时间,支持时间查询
	Limit       *int           `url:"limit,omitempty"`        // 设置返回数量限制,默认为30,最大取200
	Page        *int           `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1(第一页)
	Fields      *Multi[string] `url:"fields,omitempty"`       // 设置获取的字段,多个字段间以','逗号隔开
}

type GetIterationCustomDashBoardContentRequest added in v0.17.0

type GetIterationCustomDashBoardContentRequest struct {
	WorkspaceID *int   `url:"workspace_id,omitempty"` // [必须]项目ID
	IterationID *int64 `url:"iteration_id,omitempty"` // [必须]迭代ID
}

type GetIterationCustomFieldsSettingsRequest added in v0.17.0

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

type GetIterationDefaultTemplateFieldsRequest added in v0.17.0

type GetIterationDefaultTemplateFieldsRequest struct {
	WorkspaceID    *int   `url:"workspace_id,omitempty"`     // [必须]项目ID
	WorkitemTypeID *int64 `url:"workitem_type_id,omitempty"` // [必须]迭代类别ID
}

type GetIterationTemplateFieldsRequest added in v0.17.0

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

type GetIterationTestPlansRequest added in v0.17.0

type GetIterationTestPlansRequest struct {
	WorkspaceID *int   `url:"workspace_id,omitempty"` // [必须]项目ID
	IterationID *int64 `url:"iteration_id,omitempty"` // [必须]迭代ID
	Limit       *int   `url:"limit,omitempty"`        // 设置返回数量限制,默认为30
	Page        *int   `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1
	Order       *Order `url:"order,omitempty"`        // 排序规则
}

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 GetLaunchAccessoriesRequest added in v0.17.0

type GetLaunchAccessoriesRequest struct {
	WorkspaceID *int    `url:"workspace_id,omitempty"` // [必须]项目ID
	FormID      *int64  `url:"form_id,omitempty"`      // [必须]评审单ID
	ID          *int64  `url:"id,omitempty"`           // 评审依据ID
	CreatedBy   *string `url:"created_by,omitempty"`   // 创建人
	Created     *string `url:"created,omitempty"`      // 创建时间,支持时间查询
}

type GetLaunchFormActivityLogsRequest added in v0.17.0

type GetLaunchFormActivityLogsRequest struct {
	WorkspaceID *int   `url:"workspace_id,omitempty"` // [必须]项目ID
	FormID      *int64 `url:"form_id,omitempty"`      // [必须]发布评审ID
}

type GetLaunchFormCustomFieldsSettingsRequest added in v0.17.0

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

type GetLaunchFormTemplatesRequest added in v0.17.0

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

type GetLaunchFormsCountRequest added in v0.17.0

type GetLaunchFormsCountRequest struct {
	WorkspaceID    *int           `url:"workspace_id,omitempty"`    // [必须]项目ID
	ID             *int64         `url:"id,omitempty"`              // 发布评审ID
	Creator        *string        `url:"creator,omitempty"`         // 创建人
	Created        *string        `url:"created,omitempty"`         // 创建时间,支持时间查询
	Title          *string        `url:"title,omitempty"`           // 标题
	Status         *string        `url:"status,omitempty"`          // 状态
	VersionType    *string        `url:"version_type,omitempty"`    // 版本类型
	Baseline       *string        `url:"baseline,omitempty"`        // 基线
	ReleaseModel   *string        `url:"release_model,omitempty"`   // 发布模块
	RoadmapVersion *string        `url:"roadmap_version,omitempty"` // 路标版本
	ReleaseType    *string        `url:"release_type,omitempty"`    // 发布类型
	ChangeType     *string        `url:"change_type,omitempty"`     // 变更类型
	SignedBy       *string        `url:"signed_by,omitempty"`       // 签发人
	ArchivedBy     *string        `url:"archived_by,omitempty"`     // 发布确认人
	CC             *string        `url:"cc,omitempty"`              // 抄送人
	ChangeNotifier *string        `url:"change_notifier,omitempty"` // 变更通知人
	Limit          *int           `url:"limit,omitempty"`           // 设置返回数量限制,默认为30,最大取200
	Page           *int           `url:"page,omitempty"`            // 返回当前数量限制下第N页的数据,默认为1
	Fields         *Multi[string] `url:"fields,omitempty"`          // 设置获取的字段,多个字段间以','逗号隔开
}

type GetLaunchFormsRequest added in v0.17.0

type GetLaunchFormsRequest struct {
	WorkspaceID    *int           `url:"workspace_id,omitempty"`    // [必须]项目ID
	ID             *int64         `url:"id,omitempty"`              // 发布评审ID
	Creator        *string        `url:"creator,omitempty"`         // 创建人
	Created        *string        `url:"created,omitempty"`         // 创建时间,支持时间查询
	Title          *string        `url:"title,omitempty"`           // 标题
	Status         *string        `url:"status,omitempty"`          // 状态
	VersionType    *string        `url:"version_type,omitempty"`    // 版本类型
	Baseline       *string        `url:"baseline,omitempty"`        // 基线
	ReleaseModel   *string        `url:"release_model,omitempty"`   // 发布模块
	RoadmapVersion *string        `url:"roadmap_version,omitempty"` // 路标版本
	ReleaseType    *string        `url:"release_type,omitempty"`    // 发布类型
	ChangeType     *string        `url:"change_type,omitempty"`     // 变更类型
	SignedBy       *string        `url:"signed_by,omitempty"`       // 签发人
	ArchivedBy     *string        `url:"archived_by,omitempty"`     // 发布确认人
	CC             *string        `url:"cc,omitempty"`              // 抄送人
	ChangeNotifier *string        `url:"change_notifier,omitempty"` // 变更通知人
	Limit          *int           `url:"limit,omitempty"`           // 设置返回数量限制,默认为30,最大取200
	Page           *int           `url:"page,omitempty"`            // 返回当前数量限制下第N页的数据,默认为1
	Fields         *Multi[string] `url:"fields,omitempty"`          // 设置获取的字段,多个字段间以','逗号隔开
}

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 GetReleasesCountRequest added in v0.17.0

type GetReleasesCountRequest 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"`      // 结束时间
	Creator     *string       `url:"creator,omitempty"`      // 创建人
	Created     *string       `url:"created,omitempty"`      // 创建时间,支持时间查询
	Modified    *string       `url:"modified,omitempty"`     // 最后修改时间,支持时间查询
	Status      *string       `url:"status,omitempty"`       // 状态
}

type GetReleasesRequest added in v0.17.0

type GetReleasesRequest 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"`      // 结束时间
	Creator     *string        `url:"creator,omitempty"`      // 创建人
	Created     *string        `url:"created,omitempty"`      // 创建时间,支持时间查询
	Modified    *string        `url:"modified,omitempty"`     // 最后修改时间,支持时间查询
	Status      *string        `url:"status,omitempty"`       // 状态
	Limit       *int           `url:"limit,omitempty"`        // 设置返回数量限制,默认为30,最大取200
	Page        *int           `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1
	Order       *Order         `url:"order,omitempty"`        // 排序规则
	Fields      *Multi[string] `url:"fields,omitempty"`       // 设置获取的字段,多个字段间以','逗号隔开
}

type GetRemovedBugsRequest added in v0.17.0

type GetRemovedBugsRequest struct {
	WorkspaceID *int          `url:"workspace_id,omitempty"` // [必须]项目ID
	ID          *Multi[int64] `url:"id,omitempty"`           // 缺陷ID
	Creator     *string       `url:"creator,omitempty"`      // 创建人
	Created     *string       `url:"created,omitempty"`      // 创建时间
	Modified    *string       `url:"modified,omitempty"`     // 删除时间
	IncludeAll  *int          `url:"include_all,omitempty"`  // 取 1 会返回所有删除的缺陷,包括移动、合并、删除
	Limit       *int          `url:"limit,omitempty"`        // 设置返回数量限制,默认为30
	Page        *int          `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1(第一页)
}

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 GetRemovedTasksRequest added in v0.17.0

type GetRemovedTasksRequest 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 GetSecretStoriesCountRequest added in v0.17.0

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

type GetSecretStoriesRequest added in v0.17.0

type GetSecretStoriesRequest struct {
	WorkspaceID *int   `url:"workspace_id,omitempty"` // [必须]项目ID
	Limit       *int   `url:"limit,omitempty"`        // 设置返回数量限制,默认为30,最大取200
	Page        *int   `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1(第一页)
	Order       *Order `url:"order,omitempty"`        // 排序规则,规则:字段名 ASC或者DESC
}

type GetStoriesByViewConfIDRequest added in v0.17.0

type GetStoriesByViewConfIDRequest struct {
	ViewConfID  *int64  `url:"view_conf_id,omitempty"` // [必须]视图ID
	CurrentUser *string `url:"current_user,omitempty"` // 当前登录用户视图
	GetStoriesRequest
}

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 GetStoryChangesCountRequest added in v0.17.0

type GetStoryChangesCountRequest struct {
	ID            *Multi[int64]    `url:"id,omitempty"`             // 支持多ID查询
	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)
}

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 GetStoryFieldsInfoRequest added in v0.17.0

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

type GetStoryFieldsLabelRequest added in v0.15.0

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

type GetStoryLinkStoriesRequest added in v0.17.0

type GetStoryLinkStoriesRequest struct {
	WorkspaceID *int   `url:"workspace_id,omitempty"` // [必须]项目ID
	StoryID     *int64 `url:"story_id,omitempty"`     // [必须]需求ID
}

type GetStoryRelatedBugsRequest

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

type GetStorySecretInfoRequest added in v0.17.0

type GetStorySecretInfoRequest struct {
	StoryID     *int64 `url:"story_id,omitempty"`     // [必须]需求ID
	WorkspaceID *int   `url:"workspace_id,omitempty"` // [必须]项目ID
}

type GetStoryStepsRequest added in v0.17.0

type GetStoryStepsRequest struct {
	StoryID     *int64 `url:"story_id,omitempty"`     // [必须]需求ID
	WorkspaceID *int   `url:"workspace_id,omitempty"` // [必须]项目ID
}

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 GetStoryTestCaseRelationRequest added in v0.15.0

type GetStoryTestCaseRelationRequest struct {
	WorkspaceID     *int   `url:"workspace_id,omitempty"`      // 项目ID
	StoryID         *int64 `url:"story_id,omitempty"`          // 需求ID
	IncludeTestPlan *int   `url:"include_test_plan,omitempty"` // 是否包含测试计划	取值为1或0,默认为1
}

type GetStoryTimeRelationsRequest added in v0.17.0

type GetStoryTimeRelationsRequest struct {
	WorkspaceID *int   `url:"workspace_id,omitempty"` // [必须]源项目ID
	StoryID     *int64 `url:"story_id,omitempty"`     // [必须]源需求ID
}

type GetStoryWorkitemTypesRequest added in v0.17.0

type GetStoryWorkitemTypesRequest struct {
	ID          *Multi[int64]  `url:"id,omitempty"`           // ID,支持多ID查询
	WorkspaceID *int           `url:"workspace_id,omitempty"` // [必须]项目ID
	Name        *string        `url:"name,omitempty"`         // 需求类别名称,支持模糊匹配
	EntityType  *string        `url:"entity_type,omitempty"`  // 类别别名
	EnglishName *string        `url:"english_name,omitempty"` // 英文名称
	WorkflowID  *int64         `url:"workflow_id,omitempty"`  // 工作流ID
	Status      *int           `url:"status,omitempty"`       // 状态
	Created     *string        `url:"created,omitempty"`      // 创建时间
	Creator     *string        `url:"creator,omitempty"`      // 创建人
	ModifiedBy  *string        `url:"modified_by,omitempty"`  // 最后修改人
	Modified    *string        `url:"modified,omitempty"`     // 最后修改时间
	Limit       *int           `url:"limit,omitempty"`        // 每页数量
	Page        *int           `url:"page,omitempty"`         // 页码
	Order       *Order         `url:"order,omitempty"`        // 排序规则
	Fields      *Multi[string] `url:"fields,omitempty"`       // 返回字段列表
}

type GetSubWorkspacesRequest added in v0.17.0

type GetSubWorkspacesRequest struct {
	WorkspaceID *int `url:"workspace_id,omitempty"` // [必须]项目ID
	TemplateID  *int `url:"template_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 GetTaskCustomFieldsSettingsRequest added in v0.17.0

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

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 GetTestCaseCategoriesCountRequest added in v0.17.0

type GetTestCaseCategoriesCountRequest 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"`  // 目录描述
	ParentID    *int64        `url:"parent_id,omitempty"`    // 父目录ID
	Modified    *string       `url:"modified,omitempty"`     // 最后修改时间,支持时间查询
	Created     *string       `url:"created,omitempty"`      // 创建时间,支持时间查询
	Creator     *string       `url:"creator,omitempty"`      // 目录创建人
	Modifier    *string       `url:"modifier,omitempty"`     // 目录最后修改人
	Sorting     *int          `url:"sorting,omitempty"`      // 目录排序序号
}

type GetTestCaseCategoriesRequest added in v0.17.0

type GetTestCaseCategoriesRequest 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"`  // 目录描述
	ParentID    *int64         `url:"parent_id,omitempty"`    // 父目录ID
	Modified    *string        `url:"modified,omitempty"`     // 最后修改时间,支持时间查询
	Created     *string        `url:"created,omitempty"`      // 创建时间,支持时间查询
	Creator     *string        `url:"creator,omitempty"`      // 目录创建人
	Modifier    *string        `url:"modifier,omitempty"`     // 目录最后修改人
	Sorting     *int           `url:"sorting,omitempty"`      // 目录排序序号
	Limit       *int           `url:"limit,omitempty"`        // 设置返回数量限制,默认为30,最大取200
	Page        *int           `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1
	Order       *Order         `url:"order,omitempty"`        // 排序规则
	Fields      *Multi[string] `url:"fields,omitempty"`       // 设置获取的字段,多个字段间以','逗号隔开
}

type GetTestCaseCustomFieldsSettingsRequest added in v0.17.0

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

type GetTestCaseFieldsInfoRequest added in v0.17.0

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

type GetTestCaseRelatedStoriesRequest added in v0.17.0

type GetTestCaseRelatedStoriesRequest struct {
	WorkspaceID *int          `url:"workspace_id,omitempty"` // [必须]项目ID
	TestCaseIDs *Multi[int64] `url:"tcase_ids,omitempty"`    // [必须]测试用例ID,多个使用英文逗号分隔
}

type GetTestCaseResultsRequest added in v0.17.0

type GetTestCaseResultsRequest struct {
	TestPlanID  *int64 `url:"test_plan_id,omitempty"` // [必须]测试计划ID
	TestCaseID  *int64 `url:"tcase_id,omitempty"`     // [必须]测试用例ID
	WorkspaceID *int   `url:"workspace_id,omitempty"` // [必须]项目ID
}

type GetTestCasesCountRequest added in v0.17.0

type GetTestCasesCountRequest struct {
	ID                 *Multi[int64]         `url:"id,omitempty"`                  // 用例ID,支持多ID查询
	Steps              *string               `url:"steps,omitempty"`               // 用例步骤
	WorkspaceID        *int                  `url:"workspace_id,omitempty"`        // [必须]项目ID
	CategoryID         *int64                `url:"category_id,omitempty"`         // 用例目录
	Created            *string               `url:"created,omitempty"`             // 创建时间,支持时间查询
	Modifier           *string               `url:"modifier,omitempty"`            // 最后修改人
	Modified           *string               `url:"modified,omitempty"`            // 最后修改时间,支持时间查询
	Creator            *string               `url:"creator,omitempty"`             // 创建人
	Status             *Enum[TestCaseStatus] `url:"status,omitempty"`              // 用例状态
	Name               *string               `url:"name,omitempty"`                // 用例名称,支持模糊匹配
	Precondition       *string               `url:"precondition,omitempty"`        // 前置条件
	Expectation        *string               `url:"expectation,omitempty"`         // 预期结果
	Type               *string               `url:"type,omitempty"`                // 用例类型
	Priority           *string               `url:"priority,omitempty"`            // 用例等级
	IsAutomated        *string               `url:"is_automated,omitempty"`        // 是否实现自动化
	AutomationType     *string               `url:"automation_type,omitempty"`     // 自动化测试类型
	AutomationPlatform *string               `url:"automation_platform,omitempty"` // 自动化测试平台
	IsServing          *string               `url:"is_serving,omitempty"`          // 是否上架
	TestPlanID         *int64                `url:"test_plan_id,omitempty"`        // 测试计划ID
}

type GetTestCasesRequest added in v0.17.0

type GetTestCasesRequest struct {
	ID                 *Multi[int64]         `url:"id,omitempty"`                  // 用例ID,支持多ID查询
	Steps              *string               `url:"steps,omitempty"`               // 用例步骤
	WorkspaceID        *int                  `url:"workspace_id,omitempty"`        // [必须]项目ID
	CategoryID         *int64                `url:"category_id,omitempty"`         // 用例目录
	Created            *string               `url:"created,omitempty"`             // 创建时间,支持时间查询
	Modifier           *string               `url:"modifier,omitempty"`            // 最后修改人
	Modified           *string               `url:"modified,omitempty"`            // 最后修改时间,支持时间查询
	Creator            *string               `url:"creator,omitempty"`             // 创建人
	Status             *Enum[TestCaseStatus] `url:"status,omitempty"`              // 用例状态
	Name               *string               `url:"name,omitempty"`                // 用例名称,支持模糊匹配
	Precondition       *string               `url:"precondition,omitempty"`        // 前置条件
	Expectation        *string               `url:"expectation,omitempty"`         // 预期结果
	Type               *string               `url:"type,omitempty"`                // 用例类型
	Priority           *string               `url:"priority,omitempty"`            // 用例等级
	IsAutomated        *string               `url:"is_automated,omitempty"`        // 是否实现自动化
	AutomationType     *string               `url:"automation_type,omitempty"`     // 自动化测试类型
	AutomationPlatform *string               `url:"automation_platform,omitempty"` // 自动化测试平台
	IsServing          *string               `url:"is_serving,omitempty"`          // 是否上架
	Limit              *int                  `url:"limit,omitempty"`               // 设置返回数量限制,默认为30,最大取200
	Page               *int                  `url:"page,omitempty"`                // 返回当前数量限制下第N页的数据,默认为1
	Order              *Order                `url:"order,omitempty"`               // 排序规则
	Fields             *Multi[string]        `url:"fields,omitempty"`              // 设置获取的字段,多个字段间以','逗号隔开
}

type GetTestPlanFieldsInfoRequest added in v0.17.0

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

type GetTestPlanProgressRequest added in v0.17.0

type GetTestPlanProgressRequest struct {
	ID          *int64 `url:"id,omitempty"`           // [必须]测试计划ID
	WorkspaceID *int   `url:"workspace_id,omitempty"` // [必须]项目ID
}

type GetTestPlanRelatedBugsRequest added in v0.17.0

type GetTestPlanRelatedBugsRequest struct {
	ID          *int64         `url:"id,omitempty"`           // [必须]测试计划ID
	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"`        // 排序规则
	Fields      *Multi[string] `url:"fields,omitempty"`       // 设置获取的字段,多个字段间以','逗号隔开
}

type GetTestPlanRelatedStoriesRequest added in v0.17.0

type GetTestPlanRelatedStoriesRequest struct {
	WorkspaceID *int   `url:"workspace_id,omitempty"` // [必须]项目ID
	TestPlanID  *int64 `url:"test_plan_id,omitempty"` // [必须]测试计划ID
}

type GetTestPlanResultRequest added in v0.17.0

type GetTestPlanResultRequest struct {
	WorkspaceID   *int    `url:"workspace_id,omitempty"`   // [必须]项目ID
	ID            *int64  `url:"id,omitempty"`             // [必须]测试计划ID
	LastExecutor  *string `url:"last_executor,omitempty"`  // 最后执行人
	IncludeRepeat *int    `url:"include_repeat,omitempty"` // 传1可以获取所有数据
}

type GetTestPlanTestCaseRelationsRequest added in v0.17.0

type GetTestPlanTestCaseRelationsRequest struct {
	WorkspaceID *int   `url:"workspace_id,omitempty"` // [必须]项目ID
	TestPlanID  *int64 `url:"test_plan_id,omitempty"` // [必须]测试计划ID
	Limit       *int   `url:"limit,omitempty"`        // 设置返回数量限制,默认为30
	Page        *int   `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1
	Order       *Order `url:"order,omitempty"`        // 排序规则
}

type GetTestPlansCountRequest added in v0.17.0

type GetTestPlansCountRequest struct {
	ID          *Multi[int64] `url:"id,omitempty"`           // 测试计划ID,支持多ID查询
	Name        *string       `url:"name,omitempty"`         // 测试计划标题
	Description *string       `url:"description,omitempty"`  // 测试计划详细描述
	WorkspaceID *int          `url:"workspace_id,omitempty"` // [必须]项目ID
	Creator     *string       `url:"creator,omitempty"`      // 创建人
	Modifier    *string       `url:"modifier,omitempty"`     // 修改人
	Owner       *string       `url:"owner,omitempty"`        // 测试计划负责人
	StartDate   *string       `url:"start_date,omitempty"`   // 预计开始
	EndDate     *string       `url:"end_date,omitempty"`     // 预计结束
	IterationID *int64        `url:"iteration_id,omitempty"` // 关联迭代ID
	Version     *string       `url:"version,omitempty"`      // 版本号
	Type        *string       `url:"type,omitempty"`         // 测试类型
	Status      *string       `url:"status,omitempty"`       // 状态,默认open
}

type GetTestPlansRequest added in v0.17.0

type GetTestPlansRequest struct {
	ID          *Multi[int64]  `url:"id,omitempty"`           // 测试计划ID,支持多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"`      // 创建时间
	Modifier    *string        `url:"modifier,omitempty"`     // 修改人
	Modified    *string        `url:"modified,omitempty"`     // 最后修改时间
	Owner       *string        `url:"owner,omitempty"`        // 测试计划负责人
	StartDate   *string        `url:"start_date,omitempty"`   // 预计开始
	EndDate     *string        `url:"end_date,omitempty"`     // 预计结束
	IterationID *int64         `url:"iteration_id,omitempty"` // 关联迭代ID
	Version     *string        `url:"version,omitempty"`      // 版本号
	Type        *string        `url:"type,omitempty"`         // 测试类型
	Status      *string        `url:"status,omitempty"`       // 状态,默认open
	Limit       *int           `url:"limit,omitempty"`        // 设置返回数量限制,默认为30,最大取200
	Page        *int           `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1
	Order       *Order         `url:"order,omitempty"`        // 排序规则
	Fields      *Multi[string] `url:"fields,omitempty"`       // 设置获取的字段,多个字段间以','逗号隔开
}

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 GetUserParticipantWorkspacesRequest added in v0.17.0

type GetUserParticipantWorkspacesRequest struct {
	Nick      *string `url:"nick,omitempty"`       // [必须]用户昵称
	CompanyID *int    `url:"company_id,omitempty"` // [必须]公司ID
}

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 GetWikiAttachmentsCountRequest added in v0.17.0

type GetWikiAttachmentsCountRequest struct {
	ID          *int64  `url:"id,omitempty"`           // id
	Filename    *string `url:"filename,omitempty"`     // 文件名
	Size        *int    `url:"size,omitempty"`         // 文件大小,字节
	Owner       *string `url:"owner,omitempty"`        // 上传者
	WorkspaceID *int    `url:"workspace_id,omitempty"` // [必须]项目ID
	Created     *string `url:"created,omitempty"`      // 创建时间,支持时间查询
	Modified    *string `url:"modified,omitempty"`     // 最后修改时间,支持时间查询
	WikiID      *int64  `url:"wiki_id,omitempty"`      // 关联的 wiki id
}

type GetWikiDrawioDataRequest added in v0.17.0

type GetWikiDrawioDataRequest struct {
	ID          *int64  `url:"id,omitempty"`           // [必须]drawio 数据ID
	WorkspaceID *int    `url:"workspace_id,omitempty"` // [必须]项目ID
	Token       *string `url:"token,omitempty"`        // 验证用 token
}

type GetWikiEntityPermissionsRequest added in v0.17.0

type GetWikiEntityPermissionsRequest struct {
	WorkspaceID *int           `url:"workspace_id,omitempty"` // [必须]项目ID
	WikiID      *int64         `url:"wiki_id,omitempty"`      // [必须]wiki ID
	TargetType  *string        `url:"target_type,omitempty"`  // 可访问的类型
	TargetID    *string        `url:"target_id,omitempty"`    // 用户昵称或用户组ID
	Limit       *int           `url:"limit,omitempty"`        // 设置返回数量限制,默认为30,最大取200
	Page        *int           `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1
	Order       *Order         `url:"order,omitempty"`        // 排序规则
	Fields      *Multi[string] `url:"fields,omitempty"`       // 设置获取的字段,多个字段间以','逗号隔开
}

type GetWikiFollowersCountRequest added in v0.17.0

type GetWikiFollowersCountRequest struct {
	ID          *int64  `url:"id,omitempty"`           // id
	WorkspaceID *int    `url:"workspace_id,omitempty"` // [必须]项目ID
	Created     *string `url:"created,omitempty"`      // 创建时间,支持时间查询
	WikiID      *int64  `url:"wiki_id,omitempty"`      // 关联的 wiki id
	User        *string `url:"user,omitempty"`         // 关注者昵称
}

type GetWikiFollowersRequest added in v0.17.0

type GetWikiFollowersRequest struct {
	ID          *int64         `url:"id,omitempty"`           // id
	WorkspaceID *int           `url:"workspace_id,omitempty"` // [必须]项目ID
	Created     *string        `url:"created,omitempty"`      // 创建时间,支持时间查询
	WikiID      *int64         `url:"wiki_id,omitempty"`      // 关联的 wiki id
	User        *string        `url:"user,omitempty"`         // 关注者昵称
	Limit       *int           `url:"limit,omitempty"`        // 设置返回数量限制,默认为30,最大取200
	Page        *int           `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1
	Order       *Order         `url:"order,omitempty"`        // 排序规则
	Fields      *Multi[string] `url:"fields,omitempty"`       // 设置获取的字段,多个字段间以','逗号隔开
}

type GetWikiTagsCountRequest added in v0.17.0

type GetWikiTagsCountRequest struct {
	WorkspaceID *int    `url:"workspace_id,omitempty"` // [必须]项目ID
	WikiID      *int64  `url:"wiki_id,omitempty"`      // wiki id,不传取项目下的所有 wiki
	Tag         *string `url:"tag,omitempty"`          // 标签
	Creator     *string `url:"creator,omitempty"`      // 标签创建人 nick
	Created     *string `url:"created,omitempty"`      // 标签创建时间,支持时间查询
}

type GetWikiTagsRequest added in v0.17.0

type GetWikiTagsRequest struct {
	WorkspaceID *int    `url:"workspace_id,omitempty"` // [必须]项目ID
	WikiID      *int64  `url:"wiki_id,omitempty"`      // wiki id,不传取项目下的所有 wiki
	Tag         *string `url:"tag,omitempty"`          // 标签
	Creator     *string `url:"creator,omitempty"`      // 标签创建人 nick
	Created     *string `url:"created,omitempty"`      // 标签创建时间,支持时间查询
	Limit       *int    `url:"limit,omitempty"`        // 设置返回数量限制,默认为30,最大取200
	Page        *int    `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1
	Order       *Order  `url:"order,omitempty"`        // 排序规则
}

type GetWikisCountRequest added in v0.17.0

type GetWikisCountRequest struct {
	Name        *string `url:"name,omitempty"`         // 标题,支持模糊匹配
	Modifier    *string `url:"modifier,omitempty"`     // 修改人
	Creator     *string `url:"creator,omitempty"`      // 创建人
	Note        *string `url:"note,omitempty"`         // 备注
	ViewCount   *string `url:"view_count,omitempty"`   // 浏览量
	Created     *string `url:"created,omitempty"`      // 创建时间,支持时间查询
	Modified    *string `url:"modified,omitempty"`     // 最后修改时间,支持时间查询
	WorkspaceID *int    `url:"workspace_id,omitempty"` // [必须]项目ID
}

type GetWikisRequest added in v0.17.0

type GetWikisRequest struct {
	ID          *int64         `url:"id,omitempty"`           // id
	Name        *string        `url:"name,omitempty"`         // 标题
	Modifier    *string        `url:"modifier,omitempty"`     // 修改人
	Creator     *string        `url:"creator,omitempty"`      // 创建人
	Note        *string        `url:"note,omitempty"`         // 备注
	ViewCount   *string        `url:"view_count,omitempty"`   // 浏览量
	Created     *string        `url:"created,omitempty"`      // 创建时间,支持时间查询
	Modified    *string        `url:"modified,omitempty"`     // 最后修改时间,支持时间查询
	WorkspaceID *int           `url:"workspace_id,omitempty"` // [必须]项目ID
	Limit       *int           `url:"limit,omitempty"`        // 设置返回数量限制,默认为30,最大取200
	Page        *int           `url:"page,omitempty"`         // 返回当前数量限制下第N页的数据,默认为1
	Order       *Order         `url:"order,omitempty"`        // 排序规则
	Fields      *Multi[string] `url:"fields,omitempty"`       // 设置获取的字段,多个字段间以','逗号隔开
}

type GetWorkCalendarSettingsRequest added in v0.17.0

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

type GetWorkItemsLongIDByShortIDsRequest added in v0.17.0

type GetWorkItemsLongIDByShortIDsRequest struct {
	ShortIDs    *string     `url:"short_ids,omitempty"`    // 短ID,多个以分号分隔;short_ids 和 long_ids 不允许都不传
	LongIDs     *string     `url:"long_ids,omitempty"`     // 长ID,多个以分号分隔
	WorkspaceID *int        `url:"workspace_id,omitempty"` // [必须]项目ID
	EntityType  *EntityType `url:"entity_type,omitempty"`  // [必须]业务对象类型,story、task、bug
}

type GetWorkItemsLongIDByShortIDsResponse added in v0.17.0

type GetWorkItemsLongIDByShortIDsResponse struct {
	ValidIDMap      []*WorkItemIDMap `json:"valid_id_map,omitempty"`      // 有效ID映射
	InvalidLongIDs  []string         `json:"invalid_long_ids,omitempty"`  // 无效长ID
	InvalidShortIDs []string         `json:"invalid_short_ids,omitempty"` // 无效短ID
}

type GetWorkitemTypesRequest added in v0.6.0

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

type GetWorkspaceCustomFieldsSettingsRequest added in v0.17.0

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

type GetWorkspaceDocumentsRequest added in v0.17.0

type GetWorkspaceDocumentsRequest struct {
	WorkspaceID *int           `url:"workspace_id,omitempty"` // [必须]项目ID
	Limit       *int           `url:"limit,omitempty"`        // 返回数量限制,默认为30,最大取200
	Page        *int           `url:"page,omitempty"`         // 当前页,默认为1
	Fields      *Multi[string] `url:"fields,omitempty"`       // 返回字段,多个以逗号分隔
}

type GetWorkspaceInfoRequest added in v0.15.0

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

type GetWorkspaceRolesRequest added in v0.17.0

type GetWorkspaceRolesRequest 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 IterationChange added in v0.17.0

type IterationChange struct {
	ID            string  `json:"id,omitempty"`            // 变更记录ID
	IterationID   string  `json:"iteration_id,omitempty"`  // 迭代ID
	Author        string  `json:"author,omitempty"`        // 变更人
	Field         string  `json:"field,omitempty"`         // 字段名称
	OldValue      *string `json:"old_value,omitempty"`     // 变更前
	NewValue      *string `json:"new_value,omitempty"`     // 变更后
	Memo          *string `json:"memo,omitempty"`          // 备注
	Created       string  `json:"created,omitempty"`       // 创建时间
	ModifyVersion string  `json:"modifyversion,omitempty"` // 变更版本
	OperaterType  string  `json:"operater_type,omitempty"` // 变更类型
	WorkspaceID   string  `json:"workspace_id,omitempty"`  // 项目ID
}

type IterationCustomDashBoardCard added in v0.17.0

type IterationCustomDashBoardCard struct {
	ID            string                               `json:"id,omitempty"`             // 卡片ID
	Template      string                               `json:"template,omitempty"`       // 卡片类型
	Title         string                               `json:"title,omitempty"`          // 卡片标题
	ComponentData string                               `json:"component_data,omitempty"` // 组件数据
	Width         string                               `json:"width,omitempty"`          // 宽度
	Height        string                               `json:"height,omitempty"`         // 高度
	CardType      string                               `json:"card_type,omitempty"`      // 卡片内容类型
	Data          *IterationCustomDashBoardCardContent `json:"data,omitempty"`           // 卡片内容
}

type IterationCustomDashBoardCardContent added in v0.17.0

type IterationCustomDashBoardCardContent struct {
	Content         string `json:"content,omitempty"`          // 卡片HTML内容
	DescriptionType string `json:"description_type,omitempty"` // 描述类型
	Value           string `json:"value,omitempty"`            // 卡片内容值
}

type IterationCustomFieldsSetting added in v0.17.0

type IterationCustomFieldsSetting struct {
	ID              string  `json:"id,omitempty"`           // 自定义字段配置的ID
	WorkspaceID     string  `json:"workspace_id,omitempty"` // 所属项目ID
	AppID           string  `json:"app_id,omitempty"`       // 应用ID
	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 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)

	// GetIterationCustomFieldsSettings 获取迭代自定义字段配置
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/iteration/get_iteration_custom_fields_settings.html
	GetIterationCustomFieldsSettings(
		ctx context.Context, request *GetIterationCustomFieldsSettingsRequest, opts ...RequestOption,
	) ([]*IterationCustomFieldsSetting, *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)

	// GetIterationChanges 获取迭代变更历史
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/iteration/get_iteration_changes.html
	GetIterationChanges(ctx context.Context, request *GetIterationChangesRequest, opts ...RequestOption) ([]*IterationChange, *Response, error)

	// GetIterationCustomDashBoardContent 获取迭代仪表盘自定义卡片内容
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/iteration/get_custom_dash_board_content.html
	GetIterationCustomDashBoardContent(
		ctx context.Context, request *GetIterationCustomDashBoardContentRequest, opts ...RequestOption,
	) ([]*IterationCustomDashBoardCard, *Response, error)

	// UpdateIterationCustomDashBoardContent 修改迭代仪表盘自定义卡片内容
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/iteration/update_custom_dash_board_content.html
	UpdateIterationCustomDashBoardContent(
		ctx context.Context, request *UpdateIterationCustomDashBoardContentRequest, opts ...RequestOption,
	) (*UpdateIterationCustomDashBoardContentResult, *Response, error)

	// LockIteration 锁定迭代
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/iteration/lock_iteration.html
	LockIteration(ctx context.Context, request *LockIterationRequest, opts ...RequestOption) (string, *Response, error)

	// UnlockIteration 解锁迭代
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/iteration/unlock_iteration.html
	UnlockIteration(ctx context.Context, request *UnlockIterationRequest, opts ...RequestOption) (string, *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)

	// GetIterationTemplateFields 获取迭代模板字段配置
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/iteration/template_fields.html
	GetIterationTemplateFields(
		ctx context.Context, request *GetIterationTemplateFieldsRequest, opts ...RequestOption,
	) ([]*IterationTemplateField, *Response, error)

	// GetIterationDefaultTemplateFields 获取迭代类别默认模板字段配置
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/iteration/default_template_fields_by_workitem_type_id.html
	GetIterationDefaultTemplateFields(
		ctx context.Context, request *GetIterationDefaultTemplateFieldsRequest, opts ...RequestOption,
	) ([]*IterationTemplateField, *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 IterationTemplateField added in v0.17.0

type IterationTemplateField 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"`         // 排序
}

type IterationTestPlan added in v0.17.0

type IterationTestPlan struct {
	WorkspaceID string `json:"workspace_id,omitempty"` // 项目ID
	IterationID string `json:"iteration_id,omitempty"` // 迭代ID
	TestPlanID  string `json:"test_plan_id,omitempty"` // 测试计划ID
}

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 LaunchAccessory added in v0.17.0

type LaunchAccessory struct {
	ID          string  `json:"id,omitempty"`           // 依据ID
	FormID      string  `json:"form_id,omitempty"`      // 发布评审ID
	WorkspaceID string  `json:"workspace_id,omitempty"` // 所属项目ID
	Type        string  `json:"type,omitempty"`         // 类型
	Tag         *string `json:"tag,omitempty"`          // 标签
	Title       string  `json:"title,omitempty"`        // 标题
	Content     string  `json:"content,omitempty"`      // 内容
	Description *string `json:"description,omitempty"`  // 详细描述
	ContentType *string `json:"content_type,omitempty"` // 内容类型
	CreatedBy   string  `json:"created_by,omitempty"`   // 创建人
	Created     string  `json:"created,omitempty"`      // 创建时间
	GroupID     *string `json:"group_id,omitempty"`     // 分组ID
	Source      string  `json:"source,omitempty"`       // 来源
}

type LaunchForm added in v0.17.0

type LaunchForm struct {
	ID             string  `json:"id,omitempty"`              // 评审ID
	WorkspaceID    string  `json:"workspace_id,omitempty"`    // 所属项目ID
	Created        string  `json:"created,omitempty"`         // 创建时间
	Title          *string `json:"title,omitempty"`           // 标题
	Name           string  `json:"name,omitempty"`            // 名称
	Creator        string  `json:"creator,omitempty"`         // 创建人
	Status         string  `json:"status,omitempty"`          // 状态
	VersionType    *string `json:"version_type,omitempty"`    // 版本类型
	Baseline       *string `json:"baseline,omitempty"`        // 基线
	ReleaseModel   *string `json:"release_model,omitempty"`   // 发布模块
	RoadmapVersion *string `json:"roadmap_version,omitempty"` // 路标版本
	ReleaseType    *string `json:"release_type,omitempty"`    // 发布类型
	ChangeType     *string `json:"change_type,omitempty"`     // 变更类型
	SignedBy       *string `json:"signed_by,omitempty"`       // 签发人
	ArchivedBy     *string `json:"archived_by,omitempty"`     // 发布确认人
	CC             *string `json:"cc,omitempty"`              // 抄送人
	ChangeNotifier *string `json:"change_notifier,omitempty"` // 变更通知人
	Signed         *string `json:"signed,omitempty"`          // 签发时间
	Archived       *string `json:"archived,omitempty"`        // 归档时间
	SignerResult   *string `json:"signer_result,omitempty"`   // 签发结论
	SignerComment  *string `json:"signer_comment,omitempty"`  // 签发意见
	ReleaseResult  *string `json:"release_result,omitempty"`  // 发布结果
	ReleaseComment *string `json:"release_comment,omitempty"` // 发布意见
	TestPath       *string `json:"test_path,omitempty"`       // 测试路径
	CreatedPath    *string `json:"created_path,omitempty"`    // 归档路径
	Remark         *string `json:"remark,omitempty"`          // 备注
	Participator   *string `json:"participator,omitempty"`    // 参与人
	TemplateID     string  `json:"template_id,omitempty"`     // 模板ID
	IterationID    *string `json:"iteration_id,omitempty"`    // 迭代ID
	ReleaseID      *string `json:"release_id,omitempty"`      // 发布计划ID
	Flows          string  `json:"flows,omitempty"`           // 流程状态
}

type LaunchFormActivityLog added in v0.17.0

type LaunchFormActivityLog struct {
	ID             string          `json:"id,omitempty"`               // 评审日志记录ID
	WorkspaceID    string          `json:"workspace_id,omitempty"`     // 所属项目ID
	Type           string          `json:"type,omitempty"`             // 类型
	FormID         string          `json:"form_id,omitempty"`          // 评审单ID
	ActivityFormID *string         `json:"activity_form_id,omitempty"` // 发布评审活动ID
	Field          string          `json:"field,omitempty"`            // 字段名
	OldValue       json.RawMessage `json:"old_value,omitempty"`        // 变更前
	NewValue       json.RawMessage `json:"new_value,omitempty"`        // 变更后
	CreatedBy      string          `json:"created_by,omitempty"`       // 创建人
	Created        string          `json:"created,omitempty"`          // 创建时间
	Operation      string          `json:"operation,omitempty"`        // 流程状态
	FactorResult   json.RawMessage `json:"factor_result,omitempty"`    // 评审要素
}

type LaunchFormCustomFieldsSetting added in v0.17.0

type LaunchFormCustomFieldsSetting struct {
	ID          string  `json:"id,omitempty"`           // 自定义字段配置的ID
	WorkspaceID string  `json:"workspace_id,omitempty"` // 所属项目ID
	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"`      // 自定义字段可选值
	Enabled     string  `json:"enabled,omitempty"`      // 是否启用
	Sort        *string `json:"sort,omitempty"`         // 显示时排序系数
	Memo        *string `json:"memo,omitempty"`         // 备注
}

type LaunchFormTemplate added in v0.17.0

type LaunchFormTemplate struct {
	ID   string `json:"id,omitempty"`   // 模板ID
	Name string `json:"name,omitempty"` // 模板名称
}

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 LinkBugsRequest added in v0.17.0

type LinkBugsRequest struct {
	WorkspaceID *int          `json:"workspace_id,omitempty"` // [必须]项目ID
	BugID       *int64        `json:"bug_id,omitempty"`       // [必须]原始缺陷ID
	RelateBugs  *Multi[int64] `json:"relate_bugs,omitempty"`  // [必须]关联缺陷ID,多个以逗号分隔
}

type LockIterationRequest added in v0.17.0

type LockIterationRequest struct {
	WorkspaceID *int           `json:"workspace_id,omitempty"` // [必须]项目ID
	IterationID *int64         `json:"iteration_id,omitempty"` // [必须]迭代ID
	LockTypes   *Multi[string] `json:"lock_types,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 Release added in v0.17.0

type Release struct {
	ID          string  `json:"id,omitempty"`           // ID
	WorkspaceID string  `json:"workspace_id,omitempty"` // 项目ID
	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"`      // 创建人
	Created     string  `json:"created,omitempty"`      // 创建时间
	Modified    string  `json:"modified,omitempty"`     // 最后修改时间
	Status      string  `json:"status,omitempty"`       // 状态
}

type ReleaseService added in v0.17.0

type ReleaseService interface {
	// CreateRelease 创建发布计划
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/release/add_new_release.html
	CreateRelease(ctx context.Context, request *CreateReleaseRequest, opts ...RequestOption) (*Release, *Response, error)

	// GetReleases 获取发布计划
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/release/get_releases.html
	GetReleases(ctx context.Context, request *GetReleasesRequest, opts ...RequestOption) ([]*Release, *Response, error)

	// GetReleasesCount 获取发布计划数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/release/get_releases_count.html
	GetReleasesCount(ctx context.Context, request *GetReleasesCountRequest, opts ...RequestOption) (int, *Response, error)

	// UpdateRelease 更新发布计划
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/release/update_new_release.html
	UpdateRelease(ctx context.Context, request *UpdateReleaseRequest, opts ...RequestOption) (*Release, *Response, error)

	// GetLaunchAccessories 获取发布评审依据
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/release/get_launch_accessories.html
	GetLaunchAccessories(ctx context.Context, request *GetLaunchAccessoriesRequest, opts ...RequestOption) ([]*LaunchAccessory, *Response, error)

	// GetLaunchForms 获取发布评审
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/release/get_launch_forms.html
	GetLaunchForms(ctx context.Context, request *GetLaunchFormsRequest, opts ...RequestOption) ([]*LaunchForm, *Response, error)

	// CreateLaunchForm 创建发布评审
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/release/add_launch_form.html
	CreateLaunchForm(ctx context.Context, request *CreateLaunchFormRequest, opts ...RequestOption) (*LaunchForm, *Response, error)

	// CreateLaunchAccessory 创建发布评审依据
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/release/add_launch_accessories.html
	CreateLaunchAccessory(ctx context.Context, request *CreateLaunchAccessoryRequest, opts ...RequestOption) (*LaunchAccessory, *Response, error)

	// GetLaunchFormsCount 获取发布评审数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/release/get_launch_forms_count.html
	GetLaunchFormsCount(ctx context.Context, request *GetLaunchFormsCountRequest, opts ...RequestOption) (int, *Response, error)

	// GetLaunchFormCustomFieldsSettings 获取发布评审自定义字段配置
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/release/get_launch_forms_custom_fields_settings.html
	GetLaunchFormCustomFieldsSettings(
		ctx context.Context, request *GetLaunchFormCustomFieldsSettingsRequest, opts ...RequestOption,
	) ([]*LaunchFormCustomFieldsSetting, *Response, error)

	// GetLaunchFormTemplates 获取发布评审模板
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/release/get_launch_forms_templates.html
	GetLaunchFormTemplates(ctx context.Context, request *GetLaunchFormTemplatesRequest, opts ...RequestOption) ([]*LaunchFormTemplate, *Response, error)

	// GetLaunchFormActivityLogs 获取发布评审日志
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/release/get_lauch_forms_activity_logs.html
	GetLaunchFormActivityLogs(
		ctx context.Context, request *GetLaunchFormActivityLogsRequest, opts ...RequestOption,
	) ([]*LaunchFormActivityLog, *Response, error)
}

ReleaseService 发布服务。

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

func NewReleaseService added in v0.17.0

func NewReleaseService(client *Client) ReleaseService

type RemoveStoryBugRelationRequest added in v0.17.0

type RemoveStoryBugRelationRequest struct {
	WorkspaceID *int    `json:"workspace_id,omitempty"` // [必须]项目ID
	StoryID     *int64  `json:"story_id,omitempty"`     // [必须]需求ID
	BugID       *int64  `json:"bug_id,omitempty"`       // [必须]缺陷ID
	CurrentUser *string `json:"current_user,omitempty"` // 操作人
}

type RemoveStoryBugRelationResult added in v0.17.0

type RemoveStoryBugRelationResult struct {
	Success bool `json:"success,omitempty"` // 是否解除成功
}

type RemoveTestCaseFromTestPlanRequest added in v0.17.0

type RemoveTestCaseFromTestPlanRequest struct {
	TestPlanID  *int64        `json:"test_plan_id,omitempty"` // [必须]测试计划ID
	WorkspaceID *int          `json:"workspace_id,omitempty"` // [必须]项目ID
	StoryID     *int64        `json:"story_id,omitempty"`     // 需求ID
	TestCaseID  *Multi[int64] `json:"tcase_id,omitempty"`     // [必须]测试用例ID,多个使用英文逗号分隔
}

type RemovedBug added in v0.17.0

type RemovedBug struct {
	ID             string `json:"id,omitempty"`              // 缺陷ID
	Title          string `json:"title,omitempty"`           // 标题
	Reporter       string `json:"reporter,omitempty"`        // 创建人
	Created        string `json:"created,omitempty"`         // 创建时间
	OperationUser  string `json:"operation_user,omitempty"`  // 删除人
	Modified       string `json:"modified,omitempty"`        // 删除时间
	RemovedComment string `json:"removed_comment,omitempty"` // 删除附加信息
	Type           string `json:"type,omitempty"`            // 删除操作类型
	NewBugURL      string `json:"new_bug_url,omitempty"`     // 新缺陷链接
}

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 RemovedTask added in v0.17.0

type RemovedTask 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 SaveStoryTimeRelation added in v0.17.0

type SaveStoryTimeRelation struct {
	WorkitemID    *int64  `json:"workitem_id,omitempty"`     // [必须]起点需求ID
	DstWorkitemID *int64  `json:"dst_workitem_id,omitempty"` // [必须]终点需求ID
	SrcField      *string `json:"src_field,omitempty"`       // [必须]起点字段,只能是 begin 或 due
	DstField      *string `json:"dst_field,omitempty"`       // [必须]终点字段,只能是 begin 或 due
}

type SaveStoryTimeRelationsRequest added in v0.17.0

type SaveStoryTimeRelationsRequest struct {
	WorkspaceID *int                     `json:"workspace_id,omitempty"` // [必须]项目ID
	Relations   []*SaveStoryTimeRelation `json:"relations,omitempty"`    // [必须]需要新增或修改的关系列表
	CurrentUser *string                  `json:"current_user,omitempty"` // [必须]执行此操作的用户 nick
}

type SaveStoryTimeRelationsResult added in v0.17.0

type SaveStoryTimeRelationsResult struct {
	Result bool `json:"result,omitempty"` // 是否保存成功
}

type SetCustomWorkCalendarRequest added in v0.17.0

type SetCustomWorkCalendarRequest struct {
	WorkspaceID *int      `json:"workspace_id,omitempty"` // [必须]项目ID
	Year        *string   `json:"year,omitempty"`         // [必须]年份
	Weekdays    *[]int    `json:"weekdays,omitempty"`     // 周内工作日,1-7;不传默认周一到周五
	Holidays    *[]string `json:"holidays,omitempty"`     // 额外假日
	Workdays    *[]string `json:"workdays,omitempty"`     // 额外工作日
}

type SetCustomWorkCalendarResponse added in v0.17.0

type SetCustomWorkCalendarResponse struct {
	Success bool `json:"success,omitempty"` // 是否设置成功
}

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 SourceService added in v0.17.0

type SourceService interface {
	// AddCodeCommitInfo 保存Commit提交数据
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/source/add_code_commit_info.html
	AddCodeCommitInfo(
		ctx context.Context, request *AddCodeCommitInfoRequest, opts ...RequestOption,
	) (*CodeCommitInfo, *Response, error)

	// GetCodeCommitInfos 获取GIT关联提交数据(GitCommit)
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/source/get_code_commit_infos.html
	GetCodeCommitInfos(
		ctx context.Context, request *GetCodeCommitInfosRequest, opts ...RequestOption,
	) ([]*CodeCommitInfo, *Response, error)

	// GetCommitObjects 获取指定commit关联的业务对象
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/source/get_commit_objects.html
	GetCommitObjects(
		ctx context.Context, request *GetCommitObjectsRequest, opts ...RequestOption,
	) ([]*CommitObject, *Response, error)
}

func NewSourceService added in v0.17.0

func NewSourceService(client *Client) SourceService

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 StoryBugRelation added in v0.17.0

type StoryBugRelation struct {
	ID          string `json:"id,omitempty"`           // 主键ID
	WorkspaceID string `json:"workspace_id,omitempty"` // 项目ID
	SourceType  string `json:"source_type,omitempty"`  // 源对象类型
	SourceID    string `json:"source_id,omitempty"`    // 源对象ID
	TargetType  string `json:"target_type,omitempty"`  // 目标对象类型
	TargetID    string `json:"target_id,omitempty"`    // 目标对象ID
	Created     string `json:"created,omitempty"`      // 创建时间
	Modified    string `json:"modified,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 StoryFieldLabel added in v0.15.0

type StoryFieldLabel struct {
	EN string `json:"en,omitempty"` // 字段英文名
	CN string `json:"cn,omitempty"` // 字段中文标签
}

type StoryFieldsInfo added in v0.17.0

type StoryFieldsInfo struct {
	Name           string                       `json:"name,omitempty"`             // 字段名
	HTMLType       StoryFieldsInfoHTMLType      `json:"html_type,omitempty"`        // 类型
	Label          string                       `json:"label,omitempty"`            // 中文名称
	Memo           string                       `json:"memo,omitempty"`             // 备注
	Readonly       int                          `json:"readonly,omitempty"`         // 是否只读
	Options        []StoryFieldsInfoOption      `json:"options,omitempty"`          // 候选值
	ColorOptions   []StoryFieldsInfoColorOption `json:"color_options,omitempty"`    // 带颜色的候选值
	PureOptions    []StoryFieldsInfoPureOption  `json:"pure_options,omitempty"`     // 原始候选值
	UserOptions    []StoryFieldsInfoUserOption  `json:"user_options,omitempty"`     // 用户候选值
	RawOptions     json.RawMessage              `json:"raw_options,omitempty"`      // 原始 options,保留级联等复杂结构
	RawPureOptions json.RawMessage              `json:"raw_pure_options,omitempty"` // 原始 pure_options
	RawUserOptions json.RawMessage              `json:"raw_user_options,omitempty"` // 原始 user_options
}

type StoryFieldsInfoColorOption added in v0.17.0

type StoryFieldsInfoColorOption struct {
	Value string `json:"value,omitempty"` // 值
	Label string `json:"label,omitempty"` // 中文名称
	Color string `json:"color,omitempty"` // 颜色
}

type StoryFieldsInfoHTMLType added in v0.17.0

type StoryFieldsInfoHTMLType string

StoryFieldsInfoHTMLType 需求字段控件类型。

const (
	StoryFieldsInfoHTMLTypeInput             StoryFieldsInfoHTMLType = "input"
	StoryFieldsInfoHTMLTypeSelect            StoryFieldsInfoHTMLType = "select"
	StoryFieldsInfoHTMLTypeRichEdit          StoryFieldsInfoHTMLType = "rich_edit"
	StoryFieldsInfoHTMLTypeUserChooser       StoryFieldsInfoHTMLType = "user_chooser"
	StoryFieldsInfoHTMLTypeSingleUserChooser StoryFieldsInfoHTMLType = "single_user_chooser"
	StoryFieldsInfoHTMLTypeDatetime          StoryFieldsInfoHTMLType = "datetime"
	StoryFieldsInfoHTMLTypeDateInput         StoryFieldsInfoHTMLType = "dateinput"
	StoryFieldsInfoHTMLTypeText              StoryFieldsInfoHTMLType = "text"
	StoryFieldsInfoHTMLTypeRadio             StoryFieldsInfoHTMLType = "radio"
	StoryFieldsInfoHTMLTypeFile              StoryFieldsInfoHTMLType = "file"
)

type StoryFieldsInfoOption added in v0.17.0

type StoryFieldsInfoOption struct {
	Key   string `json:"key,omitempty"`   // 英文Key
	Label string `json:"label,omitempty"` // 中文名称
}

type StoryFieldsInfoPureOption added in v0.17.0

type StoryFieldsInfoPureOption struct {
	ParentID       string `json:"parent_id,omitempty"`        // 父选项ID
	WorkspaceID    string `json:"workspace_id,omitempty"`     // 项目ID
	Sort           string `json:"sort,omitempty"`             // 排序
	WorkitemTypeID string `json:"workitem_type_id,omitempty"` // 需求类别ID
	PlanAppID      string `json:"plan_app_id,omitempty"`      // 规划应用ID
	OriginName     string `json:"origin_name,omitempty"`      // 原始名称
	Value          string `json:"value,omitempty"`            // 值
	Label          string `json:"label,omitempty"`            // 中文名称
	Panel          int    `json:"panel,omitempty"`            // 面板
}

type StoryFieldsInfoUserOption added in v0.17.0

type StoryFieldsInfoUserOption struct {
	Value string `json:"value,omitempty"` // 用户值
	Label string `json:"label,omitempty"` // 用户名称
}

type StoryLinkRelation added in v0.17.0

type StoryLinkRelation struct {
	Type              string `json:"type,omitempty"`                // 关系类型
	ID                string `json:"id,omitempty"`                  // 关联的需求ID
	StoryID           string `json:"story_id,omitempty"`            // 原需求ID
	WorkspaceID       string `json:"workspace_id,omitempty"`        // 项目ID
	ActAs             string `json:"actas,omitempty"`               // 角色
	Created           string `json:"created,omitempty"`             // 创建时间
	Modified          string `json:"modified,omitempty"`            // 最后修改时间
	LinkedWorkspaceID int    `json:"linked_workspace_id,omitempty"` // 关联项目ID
}

type StoryRelatedBug

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

type StorySecretInfo added in v0.17.0

type StorySecretInfo struct {
	Creator              string `json:"creator,omitempty"`                // 需求创建人
	AllowList            string `json:"allow_list,omitempty"`             // 保密需求树白名单
	SecretRootID         string `json:"secret_root_id,omitempty"`         // 保密需求树根节点,公开时为0
	AddParticipantFields string `json:"add_participant_fields,omitempty"` // 保密范围是否纳入参与人
	SecretScope          string `json:"secret_scrope,omitempty"`          // 保密范围,secret 为保密,public 为公开
}

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)

	// CreateStoryCategory 创建需求分类
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/add_story_category.html
	CreateStoryCategory(ctx context.Context, request *CreateStoryCategoryRequest, opts ...RequestOption) (*StoryCategory, *Response, error)

	// CopyStory 复制需求
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/copy_story.html
	CopyStory(ctx context.Context, request *CopyStoryRequest, opts ...RequestOption) (*Story, *Response, error)

	// GetStoryLinkStories 获取需求与其它需求的所有关联关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_link_stories.html
	GetStoryLinkStories(ctx context.Context, request *GetStoryLinkStoriesRequest, opts ...RequestOption) ([]*StoryLinkRelation, *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)

	// GetSecretStories 获取保密需求
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_secret_stories.html
	GetSecretStories(ctx context.Context, request *GetSecretStoriesRequest, opts ...RequestOption) ([]string, *Response, error)

	// GetSecretStoriesCount 获取保密需求数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_secret_stories_count.html
	GetSecretStoriesCount(ctx context.Context, request *GetSecretStoriesCountRequest, 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)

	// GetStoryChangesCount 获取需求变更次数
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_story_changes_count.html
	GetStoryChangesCount(ctx context.Context, request *GetStoryChangesCountRequest, opts ...RequestOption) (int, *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)

	// GetStoryTestCaseRelation 获取需求与测试用例关联关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_story_tcase.html
	GetStoryTestCaseRelation(ctx context.Context, request *GetStoryTestCaseRelationRequest, opts ...RequestOption) ([]*StoryTestCaseRelation, *Response, error)

	// GetStoryTimeRelations 获取需求前后置关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_time_relative_stories.html
	GetStoryTimeRelations(ctx context.Context, request *GetStoryTimeRelationsRequest, opts ...RequestOption) ([]*StoryTimeRelation, *Response, error)

	// SaveStoryTimeRelations 批量新增或修改需求前后置关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/save_time_relations.html
	SaveStoryTimeRelations(ctx context.Context, request *SaveStoryTimeRelationsRequest, opts ...RequestOption) (*SaveStoryTimeRelationsResult, *Response, error)

	// DeleteStoryTimeRelations 批量删除需求前后置关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/delete_time_relations.html
	DeleteStoryTimeRelations(ctx context.Context, request *DeleteStoryTimeRelationsRequest, opts ...RequestOption) (*DeleteStoryTimeRelationsResult, *Response, error)

	// GetStorySecretInfo 获取需求保密信息
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_secret_info.html
	GetStorySecretInfo(ctx context.Context, request *GetStorySecretInfoRequest, opts ...RequestOption) (*StorySecretInfo, *Response, error)

	// BatchUpdateStorySecretInfo 批量修改保密信息
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/batch_update_secret_info.html
	BatchUpdateStorySecretInfo(ctx context.Context, request *BatchUpdateStorySecretInfoRequest, opts ...RequestOption) (*BatchUpdateStorySecretInfoResult, *Response, error)

	// GetStoryWorkitemTypes 获取需求类别
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_workitem_types.html
	GetStoryWorkitemTypes(ctx context.Context, request *GetStoryWorkitemTypesRequest, opts ...RequestOption) ([]*StoryWorkitemType, *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)

	// BatchUpdateStories 批量更新需求
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/batch_update_story.html
	BatchUpdateStories(ctx context.Context, request *BatchUpdateStoriesRequest, opts ...RequestOption) (*BatchUpdateStoriesResponse, *Response, error)

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

	// GetStoryFieldsInfo 获取需求所有字段及候选值
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_story_fields_info.html
	GetStoryFieldsInfo(ctx context.Context, request *GetStoryFieldsInfoRequest, opts ...RequestOption) ([]*StoryFieldsInfo, *Response, error)

	// GetStorySteps 使用并行工作流的需求,获取其节点信息
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_story_steps.html
	GetStorySteps(ctx context.Context, request *GetStoryStepsRequest, opts ...RequestOption) ([]*StoryStepInfo, *Response, error)

	// GetStoryFieldsLabel 获取需求所有字段的中英文
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_story_fields_lable.html
	GetStoryFieldsLabel(ctx context.Context, request *GetStoryFieldsLabelRequest, opts ...RequestOption) ([]*StoryFieldLabel, *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)

	// UpdateStoryCategory 更新需求分类
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/update_story_category.html
	UpdateStoryCategory(ctx context.Context, request *UpdateStoryCategoryRequest, opts ...RequestOption) (*UpdatedStoryCategory, *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)

	// RemoveStoryBugRelation 解除需求缺陷关联关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/remove_story_bug_raletions.html
	RemoveStoryBugRelation(ctx context.Context, request *RemoveStoryBugRelationRequest, opts ...RequestOption) (*RemoveStoryBugRelationResult, *Response, error)

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

	// CreateStoryBugRelation 创建需求与缺陷关联关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/create_story_bug.html
	CreateStoryBugRelation(ctx context.Context, request *CreateStoryBugRelationRequest, opts ...RequestOption) (*StoryBugRelation, *Response, error)

	// CreateStoryTestCaseRelation 创建需求与测试用例关联关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/create_story_tcase.html
	CreateStoryTestCaseRelation(ctx context.Context, request *CreateStoryTestCaseRelationRequest, opts ...RequestOption) (*CreateStoryTestCaseRelationResult, *Response, error)

	// GetStoriesByViewConfID 获取视图对应的需求列表
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/get_stories_by_view_conf_id.html
	GetStoriesByViewConfID(ctx context.Context, request *GetStoriesByViewConfIDRequest, opts ...RequestOption) ([]*Story, *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)

	// CreateStoryLinkRelation 创建需求关联关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/story/add_story_link_relations.html
	CreateStoryLinkRelation(ctx context.Context, request *CreateStoryLinkRelationRequest, opts ...RequestOption) (*CreateStoryLinkRelationResult, *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 StoryStepInfo added in v0.17.0

type StoryStepInfo struct {
	ID           string  `json:"id,omitempty"`            // 节点记录ID
	WorkspaceID  string  `json:"workspace_id,omitempty"`  // 项目ID
	EntityType   string  `json:"entity_type,omitempty"`   // 对象类型
	WorkitemID   string  `json:"workitem_id,omitempty"`   // 需求ID
	Step         string  `json:"step,omitempty"`          // 节点原名
	Status       string  `json:"status,omitempty"`        // 节点状态
	Owner        string  `json:"owner,omitempty"`         // 节点负责人
	Begin        *string `json:"begin,omitempty"`         // 节点预计开始
	Due          *string `json:"due,omitempty"`           // 节点预计结束时间
	Effort       string  `json:"effort,omitempty"`        // 节点预估工时
	IterationID  string  `json:"iteration_id,omitempty"`  // 节点迭代
	BeginTime    string  `json:"begin_time,omitempty"`    // 实际开始时间
	CompleteTime string  `json:"complete_time,omitempty"` // 实际完成时间
	TimeCost     string  `json:"time_cost,omitempty"`     // 节点停留时长
	Completer    string  `json:"completer,omitempty"`     // 操作完成人
}

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 StoryTestCaseRelation added in v0.15.0

type StoryTestCaseRelation struct {
	ID          string `json:"id,omitempty"`
	WorkspaceID string `json:"workspace_id,omitempty"`
	TestPlanID  string `json:"test_plan_id,omitempty"`
	StoryID     string `json:"story_id,omitempty"`
	TcaseID     string `json:"tcase_id,omitempty"`
	Sort        string `json:"sort,omitempty"`
	Creator     string `json:"creator,omitempty"`
	Created     string `json:"created,omitempty"`
}

type StoryTimeRelation added in v0.17.0

type StoryTimeRelation struct {
	ID              string `json:"id,omitempty"`                // 前后置关系ID
	WorkspaceID     string `json:"workspace_id,omitempty"`      // 源项目ID
	WorkitemType    string `json:"workitem_type,omitempty"`     // 业务对象类型,固定为 story
	WorkitemID      string `json:"workitem_id,omitempty"`       // 源需求ID
	SrcField        string `json:"src_field,omitempty"`         // 源需求被依赖的字段
	DstWorkspaceID  string `json:"dst_workspace_id,omitempty"`  // 被依赖的项目ID
	DstWorkitemType string `json:"dst_workitem_type,omitempty"` // 被依赖的业务对象类型,固定为 story
	DstWorkitemID   string `json:"dst_workitem_id,omitempty"`   // 被依赖的需求ID
	DstField        string `json:"dst_field,omitempty"`         // 被依赖的字段
	RelationType    string `json:"relation_type,omitempty"`     // 依赖类型。before 为前置依赖,after 为后置依赖
}

type StoryWorkitemType added in v0.17.0

type StoryWorkitemType struct {
	ID             string `json:"id,omitempty"`               // 需求类别ID
	WorkspaceID    string `json:"workspace_id,omitempty"`     // 项目ID
	AppID          string `json:"app_id,omitempty"`           // 应用ID
	EntityType     string `json:"entity_type,omitempty"`      // 类别别名
	Name           string `json:"name,omitempty"`             // 需求类别名称
	EnglishName    string `json:"english_name,omitempty"`     // 英文名称
	Status         string `json:"status,omitempty"`           // 状态
	Color          string `json:"color,omitempty"`            // 颜色
	WorkflowID     string `json:"workflow_id,omitempty"`      // 工作流ID
	ChildrenIDs    string `json:"children_ids,omitempty"`     // 子类别ID
	ParentIDs      string `json:"parent_ids,omitempty"`       // 父类别ID
	Icon           string `json:"icon,omitempty"`             // 图标
	IconSmall      string `json:"icon_small,omitempty"`       // 小图标
	Creator        string `json:"creator,omitempty"`          // 创建人
	Created        string `json:"created,omitempty"`          // 创建时间
	ModifiedBy     string `json:"modified_by,omitempty"`      // 最后修改人
	Modified       string `json:"modified,omitempty"`         // 最后修改时间
	IconViper      string `json:"icon_viper,omitempty"`       // Viper图标
	IconSmallViper string `json:"icon_small_viper,omitempty"` // Viper小图标
}

type StringNumber added in v0.17.0

type StringNumber string

StringNumber 兼容官方响应中同一字段可能返回字符串或数字的 ID。

func (StringNumber) String added in v0.17.0

func (s StringNumber) String() string

func (*StringNumber) UnmarshalJSON added in v0.17.0

func (s *StringNumber) UnmarshalJSON(data []byte) error

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 TaskCustomFieldsSetting added in v0.17.0

type TaskCustomFieldsSetting 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 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 {
	Key   string `json:"key,omitempty"`   // 英文Key
	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

type TaskService interface {
	// CreateTask 创建任务
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/task/add_task.html
	CreateTask(ctx context.Context, request *CreateTaskRequest, opts ...RequestOption) (*Task, *Response, error)

	// GetTaskChanges 获取任务变更历史
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/task/get_task_changes.html
	GetTaskChanges(ctx context.Context, request *GetTaskChangesRequest, opts ...RequestOption) ([]*TaskChange, *Response, error)

	// GetTaskChangesCount 获取任务变更次数
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/task/get_task_changes_count.html
	GetTaskChangesCount(ctx context.Context, request *GetTaskChangesCountRequest, opts ...RequestOption) (int, *Response, error)

	// GetTaskCustomFieldsSettings 获取任务自定义字段配置
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/task/get_task_custom_fields_settings.html
	GetTaskCustomFieldsSettings(ctx context.Context, request *GetTaskCustomFieldsSettingsRequest, opts ...RequestOption) ([]*TaskCustomFieldsSetting, *Response, error)

	// GetTasks 获取任务
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/task/get_tasks.html
	GetTasks(ctx context.Context, request *GetTasksRequest, opts ...RequestOption) ([]*Task, *Response, error)

	// GetTasksCount 获取任务数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/task/get_tasks_count.html
	GetTasksCount(ctx context.Context, request *GetTasksCountRequest, opts ...RequestOption) (int, *Response, error)

	// UpdateTask 更新任务
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/task/update_task.html
	UpdateTask(ctx context.Context, request *UpdateTaskRequest, opts ...RequestOption) (*Task, *Response, error)

	// BatchUpdateTasks 批量更新任务
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/task/batch_update_task.html
	BatchUpdateTasks(ctx context.Context, request *BatchUpdateTasksRequest, opts ...RequestOption) (*BatchUpdateTasksResponse, *Response, error)

	// GetRemovedTasks 获取回收站下的任务
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/task/get_removed_tasks.html
	GetRemovedTasks(ctx context.Context, request *GetRemovedTasksRequest, opts ...RequestOption) ([]*RemovedTask, *Response, error)

	// GetTaskFieldsInfo 获取任务字段信息
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/task/get_task_fields_info.html
	GetTaskFieldsInfo(ctx context.Context, request *GetTaskFieldsInfoRequest, opts ...RequestOption) ([]*TaskFieldsInfo, *Response, error)
}

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 TestCase added in v0.17.0

type TestCase struct {
	ID                 string          `json:"id,omitempty"`                  // 测试用例ID
	MID                string          `json:"mid,omitempty"`                 // 测试用例MID
	Steps              *string         `json:"steps,omitempty"`               // 用例步骤
	WorkspaceID        string          `json:"workspace_id,omitempty"`        // 项目ID
	CategoryID         string          `json:"category_id,omitempty"`         // 用例目录
	Version            string          `json:"version,omitempty"`             // 版本
	Created            string          `json:"created,omitempty"`             // 创建时间
	Modifier           string          `json:"modifier,omitempty"`            // 最后修改人
	Modified           string          `json:"modified,omitempty"`            // 最后修改时间
	Creator            string          `json:"creator,omitempty"`             // 创建人
	Status             TestCaseStatus  `json:"status,omitempty"`              // 用例状态
	Name               string          `json:"name,omitempty"`                // 用例名称
	Precondition       *string         `json:"precondition,omitempty"`        // 前置条件
	Expectation        *string         `json:"expectation,omitempty"`         // 预期结果
	Sort               string          `json:"sort,omitempty"`                // 排序
	IndexCode          string          `json:"indexcode,omitempty"`           // 编号
	Type               string          `json:"type,omitempty"`                // 用例类型
	Priority           string          `json:"priority,omitempty"`            // 用例等级
	IsAutomated        string          `json:"is_automated,omitempty"`        // 是否自动化
	AutomationType     string          `json:"automation_type,omitempty"`     // 自动化类型
	AutomationPlatform string          `json:"automation_platform,omitempty"` // 自动化平台
	IsServing          string          `json:"is_serving,omitempty"`          // 是否服务中
	TemplateID         string          `json:"template_id,omitempty"`         // 模板ID
	CreatedFrom        string          `json:"created_from,omitempty"`        // 创建来源
	Result             *TestCaseResult `json:"TcaseResult,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"`
}

TestCase 测试用例

type TestCaseCategory added in v0.17.0

type TestCaseCategory 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
	Modified    string  `json:"modified,omitempty"`     // 最后修改时间
	Created     string  `json:"created,omitempty"`      // 创建时间
	Creator     *string `json:"creator,omitempty"`      // 目录创建人
	Modifier    *string `json:"modifier,omitempty"`     // 目录最后修改人
	Sorting     *string `json:"sorting,omitempty"`      // 目录排序序号
}

type TestCaseCustomFieldsSetting added in v0.17.0

type TestCaseCustomFieldsSetting struct {
	ID              string  `json:"id,omitempty"`           // 自定义字段配置的ID
	WorkspaceID     string  `json:"workspace_id,omitempty"` // 所属项目ID
	AppID           string  `json:"app_id,omitempty"`       // 应用ID
	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 TestCaseFieldsInfo added in v0.17.0

type TestCaseFieldsInfo struct {
	Name     string                     `json:"name,omitempty"`      // 字段名
	HTMLType TestCaseFieldsInfoHTMLType `json:"html_type,omitempty"` // 类型
	Label    string                     `json:"label,omitempty"`     // 中文名称
	Options  []TestCaseFieldsInfoOption `json:"options,omitempty"`   // 候选值
	Default  string                     `json:"default,omitempty"`   // 默认值
}

type TestCaseFieldsInfoHTMLType added in v0.17.0

type TestCaseFieldsInfoHTMLType string

TestCaseFieldsInfoHTMLType 测试用例字段控件类型。

const (
	TestCaseFieldsInfoHTMLTypeInput       TestCaseFieldsInfoHTMLType = "input"
	TestCaseFieldsInfoHTMLTypeSelect      TestCaseFieldsInfoHTMLType = "select"
	TestCaseFieldsInfoHTMLTypeQMEditor    TestCaseFieldsInfoHTMLType = "qmeditor"
	TestCaseFieldsInfoHTMLTypeDialog      TestCaseFieldsInfoHTMLType = "dialog"
	TestCaseFieldsInfoHTMLTypeUserChooser TestCaseFieldsInfoHTMLType = "user_chooser"
	TestCaseFieldsInfoHTMLTypeDateInput   TestCaseFieldsInfoHTMLType = "dateinput"
	TestCaseFieldsInfoHTMLTypeMultiSelect TestCaseFieldsInfoHTMLType = "multi_select"
	TestCaseFieldsInfoHTMLTypeText        TestCaseFieldsInfoHTMLType = "text"
)

type TestCaseFieldsInfoOption added in v0.17.0

type TestCaseFieldsInfoOption struct {
	Key   string `json:"key,omitempty"`   // 英文Key
	Label string `json:"label,omitempty"` // 中文名称
}

type TestCaseRelatedStory added in v0.17.0

type TestCaseRelatedStory struct {
	WorkspaceID string `json:"workspace_id,omitempty"` // 项目ID
	TestCaseID  string `json:"tcase_id,omitempty"`     // 测试用例ID
	StoryID     string `json:"story_id,omitempty"`     // 需求ID
	TestPlanID  string `json:"test_plan_id,omitempty"` // 测试计划ID
}

type TestCaseResult added in v0.17.0

type TestCaseResult struct {
	ID           string               `json:"id,omitempty"`            // 测试结果ID
	TestCaseID   string               `json:"tcase_id,omitempty"`      // 测试用例ID
	Created      string               `json:"created,omitempty"`       // 创建时间
	TestPlanID   string               `json:"test_plan_id,omitempty"`  // 测试计划ID
	ResultStatus TestCaseResultStatus `json:"result_status,omitempty"` // 结果状态
	ResultRemark *string              `json:"result_remark,omitempty"` // 结果备注
	WorkspaceID  string               `json:"workspace_id,omitempty"`  // 项目ID
	Status       string               `json:"status,omitempty"`        // 状态
	Executor     string               `json:"executor,omitempty"`      // 执行人
	ExecutedAt   string               `json:"executed_at,omitempty"`   // 执行时间
	BugID        []string             `json:"bug_id,omitempty"`        // 关联缺陷ID
	Bugs         []*Bug               `json:"Bug,omitempty"`           // 关联缺陷详情
}

func (*TestCaseResult) UnmarshalJSON added in v0.17.0

func (r *TestCaseResult) UnmarshalJSON(data []byte) error

type TestCaseResultItem added in v0.17.0

type TestCaseResultItem struct {
	ID     string          `json:"id,omitempty"`     // 测试结果ID
	Result *TestCaseResult `json:"result,omitempty"` // 测试结果
}

type TestCaseResultStatus added in v0.17.0

type TestCaseResultStatus string

TestCaseResultStatus 测试用例执行结果

const (
	TestCaseResultStatusPass       TestCaseResultStatus = "pass"       // 通过
	TestCaseResultStatusNoPass     TestCaseResultStatus = "no_pass"    // 不通过
	TestCaseResultStatusBlock      TestCaseResultStatus = "block"      // 阻塞
	TestCaseResultStatusUnexecuted TestCaseResultStatus = "unexecuted" // 未执行
)

func (TestCaseResultStatus) String added in v0.17.0

func (s TestCaseResultStatus) String() string

type TestCaseStatus added in v0.17.0

type TestCaseStatus string

TestCaseStatus 测试用例状态

const (
	TestCaseStatusNormal   TestCaseStatus = "normal"   // 正常
	TestCaseStatusUpdating TestCaseStatus = "updating" // 待更新
	TestCaseStatusAbandon  TestCaseStatus = "abandon"  // 已废弃
)

func (TestCaseStatus) String added in v0.17.0

func (s TestCaseStatus) String() string

type TestPlan added in v0.17.0

type TestPlan struct {
	ID            string  `json:"id,omitempty"`             // 测试计划ID
	WorkspaceID   string  `json:"workspace_id,omitempty"`   // 项目ID
	Name          string  `json:"name,omitempty"`           // 测试计划标题
	Description   string  `json:"description,omitempty"`    // 测试计划详细描述
	Version       string  `json:"version,omitempty"`        // 版本号
	Owner         string  `json:"owner,omitempty"`          // 测试计划负责人
	Status        string  `json:"status,omitempty"`         // 状态
	Type          string  `json:"type,omitempty"`           // 测试类型
	StartDate     *string `json:"start_date,omitempty"`     // 预计开始
	EndDate       *string `json:"end_date,omitempty"`       // 预计结束
	Creator       string  `json:"creator,omitempty"`        // 创建人
	Created       string  `json:"created,omitempty"`        // 创建时间
	Modified      string  `json:"modified,omitempty"`       // 最后修改时间
	Modifier      string  `json:"modifier,omitempty"`       // 修改人
	IterationID   string  `json:"iteration_id,omitempty"`   // 关联迭代ID
	TemplateID    string  `json:"template_id,omitempty"`    // 模板ID
	CreatedFrom   string  `json:"created_from,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"`
}

TestPlan 测试计划

type TestPlanFieldsInfo added in v0.17.0

type TestPlanFieldsInfo struct {
	Name     string                     `json:"name,omitempty"`      // 字段名
	HTMLType TestCaseFieldsInfoHTMLType `json:"html_type,omitempty"` // 类型
	Label    string                     `json:"label,omitempty"`     // 中文名称
	Options  []TestCaseFieldsInfoOption `json:"options,omitempty"`   // 候选值
}

type TestPlanProgress added in v0.17.0

type TestPlanProgress struct {
	StoryCount    int                          `json:"story_count,omitempty"`    // 需求数量
	TestCaseCount int                          `json:"tcase_count,omitempty"`    // 测试用例数量
	StatusCounter map[TestCaseResultStatus]int `json:"status_counter,omitempty"` // 各结果状态数量
	ExecutedRate  string                       `json:"executed_rate,omitempty"`  // 执行率
}

func (*TestPlanProgress) UnmarshalJSON added in v0.17.0

func (p *TestPlanProgress) UnmarshalJSON(data []byte) error

type TestPlanRelatedBug added in v0.17.0

type TestPlanRelatedBug struct {
	ID                        string                `json:"id,omitempty"`                       // 测试用例ID
	Name                      string                `json:"name,omitempty"`                     // 测试用例名称
	TestCaseResultRelatedBugs []*TestCaseResultItem `json:"tcase_result_relate_bugs,omitempty"` // 测试结果关联缺陷
}

func (*TestPlanRelatedBug) UnmarshalJSON added in v0.17.0

func (r *TestPlanRelatedBug) UnmarshalJSON(data []byte) error

type TestPlanTestCaseRelation added in v0.17.0

type TestPlanTestCaseRelation struct {
	ID          string `json:"id,omitempty"`           // 关系ID
	WorkspaceID string `json:"workspace_id,omitempty"` // 项目ID
	TestPlanID  string `json:"test_plan_id,omitempty"` // 测试计划ID
	StoryID     string `json:"story_id,omitempty"`     // 需求ID
	TestCaseID  string `json:"tcase_id,omitempty"`     // 测试用例ID
	Sort        string `json:"sort,omitempty"`         // 排序
	Creator     string `json:"creator,omitempty"`      // 创建人
	Created     string `json:"created,omitempty"`      // 创建时间
}

type TestService added in v0.17.0

type TestService interface {
	// CreateTestCase 创建测试用例
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/add_tcase.html
	CreateTestCase(ctx context.Context, request *CreateTestCaseRequest, opts ...RequestOption) (*TestCase, *Response, error)

	// BatchCreateTestCases 批量创建测试用例
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/batch_add_tcase.html
	BatchCreateTestCases(
		ctx context.Context, request *BatchCreateTestCasesRequest, opts ...RequestOption,
	) ([]*TestCase, *Response, error)

	// CreateTestCaseCategory 创建测试用例目录
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/add_tcase_category.html
	CreateTestCaseCategory(
		ctx context.Context, request *CreateTestCaseCategoryRequest, opts ...RequestOption,
	) (*TestCaseCategory, *Response, error)

	// CreateTestPlan 创建测试计划
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/add_test_plan.html
	CreateTestPlan(ctx context.Context, request *CreateTestPlanRequest, opts ...RequestOption) (*TestPlan, *Response, error)

	// AssignTestCase 分配测试用例
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/assign_tcase_instance.html
	AssignTestCase(ctx context.Context, request *AssignTestCaseRequest, opts ...RequestOption) (bool, *Response, error)

	// CreateTestPlanStoryRelation 创建测试计划和需求关联关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/create_story_relation.html
	CreateTestPlanStoryRelation(
		ctx context.Context, request *CreateTestPlanStoryRelationRequest, opts ...RequestOption,
	) (bool, *Response, error)

	// CreateTestPlanTestCaseRelation 创建测试计划和测试用例关联关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/create_tcase_relation.html
	CreateTestPlanTestCaseRelation(
		ctx context.Context, request *CreateTestPlanTestCaseRelationRequest, opts ...RequestOption,
	) (bool, *Response, error)

	// DeleteTestPlanStoryRelation 解除测试计划和需求关联关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/delete_story_relation.html
	DeleteTestPlanStoryRelation(
		ctx context.Context, request *DeleteTestPlanStoryRelationRequest, opts ...RequestOption,
	) (bool, *Response, error)

	// DeleteTestCaseStoryRelation 解除测试用例关联并移出测试计划
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/delete_tcase_story_relation.html
	DeleteTestCaseStoryRelation(
		ctx context.Context, request *DeleteTestCaseStoryRelationRequest, opts ...RequestOption,
	) (bool, *Response, error)

	// ExecuteTestCase 执行测试用例
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/execute_tcase_instance.html
	ExecuteTestCase(ctx context.Context, request *ExecuteTestCaseRequest, opts ...RequestOption) (bool, *Response, error)

	// GetTestCaseRelatedStories 获取测试用例关联的需求
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_story_by_tcase_id.html
	GetTestCaseRelatedStories(
		ctx context.Context, request *GetTestCaseRelatedStoriesRequest, opts ...RequestOption,
	) ([]*TestCaseRelatedStory, *Response, error)

	// GetTestCaseCategories 获取测试用例目录
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_tcase_categories.html
	GetTestCaseCategories(
		ctx context.Context, request *GetTestCaseCategoriesRequest, opts ...RequestOption,
	) ([]*TestCaseCategory, *Response, error)

	// GetTestCaseCategoriesCount 获取测试用例目录数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_tcase_categories_count.html
	GetTestCaseCategoriesCount(
		ctx context.Context, request *GetTestCaseCategoriesCountRequest, opts ...RequestOption,
	) (int, *Response, error)

	// GetTestCaseCustomFieldsSettings 获取测试用例自定义字段配置
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_tcase_custom_fields_settings.html
	GetTestCaseCustomFieldsSettings(
		ctx context.Context, request *GetTestCaseCustomFieldsSettingsRequest, opts ...RequestOption,
	) ([]*TestCaseCustomFieldsSetting, *Response, error)

	// GetTestCaseFieldsInfo 获取测试用例字段所有字段及候选值
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_tcase_fields_info.html
	GetTestCaseFieldsInfo(
		ctx context.Context, request *GetTestCaseFieldsInfoRequest, opts ...RequestOption,
	) ([]*TestCaseFieldsInfo, *Response, error)

	// GetTestCaseResults 获取测试用例执行结果
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_tcase_result.html
	GetTestCaseResults(
		ctx context.Context, request *GetTestCaseResultsRequest, opts ...RequestOption,
	) ([]*TestCaseResultItem, *Response, error)

	// GetTestCases 获取测试用例
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_tcases.html
	GetTestCases(ctx context.Context, request *GetTestCasesRequest, opts ...RequestOption) ([]*TestCase, *Response, error)

	// GetTestCasesCount 获取测试用例数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_tcases_count.html
	GetTestCasesCount(ctx context.Context, request *GetTestCasesCountRequest, opts ...RequestOption) (int, *Response, error)

	// GetTestPlanRelatedBugs 获取测试计划关联bug
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_test_plan_bugs.html
	GetTestPlanRelatedBugs(
		ctx context.Context, request *GetTestPlanRelatedBugsRequest, opts ...RequestOption,
	) ([]*TestPlanRelatedBug, *Response, error)

	// GetIterationTestPlans 获取迭代下测试计划
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_by_iteration_id.html
	GetIterationTestPlans(
		ctx context.Context, request *GetIterationTestPlansRequest, opts ...RequestOption,
	) ([]*IterationTestPlan, *Response, error)

	// GetTestPlanResult 获取测试计划测试结果
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_test_plan_details.html
	GetTestPlanResult(
		ctx context.Context, request *GetTestPlanResultRequest, opts ...RequestOption,
	) ([]*TestCase, *Response, error)

	// GetTestPlanProgress 获取测试计划执行进度
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_test_plan_progress.html
	GetTestPlanProgress(
		ctx context.Context, request *GetTestPlanProgressRequest, opts ...RequestOption,
	) (*TestPlanProgress, *Response, error)

	// GetTestPlanTestCaseRelations 获取测试计划与测试用例关联关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_test_plan_tcases.html
	GetTestPlanTestCaseRelations(
		ctx context.Context, request *GetTestPlanTestCaseRelationsRequest, opts ...RequestOption,
	) ([]*TestPlanTestCaseRelation, *Response, error)

	// GetTestPlans 获取测试计划
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_test_plans.html
	GetTestPlans(ctx context.Context, request *GetTestPlansRequest, opts ...RequestOption) ([]*TestPlan, *Response, error)

	// GetTestPlansCount 获取测试计划数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_test_plans_count.html
	GetTestPlansCount(ctx context.Context, request *GetTestPlansCountRequest, opts ...RequestOption) (int, *Response, error)

	// RemoveTestCaseFromTestPlan 测试用例移出测试计划
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/remove_tcase_instance.html
	RemoveTestCaseFromTestPlan(
		ctx context.Context, request *RemoveTestCaseFromTestPlanRequest, opts ...RequestOption,
	) (bool, *Response, error)

	// UpdateTestCase 更新测试用例
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/update_tcase.html
	UpdateTestCase(ctx context.Context, request *UpdateTestCaseRequest, opts ...RequestOption) (*TestCase, *Response, error)

	// UpdateTestPlan 编辑测试计划
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/update_test_plan.html
	UpdateTestPlan(ctx context.Context, request *UpdateTestPlanRequest, opts ...RequestOption) (*TestPlan, *Response, error)

	// GetTestPlanFieldsInfo 获取测试计划所有字段及候选值
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_test_plan_fields_info.html
	GetTestPlanFieldsInfo(
		ctx context.Context, request *GetTestPlanFieldsInfoRequest, opts ...RequestOption,
	) ([]*TestPlanFieldsInfo, *Response, error)

	// GetTestPlanRelatedStories 获取测试计划关联的需求
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/tcase/get_test_plan_relative_stories.html
	GetTestPlanRelatedStories(
		ctx context.Context, request *GetTestPlanRelatedStoriesRequest, opts ...RequestOption,
	) ([]string, *Response, error)
}

TestService 测试

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

func NewTestService added in v0.17.0

func NewTestService(client *Client) TestService

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 UnlockIterationRequest added in v0.17.0

type UnlockIterationRequest struct {
	WorkspaceID *int           `json:"workspace_id,omitempty"` // [必须]项目ID
	IterationID *int64         `json:"iteration_id,omitempty"` // [必须]迭代ID
	LockTypes   *Multi[string] `json:"lock_types,omitempty"`   // 解锁对象,多个使用英文逗号分隔
}

type UpdateBoardCardRequest added in v0.17.0

type UpdateBoardCardRequest struct {
	ID          *int64  `json:"id,omitempty"`           // [必须]工作项ID
	WorkspaceID *int    `json:"workspace_id,omitempty"` // [必须]项目ID
	BoardID     *int64  `json:"b_board_id,omitempty"`   // 看板ID
	ColumnID    *int64  `json:"b_column_id,omitempty"`  // 板块ID
	Name        *string `json:"name,omitempty"`         // 工作项标题
	Owner       *string `json:"owner,omitempty"`        // 负责人
	CC          *string `json:"cc,omitempty"`           // 参与人
	Status      *string `json:"status,omitempty"`       // 状态
	Begin       *string `json:"begin,omitempty"`        // 开始时间
	Due         *string `json:"due,omitempty"`          // 截止时间
	Label       *int64  `json:"b_label,omitempty"`      // 标签ID
	Description *string `json:"description,omitempty"`  // 详细描述
}

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 UpdateBugSystemSelectFieldOptionsRequest added in v0.17.0

type UpdateBugSystemSelectFieldOptionsRequest struct {
	WorkspaceID *int                          `json:"workspace_id,omitempty"` // [必须]项目ID
	Field       *string                       `json:"field,omitempty"`        // [必须]字段,目前支持 bugtype
	Options     []*BugSystemSelectFieldOption `json:"options,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 UpdateIterationCustomDashBoardContentRequest added in v0.17.0

type UpdateIterationCustomDashBoardContentRequest struct {
	WorkspaceID *int    `json:"workspace_id,omitempty"` // [必须]源项目ID
	IterationID *int64  `json:"iteration_id,omitempty"` // [必须]迭代ID
	CardID      *int64  `json:"card_id,omitempty"`      // [必须]卡片ID
	Content     *string `json:"content,omitempty"`      // [必须]卡片内容,支持富文本
	PlanAppID   *int64  `json:"plan_app_id,omitempty"`  // 计划应用ID,默认为0代表迭代应用
}

type UpdateIterationCustomDashBoardContentResult added in v0.17.0

type UpdateIterationCustomDashBoardContentResult struct {
	ID string `json:"id,omitempty"` // 卡片ID
}

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 UpdateReleaseRequest added in v0.17.0

type UpdateReleaseRequest struct {
	WorkspaceID *int    `json:"workspace_id,omitempty"` // [必须]项目ID
	ID          *int64  `json:"id,omitempty"`           // [必须]发布计划ID
	Name        *string `json:"name,omitempty"`         // 标题
	Description *string `json:"description,omitempty"`  // 详细描述
	StartDate   *string `json:"startdate,omitempty"`    // 开始时间
	EndDate     *string `json:"enddate,omitempty"`      // 结束时间
	Status      *string `json:"status,omitempty"`       // 状态
}

type UpdateStoryCategoryRequest added in v0.17.0

type UpdateStoryCategoryRequest struct {
	WorkspaceID *int    `json:"workspace_id,omitempty"` // [必须]项目ID
	ID          *int64  `json:"id,omitempty"`           // [必须]需求分类ID
	Name        *string `json:"name,omitempty"`         // 分类名称
	Description *string `json:"description,omitempty"`  // 分类描述
	ParentID    *int64  `json:"parent_id,omitempty"`    // 父分类ID
}

type UpdateStoryParentRequest added in v0.17.0

type UpdateStoryParentRequest struct {
	WorkspaceID *int   `json:"workspace_id,omitempty"` // [必须]项目ID
	StoryID     *int64 `json:"story_id,omitempty"`     // [必须]需求ID
	ParentID    *int64 `json:"parent_id,omitempty"`    // [必须]父需求ID
}

type UpdateStoryRequest

type UpdateStoryRequest struct {
	ID                *int64         `json:"id,omitempty"`                 // 必须
	WorkspaceID       *int           `json:"workspace_id,omitempty"`       // 必须
	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 UpdateStoryWorkitemTypeRequest added in v0.17.0

type UpdateStoryWorkitemTypeRequest struct {
	StoryID        *int64 `json:"story_id,omitempty"`         // [必须]需求ID
	WorkitemTypeID *int64 `json:"workitem_type_id,omitempty"` // [必须]目标需求类别ID
	WorkspaceID    *int   `json:"workspace_id,omitempty"`     // [必须]项目ID
}

type UpdateTaskRequest added in v0.17.0

type UpdateTaskRequest 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"`          // 任务详细描述
	Creator            *string        `json:"creator,omitempty"`              // 创建人
	Status             *TaskStatus    `json:"status,omitempty"`               // 状态
	Label              *Enum[string]  `json:"label,omitempty"`                // 标签
	Owner              *string        `json:"owner,omitempty"`                // 任务当前处理人
	CC                 *string        `json:"cc,omitempty"`                   // 抄送人
	Begin              *string        `json:"begin,omitempty"`                // 预计开始
	Due                *string        `json:"due,omitempty"`                  // 预计结束
	StoryID            *int64         `json:"story_id,omitempty"`             // 关联需求的ID
	IterationID        *int64         `json:"iteration_id,omitempty"`         // 所属迭代的ID
	Priority           *string        `json:"priority,omitempty"`             // 优先级。为了兼容自定义优先级,请使用 priority_label 字段
	PriorityLabel      *PriorityLabel `json:"priority_label,omitempty"`       // 优先级。推荐使用这个字段
	Progress           *int           `json:"progress,omitempty"`             // 进度
	Effort             *string        `json:"effort,omitempty"`               // 预估工时
	AutoCompleteEffort *int           `json:"auto_complete_effort,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"`
}

type UpdateTestCaseRequest added in v0.17.0

type UpdateTestCaseRequest = CreateTestCaseRequest

type UpdateTestPlanRequest added in v0.17.0

type UpdateTestPlanRequest struct {
	ID            *int64  `json:"id,omitempty"`             // [必须]测试计划ID
	Name          *string `json:"name,omitempty"`           // 测试计划标题
	Description   *string `json:"description,omitempty"`    // 测试计划详细描述
	WorkspaceID   *int    `json:"workspace_id,omitempty"`   // [必须]项目ID
	Modifier      *string `json:"modifier,omitempty"`       // 修改人
	Owner         *string `json:"owner,omitempty"`          // 测试计划负责人
	StartDate     *string `json:"start_date,omitempty"`     // 预计开始
	EndDate       *string `json:"end_date,omitempty"`       // 预计结束
	Version       *string `json:"version,omitempty"`        // 版本号
	Type          *string `json:"type,omitempty"`           // 测试类型
	Status        *string `json:"status,omitempty"`         // 状态,默认open
	TemplateID    *int64  `json:"template_id,omitempty"`    // 模板ID
	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"`
}

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 UpdateWikiRequest added in v0.17.0

type UpdateWikiRequest struct {
	ID                  *int64  `json:"id,omitempty"`                   // [必须]ID
	Name                *string `json:"name,omitempty"`                 // 标题
	MarkdownDescription *string `json:"markdown_description,omitempty"` // Markdown
	Description         *string `json:"description,omitempty"`          // 富文本
	Note                *string `json:"note,omitempty"`                 // 备注
	WorkspaceID         *int    `json:"workspace_id,omitempty"`         // [必须]项目ID
	ParentWikiID        *string `json:"parent_wiki_id,omitempty"`       // 父wiki ID
}

type UpdateWorkspaceInfoRequest added in v0.17.0

type UpdateWorkspaceInfoRequest struct {
	WorkspaceID *int    `json:"workspace_id,omitempty"` // [必须]项目ID
	Field       *string `json:"field,omitempty"`        // [必须]字段名
	Value       *string `json:"value,omitempty"`        // [必须]字段值
}

type UpdatedStoryCategory added in v0.17.0

type UpdatedStoryCategory 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 UploadAttachmentRequest added in v0.17.1

type UploadAttachmentRequest struct {
	WorkspaceID *int      `url:"workspace_id,omitempty"` // [必须]空间ID
	Type        *string   `url:"type,omitempty"`         // [必须]类型,固定为 story_custom_field
	CustomField *string   `url:"custom_field,omitempty"` // [必须]字段英文名
	EntryID     *int64    `url:"entry_id,omitempty"`     // [必须]工作项ID
	Owner       *string   `url:"owner,omitempty"`        // [可选]附件创建人
	Filename    *string   `url:"-"`                      // [必须]上传文件名
	File        io.Reader `url:"-"`                      // [必须]文件内容
}

type UploadImageBase64Request added in v0.17.1

type UploadImageBase64Request struct {
	WorkspaceID *int    `url:"workspace_id,omitempty"` // [必须]空间ID
	Base64Data  *string `url:"base64_data,omitempty"`  // [必须]图片 base64 格式数据
	Type        *string `url:"type,omitempty"`         // [必须]类型,固定为 story_custom_field
	CustomField *string `url:"custom_field,omitempty"` // [必须]字段英文名
	EntryID     *int64  `url:"entry_id,omitempty"`     // [必须]工作项ID
	Owner       *string `url:"owner,omitempty"`        // [可选]附件创建人
}

type User added in v0.12.0

type User struct {
	User             string   `json:"user"`
	UserID           string   `json:"user_id,omitempty"`
	RoleID           []string `json:"role_id"`
	Name             string   `json:"name"`
	Email            string   `json:"email,omitempty"`
	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 Wiki added in v0.17.0

type Wiki struct {
	ID                  string `json:"id,omitempty"`                   // ID
	Name                string `json:"name,omitempty"`                 // 标题
	WorkspaceID         string `json:"workspace_id,omitempty"`         // 项目ID
	Description         string `json:"description,omitempty"`          // 富文本
	MarkdownDescription string `json:"markdown_description,omitempty"` // Markdown
	IsRich              string `json:"is_rich,omitempty"`              // 是否富文本
	ParentWikiID        string `json:"parent_wiki_id,omitempty"`       // 父wiki ID
	Author              string `json:"author,omitempty"`               // 修改人
	Creator             string `json:"creator,omitempty"`              // 创建人
	Note                string `json:"note,omitempty"`                 // 备注
	ViewCount           string `json:"view_count,omitempty"`           // 浏览量
	Created             string `json:"created,omitempty"`              // 创建时间
	Modified            string `json:"modified,omitempty"`             // 最后修改时间
	Modifier            string `json:"modifier,omitempty"`             // 最后修改人
}

type WikiDrawioData added in v0.17.0

type WikiDrawioData struct {
	ID     string `json:"id,omitempty"`     // drawio 数据ID
	Values string `json:"values,omitempty"` // drawio XML 数据
}

type WikiEntityPermission added in v0.17.0

type WikiEntityPermission struct {
	ID          string `json:"id,omitempty"`           // 记录ID
	WorkspaceID string `json:"workspace_id,omitempty"` // 项目ID
	EntryType   string `json:"entry_type,omitempty"`   // 固定值 wiki
	TargetType  string `json:"target_type,omitempty"`  // 可访问的类型
	TargetID    string `json:"target_id,omitempty"`    // 用户昵称或用户组ID
	WikiID      string `json:"wiki_id,omitempty"`      // wiki ID
}

type WikiFollower added in v0.17.0

type WikiFollower struct {
	ID          string `json:"id,omitempty"`           // id
	WorkspaceID string `json:"workspace_id,omitempty"` // 项目ID
	Created     string `json:"created,omitempty"`      // 创建时间
	WikiID      string `json:"wiki_id,omitempty"`      // 关联的 wiki id
	User        string `json:"user,omitempty"`         // 关注者昵称
}

type WikiService added in v0.17.0

type WikiService interface {
	// CreateWiki 创建 wiki
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/wiki/add_tapd_wiki.html
	CreateWiki(ctx context.Context, request *CreateWikiRequest, opts ...RequestOption) (*Wiki, *Response, error)

	// GetWikis 获取 wiki
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/wiki/get_tapd_wikis.html
	GetWikis(ctx context.Context, request *GetWikisRequest, opts ...RequestOption) ([]*Wiki, *Response, error)

	// GetWikisCount 获取 Wiki 数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/wiki/get_tapd_wikis_count.html
	GetWikisCount(ctx context.Context, request *GetWikisCountRequest, opts ...RequestOption) (int, *Response, error)

	// UpdateWiki 更新 wiki
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/wiki/update_tapd_wiki.html
	UpdateWiki(ctx context.Context, request *UpdateWikiRequest, opts ...RequestOption) (*Wiki, *Response, error)

	// GetWikiDrawioData 获取 wiki drawio 数据
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/wiki/get_tapd_wikis_drawios.html
	GetWikiDrawioData(ctx context.Context, request *GetWikiDrawioDataRequest, opts ...RequestOption) (*WikiDrawioData, *Response, error)

	// GetWikiFollowers 获取 wiki 关注人数据
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/wiki/get_tapd_wikis_followers.html
	GetWikiFollowers(ctx context.Context, request *GetWikiFollowersRequest, opts ...RequestOption) ([]*WikiFollower, *Response, error)

	// GetWikiFollowersCount 获取 wiki 关注人数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/wiki/get_tapd_wikis_followers_count.html
	GetWikiFollowersCount(ctx context.Context, request *GetWikiFollowersCountRequest, opts ...RequestOption) (int, *Response, error)

	// GetWikiEntityPermissions 获取 wiki 可访问范围人员及用户组
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/wiki/get_tapd_wikis_entity_permissions.html
	GetWikiEntityPermissions(ctx context.Context, request *GetWikiEntityPermissionsRequest, opts ...RequestOption) ([]*WikiEntityPermission, *Response, error)

	// GetWikiTags 获取 wiki 标签信息
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/wiki/get_tapd_wikis_tags.html
	GetWikiTags(ctx context.Context, request *GetWikiTagsRequest, opts ...RequestOption) ([]*WikiTag, *Response, error)

	// GetWikiTagsCount 获取 wiki 标签信息数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/wiki/get_tapd_wikis_tags_count.html
	GetWikiTagsCount(ctx context.Context, request *GetWikiTagsCountRequest, opts ...RequestOption) (int, *Response, error)

	// GetWikiAttachmentsCount 获取 wiki 附件数量
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/wiki/get_tapd_wikis_attachments_count.html
	GetWikiAttachmentsCount(ctx context.Context, request *GetWikiAttachmentsCountRequest, opts ...RequestOption) (int, *Response, error)
}

WikiService Wiki 服务。

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

func NewWikiService added in v0.17.0

func NewWikiService(client *Client) WikiService

type WikiTag added in v0.17.0

type WikiTag struct {
	Creator string `json:"creator,omitempty"` // 标签创建人 nick
	Created string `json:"created,omitempty"` // 标签创建时间
	WikiID  string `json:"wiki_id,omitempty"` // wiki id
	Tag     string `json:"tag,omitempty"`     // 标签
}

type WorkCalendarSetting added in v0.17.0

type WorkCalendarSetting struct {
	Name   string           `json:"name,omitempty"`   // 工作日历名称
	Type   WorkCalendarType `json:"type,omitempty"`   // 工作日历类型
	Enable bool             `json:"enable,omitempty"` // 是否启用
}

type WorkCalendarType added in v0.17.0

type WorkCalendarType string

WorkCalendarType 工作日历类型。

const (
	WorkCalendarTypeSystem WorkCalendarType = "system"
	WorkCalendarTypeCustom WorkCalendarType = "custom"
)

type WorkItemIDMap added in v0.17.0

type WorkItemIDMap struct {
	ShortID     string     `json:"short_id,omitempty"`     // 短ID
	LongID      string     `json:"long_id,omitempty"`      // 长ID
	EntityType  EntityType `json:"entity_type,omitempty"`  // 业务对象类型
	WorkspaceID string     `json:"workspace_id,omitempty"` // 项目ID
	CompanyID   string     `json:"company_id,omitempty"`   // 公司ID
}

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 Workspace added in v0.15.0

type Workspace struct {
	ID                string         `json:"id,omitempty"`                  // 项目ID
	Name              string         `json:"name,omitempty"`                // 项目名称
	PrettyName        string         `json:"pretty_name,omitempty"`         // 项目显示名称
	Category          string         `json:"category,omitempty"`            // 项目类型
	Status            string         `json:"status,omitempty"`              // 项目状态
	Description       string         `json:"description,omitempty"`         // 项目描述
	Creator           string         `json:"creator,omitempty"`             // 创建人
	CreatorID         string         `json:"creator_id,omitempty"`          // 创建人ID
	Created           string         `json:"created,omitempty"`             // 创建时间
	BeginDate         *string        `json:"begin_date,omitempty"`          // 开始日期
	EndDate           *string        `json:"end_date,omitempty"`            // 结束日期
	Secrecy           string         `json:"secrecy,omitempty"`             // 是否保密
	ExternalOn        string         `json:"external_on,omitempty"`         // 是否开启外部协作
	NewTask           string         `json:"new_task,omitempty"`            // 是否启用新任务
	CompanyID         string         `json:"company_id,omitempty"`          // 公司ID
	ParentID          string         `json:"parent_id,omitempty"`           // 父项目ID
	TemplateID        string         `json:"template_id,omitempty"`         // 模板ID
	ProductType       *string        `json:"product_type,omitempty"`        // 产品类型
	PlatformType      *string        `json:"platform_type,omitempty"`       // 平台类型
	IsSelfDevelopment *string        `json:"is_self_development,omitempty"` // 是否自研
	Objective         string         `json:"objective,omitempty"`           // 项目目标
	Schedule          *string        `json:"schedule,omitempty"`            // 项目计划
	Milestone         *string        `json:"milestone,omitempty"`           // 里程碑
	Risk              *string        `json:"risk,omitempty"`                // 风险
	Closed            *string        `json:"closed,omitempty"`              // 是否关闭
	MemberCount       int            `json:"member_count,omitempty"`        // 成员数量
	WorkspaceExtends  map[string]any `json:"WorkspaceExtends,omitempty"`    // 项目扩展信息
}

type WorkspaceCustomFieldsSetting added in v0.17.0

type WorkspaceCustomFieldsSetting struct {
	ID              string  `json:"id,omitempty"`           // 自定义字段配置的ID
	WorkspaceID     string  `json:"workspace_id,omitempty"` // 所属项目ID
	AppID           string  `json:"app_id,omitempty"`       // 应用ID
	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 WorkspaceDocument added in v0.17.0

type WorkspaceDocument 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"`     // 最后修改时间
}

type WorkspaceRole added in v0.17.0

type WorkspaceRole struct {
	ID   string `json:"id,omitempty"`   // 角色ID
	Name string `json:"name,omitempty"` // 角色名称
}

type WorkspaceService

type WorkspaceService interface {
	// GetSubWorkspaces 获取子项目信息
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/get_sub_workspaces.html
	GetSubWorkspaces(
		ctx context.Context, request *GetSubWorkspacesRequest, opts ...RequestOption,
	) ([]*Workspace, *Response, error)

	// GetWorkspaceInfo 获取项目信息
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/get_workspace_info.html
	GetWorkspaceInfo(
		ctx context.Context, request *GetWorkspaceInfoRequest, opts ...RequestOption,
	) (*Workspace, *Response, error)

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

	// AddWorkspaceMember 添加项目成员
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/add_workspace_member.html
	AddWorkspaceMember(
		ctx context.Context, request *AddWorkspaceMemberRequest, opts ...RequestOption,
	) (*AddWorkspaceMemberResponse, *Response, error)

	// GetCompanyWorkspaces 获取公司项目列表
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/projects.html
	GetCompanyWorkspaces(
		ctx context.Context, request *GetCompanyWorkspacesRequest, opts ...RequestOption,
	) ([]*Workspace, *Response, error)

	// GetWorkspaceRoles 获取用户组ID对照关系
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/roles.html
	GetWorkspaceRoles(
		ctx context.Context, request *GetWorkspaceRolesRequest, opts ...RequestOption,
	) ([]*WorkspaceRole, *Response, error)

	// GetUserParticipantWorkspaces 获取用户参与的项目列表
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/user_participant_projects.html
	GetUserParticipantWorkspaces(
		ctx context.Context, request *GetUserParticipantWorkspacesRequest, opts ...RequestOption,
	) ([]*Workspace, *Response, error)

	// GetWorkspaceCustomFieldsSettings 获取项目自定义字段
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/workspace_custom_field_settings.html
	GetWorkspaceCustomFieldsSettings(
		ctx context.Context, request *GetWorkspaceCustomFieldsSettingsRequest, opts ...RequestOption,
	) ([]*WorkspaceCustomFieldsSetting, *Response, error)

	// UpdateWorkspaceInfo 更新项目信息
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/update_workspace_info.html
	UpdateWorkspaceInfo(
		ctx context.Context, request *UpdateWorkspaceInfoRequest, opts ...RequestOption,
	) (string, *Response, error)

	// GetWorkspaceDocuments 获取项目文档
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/get_workspace_documents.html
	GetWorkspaceDocuments(
		ctx context.Context, request *GetWorkspaceDocumentsRequest, opts ...RequestOption,
	) ([]*WorkspaceDocument, *Response, error)

	// SetCustomWorkCalendar 设置自定义工作日历
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/set_custom_work_calendar.html
	SetCustomWorkCalendar(
		ctx context.Context, request *SetCustomWorkCalendarRequest, opts ...RequestOption,
	) (*SetCustomWorkCalendarResponse, *Response, error)

	// EnableWorkCalendar 设置启用工作日历
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/enable_work_calendar.html
	EnableWorkCalendar(
		ctx context.Context, request *EnableWorkCalendarRequest, opts ...RequestOption,
	) (*EnableWorkCalendarResponse, *Response, error)

	// GetCustomWorkCalendar 获取自定义工作日历详情
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/get_custom_work_calendar.html
	GetCustomWorkCalendar(
		ctx context.Context, request *GetCustomWorkCalendarRequest, opts ...RequestOption,
	) (*CustomWorkCalendar, *Response, error)

	// GetWorkCalendarSettings 获取工作日历设置列表及启用选项
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/get_work_calendar_settings.html
	GetWorkCalendarSettings(
		ctx context.Context, request *GetWorkCalendarSettingsRequest, opts ...RequestOption,
	) ([]*WorkCalendarSetting, *Response, error)

	// GetWorkItemsLongIDByShortIDs 通过工作项短id换长id
	//
	// https://open.tapd.cn/document/api-doc/API%E6%96%87%E6%A1%A3/api_reference/workspace/get_workitems_long_id_by_short_ids.html
	GetWorkItemsLongIDByShortIDs(
		ctx context.Context, request *GetWorkItemsLongIDByShortIDsRequest, opts ...RequestOption,
	) (*GetWorkItemsLongIDByShortIDsResponse, *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