Exemplo n.º 1
0
        public static void Main(string[] args)
        {
            Console.WriteLine("Starting...");

            if (args == null || args.Length < 4)
            {
                Console.WriteLine("Need 4 parameters: database, user, pass, path");
                return;
            }

            string databaseName = args[0];
            string userName     = args[1];
            string password     = args[2];
            //string path = args[3];
            string congresses = args.Length > 4 ? args[4] : null;
            string path       = Directory.GetCurrentDirectory();

            path += "/../congress_downloader";

            SenateXmlLoader loader   = new SenateXmlLoader();
            var             sessions = loader.LoadSessions(path).OrderByDescending(s => s.Year).ThenBy(s => s.Session);

            IEnumerable <SenateSession> senateSessions = sessions;

            if (!string.IsNullOrEmpty(congresses))
            {
                var split = congresses.Split(",").ToList();
                senateSessions = sessions.Where(s => split.Contains(s.Congress));
            }

            foreach (SenateSession session in senateSessions)
            {
                ProcessSession(loader, path, session, databaseName, userName, password);
            }
        }
Exemplo n.º 2
0
        private static void ProcessSession(SenateXmlLoader loader, string path, SenateSession session, string databaseName, string userName, string password)
        {
            string connectionString = $"Server=localhost;Database={databaseName};User Id={userName};Password={password};";

            using SqlConnection connection = new SqlConnection(connectionString);
            connection.Open();
            int currentSessionId = 0;

            currentSessionId = InsertCongressionalSession(connection, session.Congress, session.Session, session.Year);

            IEnumerable <RollCallVote> votes = loader.GetRollCallVotes(path, session.Congress, session.Session)
                                               .OrderBy(v => Int32.TryParse(v.VoteNumber, out int voteNum) ? voteNum : -1);

            var groupedMembers = votes
                                 .SelectMany(v => v.Members.MemberElements)
                                 .GroupBy(m => m.LisMemberId)
                                 .Select(g => g.First())
                                 .Select(m => new KeyValuePair <string, Member>(m.LisMemberId, m));

            foreach (var kvpMember in groupedMembers)
            {
                InsertSenator(connection, kvpMember.Value);
            }

            foreach (RollCallVote vote in votes)
            {
                InsertLegislativeItem(connection, currentSessionId, vote);
            }

            Dictionary <string, int> legislativeItems =
                connection.Query <(int Id, int SessionID, string VoteNumber)> ($@"
                    SELECT Id, SessionID, VoteNumber 
                      FROM dbo.LegislativeItems
                     WHERE SessionID = @SessionID",
                                                                               new { SessionID = currentSessionId }).ToDictionary(i => i.VoteNumber, i => i.Id);

            Dictionary <string, int> senators =
                connection.Query <(string LisMemberId, int Id)> ($"SELECT LisMemberId, Id from dbo.Senators")
                .ToDictionary(i => i.LisMemberId, i => i.Id);

            foreach (RollCallVote vote in votes)
            {
                ProcessRollCallVote(legislativeItems, vote, connection, senators);
            }
        }