Files
trello_card_creator/main.go
2021-05-09 13:22:43 -04:00

264 lines
7.4 KiB
Go

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