diff --git a/Program.cs b/Program.cs index c16abbf..8c98877 100644 --- a/Program.cs +++ b/Program.cs @@ -15,18 +15,67 @@ class Program { Console.Clear(); // URL da API que você deseja chamar + string ConnSourcePath = @"C:\Users\contratos\Documents\Giuliano\Pipefy.accdb"; + string apiUrl = "https://api.pipefy.com/graphql"; string PipefyToken = "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJQaXBlZnkiLCJpYXQiOjE2OTg4NTYyMjcsImp0aSI6IjM2N2Y4M2NhLWZjODYtNGRhOC04ODEyLTkzODRkZGZkODc0MiIsInN1YiI6MzAyNTM0MzY2LCJ1c2VyIjp7ImlkIjozMDI1MzQzNjYsImVtYWlsIjoiYmFjazVAZW5lcmdpYXNtYXJ0LmNvbS5iciIsImFwcGxpY2F0aW9uIjozMDAyODkyNDgsInNjb3BlcyI6W119LCJpbnRlcmZhY2VfdXVpZCI6bnVsbH0.o13j9c_y3G3HX35qhX4PmkkibGsmlHsk5dL_Bxsr1CKV5Jlgj218kJdEmriS7aHiw0-P7sfs-bu4YcElfuyiqg"; - string ConnSourcePath = @"C:\Users\contratos\Documents\Giuliano\Pipefy.accdb"; - string PipefyTokenTableID = "b9t-7uD5"; + string PipefyTokenTableID = "wzirXS8w"; + JArray allRecords = await GetPipefyDataAsync(apiUrl,PipefyToken,PipefyTokenTableID); + JArray allGestores = await GetPipefyDataAsync(apiUrl, PipefyToken, "nuyW2tji"); + + Console.Clear(); + + if (allRecords is not null) + { + string strGestores = JsonConvert.SerializeObject(allGestores); + // Desserialize o JSON em objetos C# + var jsonGestores = JsonConvert.DeserializeObject>(strGestores); + + List jsonListGestores = convertGestoresJson(jsonGestores); + + string strJson = JsonConvert.SerializeObject(allRecords); + // Desserialize o JSON em objetos C# + var jsonData = JsonConvert.DeserializeObject>(strJson); + + List jsonList = convertEmpresasJson(jsonData); + + // Consulte os dados da tabela no banco de dados Access + List databaseData = GetDataFromDatabase(ConnSourcePath); + + // Compare os dados e encontre os registros ausentes no JSON + List recordsMissingInJson = CompareData(databaseData, jsonList, jsonListGestores); + + if (recordsMissingInJson.Count != 0) + { + // Faça algo com os registros ausentes + int maxCId = recordsMissingInJson.OrderByDescending(s => s.c_digo_smart.Length).First().c_digo_smart.Length; + int maxCNome = recordsMissingInJson.OrderByDescending(s => s.nome_da_empresa.Length).First().nome_da_empresa.Length; + int maxCMod = recordsMissingInJson.OrderByDescending(s => s.modalidade.Length).First().modalidade.Length; + int maxCGestao = recordsMissingInJson.OrderByDescending(s => s.gestores.Length).First().gestores.Length; + + foreach (var record in recordsMissingInJson) + { + Console.WriteLine(String.Format($"| ID: {{0,{maxCId}}} | Nome: {{1,{maxCNome}}} | Modalidade: {{2,{maxCMod}}} | Gestão: {{3,{maxCGestao}}} |",record.c_digo_smart,record.nome_da_empresa,record.modalidade,record.gestores)); + } + + Console.WriteLine($""); + + } + + Console.WriteLine($"{recordsMissingInJson.Count} registros encontrados."); + + } + } + private static async Task GetPipefyDataAsync(string apiUrl, string PipefyToken, string PipefyTokenTableID) + { + JArray allRecords = new JArray(); string? cursor = "null"; - string query = $"{{\"query\":\"query GetRecords($cursor: String){{ table_records(table_id: \\\"{PipefyTokenTableID}\\\",first:50,after:$cursor){{ pageInfo{{ hasNextPage endCursor }} edges{{ node{{ record_fields{{ field {{ id }} value array_value }} }} }} }}}}\",\"variables\":{{\"cursor\":{cursor}}}}}"; - //Console.WriteLine(query); + string query = $"{{\"query\":\"query GetRecords($cursor: String){{ table_records(table_id: \\\"{PipefyTokenTableID}\\\",first:50,after:$cursor){{ pageInfo{{ hasNextPage endCursor }} edges{{ node{{ id record_fields{{ field {{ id }} value array_value }} }} }} }}}}\",\"variables\":{{\"cursor\":{cursor}}}}}"; + bool hasNextPage = true; bool hasSucceeded = true; - JArray allRecords = new JArray(); while (hasNextPage) { @@ -63,40 +112,18 @@ class Program else { Console.WriteLine($"Erro na solicitação GraphQL: {response.StatusCode}"); - hasSucceeded = false; - break; + allRecords.Clear(); + return allRecords; } } - - Console.Clear(); - if (hasSucceeded) - { - string strJson = JsonConvert.SerializeObject(allRecords); - // Desserialize o JSON em objetos C# - var jsonData = JsonConvert.DeserializeObject>(strJson); - - List jsonList = convertJson(jsonData); - - // Consulte os dados da tabela no banco de dados Access - List databaseData = GetDataFromDatabase(ConnSourcePath); - - // Compare os dados e encontre os registros ausentes no JSON - List recordsMissingInJson = CompareData(databaseData, jsonList); - - if (recordsMissingInJson.Count == 0) { Console.WriteLine("Sem registros");} - - // Faça algo com os registros ausentes - foreach (var record in recordsMissingInJson) - { - Console.WriteLine($"Registro ausente no JSON - ID: {record.c_digo_smart}, Nome: {record.nome_da_empresa}"); - } - } + return allRecords; } - static List GetDataFromDatabase(string ConnSourcePath) + + static List GetDataFromDatabase(string ConnSourcePath) { string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ConnSourcePath; - List data = new List(); + List data = new List(); using (OleDbConnection connection = new OleDbConnection(connectionString)) { @@ -110,7 +137,7 @@ class Program { while (reader.Read()) { - ClasseEmpresas record = new ClasseEmpresas + Pipefy.ClasseEmpresas record = new Pipefy.ClasseEmpresas { c_digo_smart = (string)reader["Código Smart"].ToString(), nome_da_empresa = (string)reader["Nome da empresa"], @@ -127,13 +154,13 @@ class Program return data; } - static List convertJson(List jsonData) + static List convertEmpresasJson(List jsonData) { - List data = new List(); + List data = new List(); for (int i = 0;i CompareData(List databaseData, List jsonList) + static List convertGestoresJson(List jsonData) + { + List data = new List(); + + for (int i = 0; i < jsonData.Count; i++) + { + Pipefy.ClasseGestores record = new Pipefy.ClasseGestores(); + for (int j = 0; j < jsonData[i].node.record_fields.Length; j++) + { + switch (jsonData[i].node.record_fields[j].field.id) + { + case "gestor": + record.id = jsonData[i].node.record_fields.ToString(); + break; + case "gest_o": + record.gestores = jsonData[i].node.record_fields[j].value; + break; + + } + } + + // Adicione outras propriedades conforme necessário + data.Add(record); + } + + return data; + } + + static List CompareData(List databaseData, List jsonList, List jsonListGestores) { if (jsonList == null) { return databaseData; } - List recordsMissingInJson = new List(); + List recordsMissingInJson = new List(); var exists = false; foreach (var record in databaseData) @@ -179,7 +234,7 @@ class Program //Console.WriteLine(jsonList[j].c_digo_smart.ToString().Replace(".0", "") + " - " + record.c_digo_smart.ToString() + " - " + (jsonList[j].c_digo_smart.ToString().Replace(".0", "") == record.c_digo_smart.ToString())); - if (jsonList[j].c_digo_smart.ToString().Replace(".0", "") == record.c_digo_smart.ToString()) + if (jsonList[j].c_digo_smart?.ToString().Replace(".0", "") == record.c_digo_smart.ToString()) { exists = true; break; @@ -189,169 +244,31 @@ class Program Console.Clear(); - if (exists == false) { recordsMissingInJson.Add(record); } + if (exists == false) { + record.gestores = findGestores(record.gestores,jsonListGestores); + + if (record.gestores != "0") + { + recordsMissingInJson.Add(record); + } + else + { + int test = 10; + } + } } return recordsMissingInJson; } -} - - - -class ClasseEmpresas -{ - public string c_digo_smart { get; set; } - public string nome_da_empresa { get; set; } - public string modalidade { get; set; } - public string gestores { get; set; } - // Adicione outras propriedades conforme necessário -} - - - - - - - - - - - -//using System; -//using System.Data.OleDb; -//using System.Net.Http; -//using System.Net.Http.Headers; -//using System.Text.Json; -//using System.Threading.Tasks; -//using Newtonsoft.Json; -//using Newtonsoft.Json.Linq; -//using System.Collections.Generic; - -//class Program -//{ -// static async Task Main(string[] args) -// { -// // URL da API que você deseja chamar -// string apiUrl = "https://api.pipefy.com/graphql"; -// string PipefyToken = "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJQaXBlZnkiLCJpYXQiOjE2OTg4NTYyMjcsImp0aSI6IjM2N2Y4M2NhLWZjODYtNGRhOC04ODEyLTkzODRkZGZkODc0MiIsInN1YiI6MzAyNTM0MzY2LCJ1c2VyIjp7ImlkIjozMDI1MzQzNjYsImVtYWlsIjoiYmFjazVAZW5lcmdpYXNtYXJ0LmNvbS5iciIsImFwcGxpY2F0aW9uIjozMDAyODkyNDgsInNjb3BlcyI6W119LCJpbnRlcmZhY2VfdXVpZCI6bnVsbH0.o13j9c_y3G3HX35qhX4PmkkibGsmlHsk5dL_Bxsr1CKV5Jlgj218kJdEmriS7aHiw0-P7sfs-bu4YcElfuyiqg"; -// string ConnSourcePath = @"C:\Users\contratos\Documents\Giuliano\Pipefy.accdb"; -// string PipefyTokenTableID = "b9t-7uD5"; - - -// // Crie uma instância HttpClient -// using (HttpClient httpClient = new HttpClient()) -// { -// // Defina os headers da requisição (opcional) -// httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); -// httpClient.DefaultRequestHeaders.Add("Accept", "application/json"); -// httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + PipefyToken); - -// // Crie a consulta GraphQL -// //string rawGraphQuery = @"{""query"":""query{\r\n table_records(table_id: \""" + PipefyTokenTableID + @"\"") {\r\n edges {\r\n node {\r\n id\r\n record_fields{\r\n field{\r\n id\r\n }\r\n value\r\n }\r\n }\r\n }\r\n }\r\n}"",""variables"":{}}"; -// string rawGraphQuery = "{\"query\":\"query { table_records(table_id: \\\"" + PipefyTokenTableID + "\\\") { edges { node { id record_fields { field { id } value } } } } }\",\"variables\":{}}"; -// string query = /*lang=json,strict*/ rawGraphQuery; - -// // Defina o conteúdo do corpo da requisição -// var content = new StringContent(query, System.Text.Encoding.UTF8, "application/json"); - -// // Envie a requisição POST com a consulta GraphQL -// var response = await httpClient.PostAsync(apiUrl, content); - -// if (response.IsSuccessStatusCode) -// { -// string responseBody = await response.Content.ReadAsStringAsync(); - -// Console.WriteLine("Resposta bem-sucedida:"); -// Console.WriteLine(responseBody); - -// // Desserialize o JSON em objetos C# -// var jsonData = JsonConvert.DeserializeObject(responseBody); - -// // Consulte os dados da tabela no banco de dados Access -// List databaseData = GetDataFromDatabase(ConnSourcePath); - -// // Compare os dados e encontre os registros ausentes no JSON -// List recordsMissingInJson = CompareData(databaseData, jsonData); - -// // Faça algo com os registros ausentes -// foreach (var record in recordsMissingInJson) -// { -// Console.WriteLine($"Registro ausente no JSON - ID: {record.Id}, Nome: {record.Nome}"); -// } -// } -// else -// { -// Console.WriteLine($"Erro na requisição: {response.StatusCode}"); -// } -// } -// } -// static List GetDataFromDatabase(string ConnSourcePath) -// { -// string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ConnSourcePath; -// List data = new List(); - -// using (OleDbConnection connection = new OleDbConnection(connectionString)) -// { -// connection.Open(); - -// // Execute uma consulta SQL para recuperar dados da tabela no banco de dados Access -// string sqlQuery = "SELECT * FROM tblEmpresas"; -// using (OleDbCommand command = new OleDbCommand(sqlQuery, connection)) -// { -// using (OleDbDataReader reader = command.ExecuteReader()) -// { -// while (reader.Read()) -// { -// ClasseEmpresas record = new ClasseEmpresas -// { -// Id = (int)reader["id"], -// Nome = (string)reader["nome"], -// // Adicione outras propriedades conforme necessário -// }; -// data.Add(record); -// } -// } -// } -// } - -// return data; -// } - -// static List CompareData(List databaseData, Root? jsonData) -// { -// if(jsonData == null) { return databaseData; } - -// List recordsMissingInJson = new List(); - -// foreach (var record in databaseData) -// { -// if (!jsonData.Any(item => item.id == record.id)) -// { -// recordsMissingInJson.Add(record); -// } -// } - -// return recordsMissingInJson; -// } -//} - -//class Root -//{ -// public required List jsonData { get; set; } - -// internal bool Any(Func value) -// { -// throw new NotImplementedException(); -// } -//} -//class ClasseEmpresas -//{ -// public int Id { get; set; } -// public required string Nome { get; set; } - -// internal bool Any(Func value) -// { -// throw new NotImplementedException(); -// } -// // Adicione outras propriedades conforme necessário -//} \ No newline at end of file + static string findGestores(string sCodigo, List jsonListGestores) + { + for (var i = 0; i < jsonListGestores.Count; i++) + { + if (sCodigo == jsonListGestores[i].gestores?.ToString()) + { + return jsonListGestores[i].id; + } + } + return "0"; + } +} \ No newline at end of file diff --git a/data.cs b/data.cs index 101d2d9..428cc66 100644 --- a/data.cs +++ b/data.cs @@ -11,7 +11,7 @@ namespace Pipefy public Node node { get; set; } } - public class data + public class Data { public Node node { get; set; } } @@ -32,4 +32,20 @@ namespace Pipefy { public string id { get; set; } } + + public class ClasseEmpresas + { + public string c_digo_smart { get; set; } + public string nome_da_empresa { get; set; } + public string modalidade { get; set; } + public string gestores { get; set; } + + } + + public class ClasseGestores + { + public string id { get; set; } + public string gestores { get; set; } + + } }