Documentation
¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type LegacyDate ¶
LegacyDate is a type alias for time.Time, used to represent legacy date values in the API.
func (LegacyDate) MarshalJSON ¶
func (d LegacyDate) MarshalJSON() ([]byte, error)
MarshalJSON encodes the LegacyDate as a string in the format "20060102".
func (*LegacyDate) UnmarshalJSON ¶
func (d *LegacyDate) UnmarshalJSON(data []byte) error
UnmarshalJSON decodes a JSON string into a LegacyDate type.
type LegacyNumber ¶
type LegacyNumber int64
LegacyNumber is a type alias for int64, used to represent numeric values in the API.
func (LegacyNumber) MarshalJSON ¶
func (n LegacyNumber) MarshalJSON() ([]byte, error)
MarshalJSON encodes the LegacyNumber as a string.
func (*LegacyNumber) UnmarshalJSON ¶
func (n *LegacyNumber) UnmarshalJSON(data []byte) error
UnmarshalJSON decodes a JSON string into a LegacyNumber type.
type ProjectCreateRequest ¶
type ProjectCreateRequest struct {
// Name is the name of the project.
Name string `json:"name"`
// Description is an optional description of the project.
Description *string `json:"description,omitempty"`
// StartAt is an optional start date for the project. By default it doesn't
// have a start date.
StartAt *LegacyDate `json:"start-date,omitempty"`
// EndAt is an optional end date for the project. By default it doesn't have
// an end date.
EndAt *LegacyDate `json:"end-date,omitempty"`
// CompanyID is an optional ID of the company/client associated with the
// project. By default it is the ID of the company of the logged user
// creating the project.
CompanyID int64 `json:"companyId"`
// OwnerID is an optional ID of the user who owns the project. By default it
// is the ID of the logged user creating the project.
OwnerID *int64 `json:"projectOwnerId,omitempty"`
// Tags is an optional list of tag IDs associated with the project.
Tags []int64 `json:"tagIds,omitempty"`
}
ProjectCreateRequest represents the request body for creating a new project.
https://apidocs.teamwork.com/docs/teamwork/v1/projects/post-projects-json
func (ProjectCreateRequest) HTTPRequest ¶
func (c ProjectCreateRequest) HTTPRequest(ctx context.Context, server string) (*http.Request, error)
HTTPRequest creates an HTTP request for the ProjectCreateRequest.
type ProjectCreateResponse ¶
type ProjectCreateResponse struct {
// ID is the unique identifier of the created project.
ID LegacyNumber `json:"id"`
}
ProjectCreateResponse represents the response body for creating a new project.
https://apidocs.teamwork.com/docs/teamwork/v1/projects/post-projects-json
func ProjectCreate ¶
func ProjectCreate( ctx context.Context, engine *twapi.Engine, req ProjectCreateRequest, ) (*ProjectCreateResponse, error)
ProjectCreate creates a new project using the provided request and returns the response.
Example ¶
package main
import (
"context"
"fmt"
"net"
"net/http"
"time"
twapi "github.com/teamwork/twapi-go-sdk"
"github.com/teamwork/twapi-go-sdk/projects"
"github.com/teamwork/twapi-go-sdk/session"
)
func main() {
address, stop, err := startProjectCreateServer() // mock server for demonstration purposes
if err != nil {
fmt.Printf("failed to start server: %s", err)
return
}
defer stop()
ctx := context.Background()
engine := twapi.NewEngine(session.NewBearerToken("your_token", fmt.Sprintf("http://%s", address)))
project, err := projects.ProjectCreate(ctx, engine, projects.ProjectCreateRequest{
Name: "New Project",
Description: twapi.Ptr("This is a new project created via the API."),
StartAt: twapi.Ptr(projects.LegacyDate(time.Now().AddDate(0, 0, 1))), // Start tomorrow
EndAt: twapi.Ptr(projects.LegacyDate(time.Now().AddDate(0, 0, 30))), // End in 30 days
CompanyID: 12345, // Replace with your company ID
OwnerID: twapi.Ptr(int64(67890)), // Replace with the owner user ID
Tags: []int64{11111, 22222}, // Replace with your tag IDs
})
if err != nil {
fmt.Printf("failed to create project: %s", err)
} else {
fmt.Printf("created project with identifier %d\n", project.ID)
}
}
func startProjectCreateServer() (string, func(), error) {
ln, err := net.Listen("tcp", "localhost:0")
if err != nil {
return "", nil, fmt.Errorf("failed to start server: %w", err)
}
mux := http.NewServeMux()
mux.HandleFunc("/projects.json", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed)
return
}
if r.Header.Get("Content-Type") != "application/json" {
http.Error(w, "Unsupported Media Type", http.StatusUnsupportedMediaType)
return
}
if r.Header.Get("Authorization") != "Bearer your_token" {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
w.WriteHeader(http.StatusCreated)
w.Header().Set("Content-Type", "application/json")
_, _ = fmt.Fprintln(w, `{"id":"12345"}`)
})
server := &http.Server{
Handler: mux,
}
stop := make(chan struct{})
go func() {
_ = server.Serve(ln)
}()
go func() {
<-stop
_ = server.Shutdown(context.Background())
}()
return ln.Addr().String(), func() {
close(stop)
}, nil
}
Output: created project with identifier 12345
func (*ProjectCreateResponse) HandleHTTPResponse ¶
func (c *ProjectCreateResponse) HandleHTTPResponse(resp *http.Response) error
HandleHTTPResponse handles the HTTP response for the ProjectCreateResponse.