예제 #1
0
 public List <User> FindUsers(Dictionary <UserSearchParam, object> data, SearchMatching matching)
 {
     Contract.Requires(this.ActionPermitted(SystemAction.FindUser));
     this.TestPermission(SystemAction.FindUser, "You don't have permission to search for users");
     return(_dao.FindUsers(data, matching));
 }
예제 #2
0
 private List<VoterCard> PriFindVoterCards(Dictionary<VoterCardSearchParam, object> searchData, SearchMatching matching)
 {
     Contract.Requires(Transacting(), "Must be in transaction");
     Contract.Requires(searchData != null);
     Contract.Ensures(Contract.Result<List<VoterCard>>() != null);
     var searchParams = new Dictionary<string, string>()
                            {
                                {"person_id",null},
                                {"valid",null},
                                {"id_key",null}
                            };
     foreach (var kv in searchData)
     {
         switch (kv.Key)
         {
             case VoterCardSearchParam.CitizenId:
                 searchParams["person_id"] = kv.Value.ToString();
                 break;
             case VoterCardSearchParam.Valid:
                 Debug.Assert(kv.Value is bool, "Valid should be a boolean value");
                 searchParams["valid"] = (bool)kv.Value ? "1" : "0";
                 break;
             case VoterCardSearchParam.IdKey:
                 searchParams["id_key"] = kv.Value.ToString();
                 break;
         }
     }
     MySqlCommand findVoterCards = PrepareSearchQuery("voter_card", searchParams, matching);
     List<int> resultIds = new List<int>();
     Query(findVoterCards, (rdr) =>
     {
         while (rdr.Read())
         {
             resultIds.Add(rdr.GetInt32("id"));
         }
     });
     var result = new List<VoterCard>();
     foreach (int id in resultIds)
     {
         result.Add(PriLoadVoterCard(id));
     }
     return result;
 }
예제 #3
0
 public List <Citizen> FindCitizens(Dictionary <CitizenSearchParam, object> data, SearchMatching matching = SearchMatching.Similair)
 {
     Contract.Requires(this.ActionPermitted(SystemAction.FindCitizen));
     this.TestPermission(SystemAction.FindCitizen, "you don't have permission to search for citizens");
     return(_dao.FindCitizens(data, matching));
 }
예제 #4
0
 private List<Citizen> PriFindCitizens(Dictionary<CitizenSearchParam, object> searchData, SearchMatching matching)
 {
     Contract.Requires(Transacting(), "Must be within transaction");
     Contract.Requires(searchData != null);
     Contract.Ensures(Contract.Result<List<Citizen>>() != null);
     var searchParams = new Dictionary<string, string>()
                            {
                                {"address",null},
                                {"cpr",null},
                                {"eligible_to_vote",null},
                                {"has_voted",null},
                                {"voting_venue_id",null},
                                {"name",null}
                            };
     foreach (var kv in searchData)
     {
         switch (kv.Key)
         {
             case CitizenSearchParam.Address:
                 searchParams["address"] = kv.Value.ToString();
                 break;
             case CitizenSearchParam.Cpr:
                 searchParams["cpr"] = kv.Value.ToString();
                 break;
             case CitizenSearchParam.EligibleToVote:
                 Debug.Assert(kv.Value is bool, "Eligible to vote should be a boolean value");
                 searchParams["eligible_to_vote"] = (bool)kv.Value ? "1" : "0";
                 break;
             case CitizenSearchParam.HasVoted:
                 Debug.Assert(kv.Value is bool, "Has voted should be a boolean value");
                 searchParams["has_voted"] = (bool)kv.Value ? "1" : "0";
                 break;
             case CitizenSearchParam.Name:
                 searchParams["name"] = kv.Value.ToString();
                 break;
             case CitizenSearchParam.VotingPlace:
                 Debug.Assert(kv.Value is VotingVenue);
                 searchParams["voting_venue_id"] = ((VotingVenue)kv.Value).DbId.ToString();
                 break;
         }
     }
     MySqlCommand findCitizens = PrepareSearchQuery("person", searchParams, matching);
     List<int> resultIds = new List<int>();
     Query(findCitizens, (rdr) =>
                            {
                                while (rdr.Read())
                                {
                                    string cpr = "";
                                    DoIfNotDbNull(rdr, "cpr", lbl => { cpr = rdr.GetString(lbl); });
                                    if (Citizen.ValidCpr(cpr))
                                    {
                                        resultIds.Add(rdr.GetInt32("id"));
                                    }
                                }
                            });
     List<Citizen> result = new List<Citizen>();
     foreach (int id in resultIds)
     {
         result.Add(PriLoadCitizen(id));
     }
     return result;
 }
예제 #5
0
 private List<User> PriFindUsers(Dictionary<UserSearchParam, object> data, SearchMatching matching)
 {
     //WAIT
     throw new NotImplementedException();
 }
예제 #6
0
        /// <summary>
        /// May i have a search query with this data mapping?
        /// </summary>
        /// <param name="tableName">The table to search in</param>
        /// <param name="data">The data mapping to use KEY:column name VALUE:search value</param>
        /// <param name="matching">The search matching type to use</param>
        /// <returns></returns>
        private MySqlCommand PrepareSearchQuery(string tableName, Dictionary<string, string> data, SearchMatching matching)
        {
            Contract.Requires(tableName != null);
            Contract.Requires(data != null);
            var queryBuilder = new StringBuilder("SELECT * FROM " + tableName + " WHERE ");
            var first = true;
            var wildcards = false;

            foreach (var kv in data)
            {
                if (string.IsNullOrWhiteSpace(kv.Value)) continue;
                if (!first) queryBuilder.Append(" AND ");
                queryBuilder.Append(kv.Key);
                switch (matching)
                {
                    case SearchMatching.Similair:
                        queryBuilder.Append(" LIKE ");
                        wildcards = true;
                        break;
                    case SearchMatching.Exact:
                        queryBuilder.Append(" = ");
                        break;
                }
                queryBuilder.Append("@");
                queryBuilder.Append(kv.Key);
                first = false;
            }
            queryBuilder.Append(";");

            var cmd = this.Prepare(queryBuilder.ToString());

            foreach (var kv in data)
            {
                if (!string.IsNullOrWhiteSpace(kv.Value))
                {
                    string value = kv.Value;
                    if (wildcards) value = "%" + value + "%";
                    cmd.Parameters.AddWithValue("@" + kv.Key, value);
                }
            }
            return cmd;
        }
예제 #7
0
 public List<VoterCard> FindVoterCards(Dictionary<VoterCardSearchParam, object> data, SearchMatching matching = SearchMatching.Similair)
 {
     Contract.Requires(data != null);
     Contract.Ensures(Contract.Result<List<VoterCard>>() != null);
     return (List<VoterCard>)LoadWithTransaction(() => PriFindVoterCards(data, matching));
 }
예제 #8
0
 public List<User> FindUsers(Dictionary<UserSearchParam, object> data, SearchMatching matching = SearchMatching.Similair)
 {
     Contract.Requires(data != null);
     Contract.Ensures(Contract.Result<List<Citizen>>() != null);
     return (List<User>)LoadWithTransaction(() => PriFindUsers(data, matching));
 }
 public List<User> FindUsers(Dictionary<UserSearchParam, object> data, SearchMatching matching)
 {
     Contract.Requires(this.ActionPermitted(SystemAction.FindUser));
     this.TestPermission(SystemAction.FindUser, "You don't have permission to search for users");
     return _dao.FindUsers(data, matching);
 }
 public List<Citizen> FindCitizens(Dictionary<CitizenSearchParam, object> data, SearchMatching matching = SearchMatching.Similair)
 {
     Contract.Requires(this.ActionPermitted(SystemAction.FindCitizen));
     this.TestPermission(SystemAction.FindCitizen, "you don't have permission to search for citizens");
     return _dao.FindCitizens(data, matching);
 }