public static bool TryParseFromName(string sprintName, out TrelloSprint result) { try { var split = sprintName.Split(' '); var year = int.Parse(split[0]); var dateSplit = split[1].Split('-'); var startSplit = dateSplit[0].Split('/'); var startMonth = int.Parse(startSplit[0]); var startDay = int.Parse(startSplit[1]); var startDate = new DateTime(year, startMonth, startDay); var endSplit = dateSplit[1].Split('/'); var endMonth = int.Parse(endSplit[0]); var endDay = int.Parse(endSplit[1]); var endDate = new DateTime(year, endMonth, endDay).AddDays(1).AddSeconds(-1); result = GetSprint(startDate); // todo: 期待するスプリントフォーマットか検証する return(true); } catch { result = new TrelloSprint(); return(false); } }
/// <summary> /// yyyy MM/dd-MMdd /// ってフォーマットのボード名の中から、 /// 現在の日付内のBoardを取得する。 /// 存在しなかった場合、新規作成する。 /// </summary> private async Task <IBoard> GetCurrentBoard(DateTime jstDateTime) { var targetSprint = TrelloSprint.GetSprint(jstDateTime); var me = await trelloFactory.Me(); foreach (var board in me.Boards) { if (!TrelloSprint.TryParseFromName(board.Name, out var result)) { continue; } if (result.Number == targetSprint.Number) { return(board); } } // not found baord. create board. var newBaord = await me.Boards.Add(targetSprint.Name); await newBaord.Refresh(); await newBaord.Lists.Refresh(); var listNames = new string[] { "todo", "progress", "done" }; // listが少なかったら追加する while (newBaord.Lists.Count() < listNames.Length) { await newBaord.Lists.Add($"tmp{newBaord.Lists.Count()}"); await newBaord.Lists.Refresh(); } for (int i = 0; i < listNames.Length; i++) { newBaord.Lists[i].Name = listNames[i]; await newBaord.Lists.Refresh(); } await me.StarredBoards.Add(newBaord); await newBaord.Lists.Refresh(); return(newBaord); }