working trello api
This commit is contained in:
263
main.go
Normal file
263
main.go
Normal file
@@ -0,0 +1,263 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/csv"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/adlio/trello"
|
||||
"github.com/go-resty/resty/v2"
|
||||
)
|
||||
|
||||
var key = "5bfadedbf817bf6322ff7d05927775b9"
|
||||
var token = "8b7a3403f27d8068961c2c8520471b20d7c3e7e0dd5bb435b5505cd698415b53"
|
||||
|
||||
var authParams = map[string]string{
|
||||
"key": key,
|
||||
"token": token,
|
||||
}
|
||||
|
||||
func main() {
|
||||
client := trello.NewClient(key, token)
|
||||
//dumpBoardData(client) // dumps some board info
|
||||
cardList := readCSV()
|
||||
fmt.Printf("Discovered %d cards to input... starting now... \n\n", len(cardList))
|
||||
createCards(cardList, client)
|
||||
|
||||
}
|
||||
|
||||
func createCards(cardList [][]string, client *trello.Client) {
|
||||
for _, card := range cardList {
|
||||
var tCard trello.Card
|
||||
if card[3] != "" {
|
||||
date, err := time.Parse("01-02-2006", card[3]) // Google Sheet should have date formatted in this exact style
|
||||
if err != nil {
|
||||
fmt.Printf("Error parsing date for: %s with error: %s\n", card[0], err)
|
||||
return
|
||||
}
|
||||
tCard = trello.Card{
|
||||
IDList: "5f3034f8b483d68c0961cba8",
|
||||
Name: card[0],
|
||||
Desc: card[1],
|
||||
Due: &date,
|
||||
//IDCheckLists: []string{"6068a8f9ee98f04652e554ee"},
|
||||
}
|
||||
} else {
|
||||
tCard = trello.Card{
|
||||
IDList: "5f3034f8b483d68c0961cba8",
|
||||
Name: card[0],
|
||||
Desc: card[1],
|
||||
//IDCheckLists: []string{"6068a8f9ee98f04652e554ee"},
|
||||
}
|
||||
}
|
||||
//steps := client.GetChecklist("6068a8f9ee98f04652e554ee")
|
||||
|
||||
err := client.CreateCard(&tCard, trello.Arguments{"customFieldItems": "true"})
|
||||
if err != nil {
|
||||
fmt.Printf("Failure Creating card: %s err: %s\n", tCard.Name, err)
|
||||
return
|
||||
}
|
||||
fmt.Println("Success Creating Card: ", tCard.Name)
|
||||
fetchCard(tCard.Name, client, card)
|
||||
}
|
||||
}
|
||||
|
||||
func fetchCard(name string, client *trello.Client, cardInfo []string) {
|
||||
list, err := client.GetList("5f3034f8b483d68c0961cba8", trello.Defaults())
|
||||
if err != nil {
|
||||
fmt.Println("Failure getting list: ", err)
|
||||
return
|
||||
}
|
||||
cards, err := list.GetCards(trello.Arguments{"customFieldItems": "true"})
|
||||
if err != nil {
|
||||
fmt.Println("Error fetching cards for list: ", err)
|
||||
}
|
||||
|
||||
for _, card := range cards {
|
||||
if card.Name == name {
|
||||
if cardInfo[2] != "" {
|
||||
switch cardInfo[2] {
|
||||
case "TOP":
|
||||
card.MoveToTopOfList()
|
||||
case "BOTTOM":
|
||||
card.MoveToBottomOfList()
|
||||
}
|
||||
}
|
||||
rC := resty.New()
|
||||
|
||||
if cardInfo[6] != "" {
|
||||
triCountID := "5ef4f55cfb48ea34a560828d"
|
||||
bodyTriCount := fmt.Sprintf(`{ "value": { "text": "%s" } }`, cardInfo[6])
|
||||
resp, err := rC.R().
|
||||
SetQueryParams(authParams).
|
||||
SetHeader("Content-Type", "application/json").
|
||||
SetBody(bodyTriCount).
|
||||
Put(fmt.Sprintf("https://api.trello.com/1/cards/%s/customField/%s/item", card.ID, triCountID))
|
||||
if err != nil {
|
||||
fmt.Printf("Error updating tricount: %s err: %s\n", card.Name, err)
|
||||
}
|
||||
fmt.Println("Tri Count Response: ", resp)
|
||||
}
|
||||
|
||||
if cardInfo[5] != "" {
|
||||
maxTextureID := "5ef4c3b2fa3ad365c1ca4d1d"
|
||||
bodyTexture := fmt.Sprintf(`{ "value": { "number": "%s" } }`, cardInfo[5])
|
||||
respTextureSize, err := rC.R().
|
||||
SetQueryParams(authParams).
|
||||
SetHeader("Content-Type", "application/json").
|
||||
SetBody(bodyTexture).
|
||||
Put(fmt.Sprintf("https://api.trello.com/1/cards/%s/customField/%s/item", card.ID, maxTextureID))
|
||||
if err != nil {
|
||||
fmt.Printf("Error updating tricount: %s err: %s\n", card.Name, err)
|
||||
}
|
||||
fmt.Println("Texture Size Response: ", respTextureSize)
|
||||
}
|
||||
|
||||
if cardInfo[4] != "" {
|
||||
estTimeID := "5ee685ce2cd79c1a4154cc46"
|
||||
var intervalID string
|
||||
estTimeStr := cardInfo[4]
|
||||
switch estTimeStr {
|
||||
case "1H":
|
||||
intervalID = "5ee685ce2cd79c1a4154cc47"
|
||||
case "3H":
|
||||
intervalID = "5ee685ce2cd79c1a4154cc48"
|
||||
case "5H":
|
||||
intervalID = "5ee685ce2cd79c1a4154cc49"
|
||||
case "8H":
|
||||
intervalID = "5ee685ce2cd79c1a4154cc4a"
|
||||
}
|
||||
bodyTime := fmt.Sprintf(`{ "idValue": "%s" }`, intervalID)
|
||||
|
||||
respEstTime, err := rC.R().
|
||||
SetQueryParams(authParams).
|
||||
SetHeader("Content-Type", "application/json").
|
||||
SetBody(bodyTime).
|
||||
Put(fmt.Sprintf("https://api.trello.com/1/cards/%s/customField/%s/item", card.ID, estTimeID))
|
||||
if err != nil {
|
||||
fmt.Printf("Error updating estimated time: %s err: %s\n", card.Name, err)
|
||||
}
|
||||
fmt.Println("Estimated Time Response: ", respEstTime)
|
||||
}
|
||||
|
||||
attachArray := strings.Split(cardInfo[7], ",")
|
||||
for _, fileName := range attachArray {
|
||||
if fileName != "" {
|
||||
attachFile(card, fileName)
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Printf("Done Updating Card: %s \n Starting Next Card.....\n\n\n", card.Name)
|
||||
|
||||
//getCustomFields(client)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func attachFile(card *trello.Card, fileName string) {
|
||||
isCover := "false"
|
||||
if strings.Contains(fileName, "cover") {
|
||||
isCover = "true"
|
||||
}
|
||||
fullParams := authParams
|
||||
fullParams["setCover"] = isCover
|
||||
filePath := fmt.Sprintf("images/%s", fileName)
|
||||
fmt.Println("Attaching file from path: ", filePath)
|
||||
fileBin, err := os.ReadFile(filePath)
|
||||
if err != nil {
|
||||
fmt.Printf("Unable to open file: %s err: %s", "cover", err)
|
||||
}
|
||||
rC := resty.New()
|
||||
_, err = rC.R().
|
||||
SetQueryParams(fullParams).
|
||||
SetFileReader("file", fileName, bytes.NewReader(fileBin)).
|
||||
SetMultipartFormData(map[string]string{
|
||||
"name": fileName,
|
||||
}).
|
||||
Post(fmt.Sprintf("https://api.trello.com/1/cards/%s/attachments", card.ID))
|
||||
if err != nil {
|
||||
fmt.Printf("Error adding attachment: %s err: %s\n", card.Name, err)
|
||||
}
|
||||
}
|
||||
|
||||
func getCustomFields(client *trello.Client) {
|
||||
board, err := client.GetBoard("IsxWGAfF", trello.Defaults())
|
||||
if err != nil {
|
||||
fmt.Println("Error getting board: ", err)
|
||||
}
|
||||
fields, err := board.GetCustomFields(trello.Defaults())
|
||||
if err != nil {
|
||||
fmt.Println("Error getting fields: ", err)
|
||||
}
|
||||
for _, field := range fields {
|
||||
if field.Name == "Estimated Time" {
|
||||
option1 := field.Options[2]
|
||||
fmt.Printf("%+v\n", field)
|
||||
fmt.Printf("%+v\n", option1)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func readCSV() (cardList [][]string) {
|
||||
cardListCSV, err := os.Open("cards.csv")
|
||||
if err != nil {
|
||||
fmt.Println("Error opening csv file: ", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
reader := csv.NewReader(cardListCSV)
|
||||
|
||||
records, err := reader.ReadAll()
|
||||
if err != nil {
|
||||
fmt.Println("Error reading csv: ", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
cardList = records[1:]
|
||||
return cardList
|
||||
}
|
||||
|
||||
func dumpBoardData(client *trello.Client) {
|
||||
board, err := client.GetBoard("IsxWGAfF", trello.Defaults())
|
||||
if err != nil {
|
||||
fmt.Println("Error getting board: ", err)
|
||||
}
|
||||
fields, err := board.GetCustomFields(trello.Defaults())
|
||||
if err != nil {
|
||||
fmt.Println("Error getting fields: ", err)
|
||||
}
|
||||
for _, field := range fields {
|
||||
fmt.Printf("%+v\n", field)
|
||||
}
|
||||
lists, err := board.GetLists(trello.Defaults())
|
||||
if err != nil {
|
||||
fmt.Println("Error fetching lists: ", err)
|
||||
}
|
||||
|
||||
for _, list := range lists {
|
||||
//fmt.Println("List: ", list.ID, list.Name, i)
|
||||
if list.ID == "5f3034f8b483d68c0961cba8" {
|
||||
cards, err := list.GetCards(trello.Arguments{"customFieldItems": "true"})
|
||||
if err != nil {
|
||||
fmt.Println("Error fetching cards for list: ", err)
|
||||
}
|
||||
for _, card := range cards {
|
||||
if card.Name == "Obsidian" {
|
||||
fmt.Printf("%+v\n\n", card)
|
||||
customFieldItems := card.CustomFieldItems[0]
|
||||
fmt.Printf("%+v\n\n", customFieldItems)
|
||||
//fmt.Println("Im here NOW!", card)
|
||||
}
|
||||
|
||||
// checklist, err := client.GetChecklist("6068a8f9ee98f04652e554ee", trello.Defaults())
|
||||
// if err != nil {
|
||||
// fmt.Println("Unalbe to find checklist: ", err)
|
||||
// }
|
||||
// fmt.Printf("%+v\n", checklist)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user