Exemplo n.º 1
0
        static void Main(string[] args)
        {
            const string separator = "=================================================================================================================================================";

            SharedLog sharedLog = new SharedLog();

            sharedLog.WriteLog(separator, "", SharedLog.FileName.Date, SharedLog.LogType.Message);
            sharedLog.WriteLog("Iniciando processo...", "", SharedLog.FileName.Date, SharedLog.LogType.Message);

            sharedLog.WriteLog("Recuperando informações de configuração.", "", SharedLog.FileName.Date, SharedLog.LogType.Message);

            // Recupera configurações necessárias.
            ConfigProperties configProperties =
                new ConfigProperties().readJsonConfigFile();

            if (!configProperties.Valid)
            {
                sharedLog.WriteLog(configProperties.Notifications.FirstOrDefault().Message, string.Empty, SharedLog.FileName.Date, SharedLog.LogType.Error);
                endProcess(sharedLog);
                return;
            }

            // Realiza todas validações necessárias para garantir que a classe está consistente.
            configProperties.ValidateReadingTextFile();

            if (configProperties.ReadingTextFile.Invalid)
            {
                sharedLog.WriteLog(configProperties.Notifications.FirstOrDefault().Message, "", SharedLog.FileName.Date, SharedLog.LogType.Error);
                endProcess(sharedLog);
                return;
            }

            sharedLog.WriteLog($@"Informações recuperadas com sucesso: [Caminho do arquivo:] {configProperties.ReadingTextFile.FilePath} [Nome do arquivo:] {configProperties.ReadingTextFile.FileName}.", "", SharedLog.FileName.Date, SharedLog.LogType.Message);

            sharedLog.WriteLog("Iniciando leitura do arquivo para recuperação das informações.", "", SharedLog.FileName.Date, SharedLog.LogType.Message);

            Estimate estimate = new Estimate();

            estimate.Topics = ReadFileText.readTextFileToObject(configProperties);

            // Recupera o primeiro tópico que possa estar com erro.
            var topicWithError = estimate.Topics.Where(t => t.Invalid).ToList().FirstOrDefault();

            if (topicWithError != null)
            {
                sharedLog.WriteLog(topicWithError.Notifications.FirstOrDefault().Message, "", SharedLog.FileName.Date, SharedLog.LogType.Error);
                endProcess(sharedLog);
                return;
            }

            if (estimate.Topics == null)
            {
                sharedLog.WriteLog("Erro ao realizar leitura do arquivo.", "", SharedLog.FileName.Date, SharedLog.LogType.Message);
                endProcess(sharedLog);
                return;
            }
            else
            {
                sharedLog.WriteLog("Leitura do arquivo e recuperação das informações realizado com sucesso.", "", SharedLog.FileName.Date, SharedLog.LogType.Message);
            }

            // Calcula tempo total para desenvolvimento.
            estimate.sumHoursDevelopment();

            // Calcula tempo total para testes
            estimate.sumHoursTest();

            sharedLog.WriteLog($@"Horas desenvolvimento: {estimate.TotalHoursDevelopment}.", "", SharedLog.FileName.Date, SharedLog.LogType.Message);
            sharedLog.WriteLog($@"Horas teste: {estimate.TotalHoursTest}.", "", SharedLog.FileName.Date, SharedLog.LogType.Message);

            sharedLog.WriteLog($@"Concluído processo de análise da estimativa de horas.", "", SharedLog.FileName.Date, SharedLog.LogType.Message);



            #region Processo para o Quadro.

            sharedLog.WriteLog($@"Iniciando processo para manipulação do quadro.", "", SharedLog.FileName.Date, SharedLog.LogType.Message);


            // Valida se está configurado para manipular o quadro.
            if (!configProperties.CreateBoard.Create)
            {
                sharedLog.WriteLog("Não está configurado para realizar a manipulação do quadro.", "", SharedLog.FileName.Date, SharedLog.LogType.Message);
                endProcess(sharedLog);
                return;
            }

            Authentication authentication = new Authentication(configProperties.CreateBoard.Key, configProperties.CreateBoard.Token);
            var            trello         = authentication.Authenticate();

            if (authentication.Invalid)
            {
                sharedLog.WriteLog($"Erro ao realizar autenticação do processo. Retorno: {authentication.Notifications.FirstOrDefault().Message}.", "", SharedLog.FileName.Date, SharedLog.LogType.Error);
                endProcess(sharedLog);
                return;
            }

            sharedLog.WriteLog($"Iniciando processo de atualização do quadro.", "", SharedLog.FileName.Date, SharedLog.LogType.Message);

            var updateTemplateBoard = new UpdateTemplateBoard
                                      (
                configProperties.CreateBoard.Key,
                configProperties.CreateBoard.Token,
                configProperties.CreateBoard.IdBoard,
                estimate,
                trello
                                      );

            UpdateBoard updateBoard = new UpdateBoard();

            updateBoard.UpdateTemplateBoard(updateTemplateBoard);

            if (updateTemplateBoard.Invalid)
            {
                sharedLog.WriteLog($"Erro ao realizar atualização do quadro. Retorno: {updateTemplateBoard.Notifications.FirstOrDefault().Message}.", "", SharedLog.FileName.Date, SharedLog.LogType.Error);
                endProcess(sharedLog);
                return;
            }

            sharedLog.WriteLog($"Concluído processo de criação dos cartões no quadro {updateTemplateBoard.TemplateBoard.Name}.", "", SharedLog.FileName.Date, SharedLog.LogType.Message);
            sharedLog.WriteLog($"Cartões criados:", "", SharedLog.FileName.Date, SharedLog.LogType.Message);

            int countCards = 0;

            foreach (var card in updateTemplateBoard.Cards)
            {
                countCards++;
                sharedLog.WriteLog($"{countCards} - {card.Name}", "", SharedLog.FileName.Date, SharedLog.LogType.Message);
            }

            sharedLog.WriteLog($"Concluído processo de atualização do quadro {updateTemplateBoard.TemplateBoard.Name}.", "", SharedLog.FileName.Date, SharedLog.LogType.Message);


            #endregion


            endProcess(sharedLog);
        }