Created
February 3, 2019 19:08
-
-
Save ketanbhatt/56c86628df6d9fc2733904297b810213 to your computer and use it in GitHub Desktop.
Get scrum retro using Trello's API, in Scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import spray.json._ | |
import DefaultJsonProtocol._ | |
object Main extends App { | |
class Card(val cardId: String, val name: String, val cardType: String, val effortHours: Double) { | |
def formatCard(idx: Int): String = { | |
idx + ". " + name + ": [" + effortHours + " hour(s)]" | |
} | |
} | |
val authParams = Map( | |
"key" -> "--key--", | |
"token" -> "--token--" | |
) | |
def fetchCardsfromTrello(requestParams: Map[String, String]): String = { | |
val searchURL = "https://trello.com/1/search" | |
val response = requests.get(searchURL, params=requestParams) | |
assert(response.statusCode == 200) | |
response.text | |
} | |
def fetchCardDetailsfromTrello(cardId: String, requestParams: Map[String, String]): String = { | |
val cardUrl = "https://api.trello.com/1/cards/" + cardId | |
val response = requests.get(cardUrl, params=requestParams) | |
assert(response.statusCode == 200) | |
response.text | |
} | |
def getArchivedCardIds(days: String): List[String] = { | |
var searchParams = Map( | |
"query" -> ("is:archived board:GTD! edited:" + days + " sort:-edited"), | |
"card_fields" -> "dateLastActivity", | |
"cards_limit" -> "1000" | |
) | |
searchParams ++= authParams | |
val cardsJson = fetchCardsfromTrello(searchParams).parseJson.asJsObject.fields("cards") | |
cardsJson.convertTo[List[Map[String, String]]].map(card => card("id")) | |
} | |
def getEffort(customFields: List[Map[String, JsValue]]): Double = { | |
val effortFieldId = "5bb36a7085958b30ecc1e0c2" | |
var effort = 0.0 | |
customFields.foreach(field => { | |
if (field("idCustomField").toString == effortFieldId) { | |
effort = field("value").convertTo[Map[String, String]].apply("number").toFloat | |
} | |
}) | |
effort | |
} | |
def getCard(cardId: String): Card = { | |
var cardParams = Map( | |
"fields" -> "name,idList", | |
"customFieldItems" -> "true" | |
) | |
cardParams ++= authParams | |
val cardJson = fetchCardDetailsfromTrello(cardId, cardParams).parseJson.asJsObject.fields | |
val customFields = cardJson("customFieldItems").convertTo[List[Map[String, JsValue]]] | |
val cardName = cardJson("name").toString | |
new Card( | |
cardId, | |
name = cardName.substring(1, cardName.length - 1), | |
cardType = "", | |
effortHours = getEffort(customFields) | |
) | |
} | |
var daysLastEdited = "1" | |
if (args.length > 0) | |
daysLastEdited = args(0) | |
val cardIds = getArchivedCardIds(daysLastEdited) | |
cardIds.zipWithIndex foreach { case(cardId, idx) => { | |
val card = getCard(cardId) | |
println(card.formatCard(idx + 1)) | |
}} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment