| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- package plane_v2_api
- import (
- "fmt"
- plane "fwh-toolbox-server/repositories/api/plane_v2"
- )
- // ListCycles 列出项目周期
- func ListCycles(c *plane.PlaneClient, slug, projectID string) ([]byte, error) {
- url := fmt.Sprintf("/api/workspaces/%s/projects/%s/cycles/", slug, projectID)
- resp, err := c.Get(url)
- if err != nil {
- return nil, err
- }
- if !plane.IsSuccess(resp.StatusCode) {
- return nil, fmt.Errorf("ListCycles 失败: %s", resp.Status)
- }
- return resp.Body, nil
- }
- // CreateCycle 创建周期
- func CreateCycle(c *plane.PlaneClient, slug, projectID string, data map[string]interface{}) ([]byte, error) {
- url := fmt.Sprintf("/api/workspaces/%s/projects/%s/cycles/", slug, projectID)
- resp, err := c.Post(url, data)
- if err != nil {
- return nil, err
- }
- if !plane.IsSuccess(resp.StatusCode) {
- return nil, fmt.Errorf("CreateCycle 失败: %s, body=%s", resp.Status, string(resp.Body))
- }
- return resp.Body, nil
- }
- // GetCycle 获取周期详情
- func GetCycle(c *plane.PlaneClient, slug, projectID, cycleID string) ([]byte, error) {
- url := fmt.Sprintf("/api/workspaces/%s/projects/%s/cycles/%s/", slug, projectID, cycleID)
- resp, err := c.Get(url)
- if err != nil {
- return nil, err
- }
- if !plane.IsSuccess(resp.StatusCode) {
- return nil, fmt.Errorf("GetCycle 失败: %s", resp.Status)
- }
- return resp.Body, nil
- }
- // UpdateCycle 更新周期
- func UpdateCycle(c *plane.PlaneClient, slug, projectID, cycleID string, data map[string]interface{}) ([]byte, error) {
- url := fmt.Sprintf("/api/workspaces/%s/projects/%s/cycles/%s/", slug, projectID, cycleID)
- resp, err := c.Patch(url, data)
- if err != nil {
- return nil, err
- }
- if !plane.IsSuccess(resp.StatusCode) {
- return nil, fmt.Errorf("UpdateCycle 失败: %s, body=%s", resp.Status, string(resp.Body))
- }
- return resp.Body, nil
- }
- // DeleteCycle 删除周期
- func DeleteCycle(c *plane.PlaneClient, slug, projectID, cycleID string) error {
- url := fmt.Sprintf("/api/workspaces/%s/projects/%s/cycles/%s/", slug, projectID, cycleID)
- resp, err := c.Delete(url)
- if err != nil {
- return err
- }
- if resp.StatusCode != 204 {
- return fmt.Errorf("DeleteCycle 失败: %s", resp.Status)
- }
- return nil
- }
- // ListCycleIssues 列出周期工作项
- func ListCycleIssues(c *plane.PlaneClient, slug, projectID, cycleID string) ([]byte, error) {
- url := fmt.Sprintf("/api/workspaces/%s/projects/%s/cycles/%s/cycle-issues/", slug, projectID, cycleID)
- resp, err := c.Get(url)
- if err != nil {
- return nil, err
- }
- if !plane.IsSuccess(resp.StatusCode) {
- return nil, fmt.Errorf("ListCycleIssues 失败: %s", resp.Status)
- }
- return resp.Body, nil
- }
- // AddIssuesToCycle 添加工作项到周期
- func AddIssuesToCycle(c *plane.PlaneClient, slug, projectID, cycleID string, issueIDs []string) ([]byte, error) {
- url := fmt.Sprintf("/api/workspaces/%s/projects/%s/cycles/%s/cycle-issues/", slug, projectID, cycleID)
- payload := map[string]interface{}{
- "issues": issueIDs,
- }
- resp, err := c.Post(url, payload)
- if err != nil {
- return nil, err
- }
- if !plane.IsSuccess(resp.StatusCode) {
- return nil, fmt.Errorf("AddIssuesToCycle 失败: %s, body=%s", resp.Status, string(resp.Body))
- }
- return resp.Body, nil
- }
- // RemoveIssueFromCycle 从周期移除工作项
- func RemoveIssueFromCycle(c *plane.PlaneClient, slug, projectID, cycleID, issueID string) error {
- url := fmt.Sprintf("/api/workspaces/%s/projects/%s/cycles/%s/cycle-issues/%s/", slug, projectID, cycleID, issueID)
- resp, err := c.Delete(url)
- if err != nil {
- return err
- }
- if resp.StatusCode != 204 {
- return fmt.Errorf("RemoveIssueFromCycle 失败: %s", resp.Status)
- }
- return nil
- }
- // ArchiveCycle 归档周期
- func ArchiveCycle(c *plane.PlaneClient, slug, projectID, cycleID string) error {
- url := fmt.Sprintf("/api/workspaces/%s/projects/%s/cycles/%s/archive/", slug, projectID, cycleID)
- resp, err := c.Post(url, nil)
- if err != nil {
- return err
- }
- if !plane.IsSuccess(resp.StatusCode) {
- return fmt.Errorf("ArchiveCycle 失败: %s", resp.Status)
- }
- return nil
- }
- // UnarchiveCycle 取消归档周期
- func UnarchiveCycle(c *plane.PlaneClient, slug, projectID, cycleID string) error {
- url := fmt.Sprintf("/api/workspaces/%s/projects/%s/cycles/%s/archive/", slug, projectID, cycleID)
- resp, err := c.Delete(url)
- if err != nil {
- return err
- }
- if !plane.IsSuccess(resp.StatusCode) {
- return fmt.Errorf("UnarchiveCycle 失败: %s", resp.Status)
- }
- return nil
- }
|