Skip to content

Commit

Permalink
Added member bill cosponsorship endpoint.
Browse files Browse the repository at this point in the history
  • Loading branch information
babelshift committed Feb 16, 2017
1 parent 7317789 commit 4480a11
Show file tree
Hide file tree
Showing 8 changed files with 154 additions and 5 deletions.
3 changes: 3 additions & 0 deletions ProPublicaCongressAPI/AutoMapperConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ public static void Initialize()
x.CreateMap<InternalModels.MemberBillSponsorshipComparison, Contracts.MemberBillSponsorshipComparison>();
x.CreateMap<InternalModels.MemberBillSponsorshipComparisonContainer, Contracts.MemberBillSponsorshipComparisonContainer>();
x.CreateMap<InternalModels.MemberBillCosponsored, Contracts.MemberBillCosponsored>();
x.CreateMap<InternalModels.MemberBillsCosponsoredContainer, Contracts.MemberBillsCosponsoredContainer>();
});

}
Expand Down
9 changes: 9 additions & 0 deletions ProPublicaCongressAPI/Contracts/CosponsorBillType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace ProPublicaCongressAPI.Contracts
{
public enum CosponsorBillType
{
Unknown,
Cosponsored,
Withdrawn
}
}
30 changes: 30 additions & 0 deletions ProPublicaCongressAPI/Contracts/MemberBillCosponsored.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using Newtonsoft.Json;
using System;

namespace ProPublicaCongressAPI.Contracts
{
public class MemberBillCosponsored
{
public int Congress { get; set; }

public string Number { get; set; }

public string BillDetailUrl { get; set; }

public string Title { get; set; }

public DateTime DateCosponsored { get; set; }

public string SponsorMemberId { get; set; }

public DateTime DateIntroduced { get; set; }

public int CosponsorCount { get; set; }

public string PrimarySubject { get; set; }

public DateTime DateLastMajorAction { get; set; }

public string LastMajorAction { get; set; }
}
}
20 changes: 20 additions & 0 deletions ProPublicaCongressAPI/Contracts/MemberBillsCosponsoredContainer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using Newtonsoft.Json;
using System.Collections.Generic;

namespace ProPublicaCongressAPI.Contracts
{
public class MemberBillsCosponsoredContainer
{
public string MemberId { get; set; }

public string MemberDetailUrl { get; set; }

public string MemberName { get; set; }

public int NumberOfResults { get; set; }

public int Offset { get; set; }

public IReadOnlyCollection<MemberBillCosponsored> Bills { get; set; }
}
}
41 changes: 41 additions & 0 deletions ProPublicaCongressAPI/InternalModels/MemberBillCosponsored.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using Newtonsoft.Json;
using System;

namespace ProPublicaCongressAPI.InternalModels
{
internal class MemberBillCosponsored
{
[JsonProperty("congress")]
public int Congress { get; set; }

[JsonProperty("number")]
public string Number { get; set; }

[JsonProperty("bill_uri")]
public string BillDetailUrl { get; set; }

[JsonProperty("title")]
public string Title { get; set; }

[JsonProperty("cosponsored_date")]
public DateTime DateCosponsored { get; set; }

[JsonProperty("sponsor_id")]
public string SponsorMemberId { get; set; }

[JsonProperty("introduced_date")]
public DateTime DateIntroduced { get; set; }

[JsonProperty("cosponsors")]
public int CosponsorCount { get; set; }

[JsonProperty("primary_subject")]
public string PrimarySubject { get; set; }

[JsonProperty("latest_major_action_date")]
public DateTime DateLastMajorAction { get; set; }

[JsonProperty("latest_major_action")]
public string LastMajorAction { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using Newtonsoft.Json;
using System.Collections.Generic;

namespace ProPublicaCongressAPI.InternalModels
{
internal class MemberBillsCosponsoredContainer
{
[JsonProperty("id")]
public string MemberId { get; set; }

[JsonProperty("member_uri")]
public string MemberDetailUrl { get; set; }

[JsonProperty("name")]
public string MemberName { get; set; }

[JsonProperty("num_results")]
public int NumberOfResults { get; set; }

[JsonProperty("offset")]
public int Offset { get; set; }

[JsonProperty("bills")]
public IReadOnlyCollection<MemberBillCosponsored> Bills { get; set; }
}
}
5 changes: 5 additions & 0 deletions ProPublicaCongressAPI/ProPublicaCongressAPI.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,10 @@
<ItemGroup>
<Compile Include="AutoMapperConfiguration.cs" />
<Compile Include="Contracts\Chamber.cs" />
<Compile Include="Contracts\CosponsorBillType.cs" />
<Compile Include="Contracts\CurrentMember.cs" />
<Compile Include="Contracts\MemberBillCosponsored.cs" />
<Compile Include="Contracts\MemberBillsCosponsoredContainer.cs" />
<Compile Include="Contracts\MemberBillSponsorshipComparison.cs" />
<Compile Include="Contracts\MemberBillSponsorshipComparisonContainer.cs" />
<Compile Include="Contracts\MemberVote.cs" />
Expand All @@ -56,6 +59,8 @@
<Compile Include="Contracts\NewMember.cs" />
<Compile Include="Contracts\NewMembersContainer.cs" />
<Compile Include="InternalModels\CurrentMember.cs" />
<Compile Include="InternalModels\MemberBillCosponsored.cs" />
<Compile Include="InternalModels\MemberBillsCosponsoredContainer.cs" />
<Compile Include="InternalModels\MemberBillSponsorshipComparison.cs" />
<Compile Include="InternalModels\MemberBillSponsorshipComparisonContainer.cs" />
<Compile Include="InternalModels\MemberVote.cs" />
Expand Down
25 changes: 20 additions & 5 deletions ProPublicaCongressAPI/ProPublicaCongressApiClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
using System.Diagnostics;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace ProPublicaCongressAPI
Expand All @@ -23,7 +22,7 @@ public class ProPublicaCongressApiClient
private const string memberVotesUrl = "v1/members/{0}/votes.json"; // 0 = member-id
private const string compareMemberVotesUrl = "v1/members/{0}/votes/{1}/{2}/{3}.json"; // 0 = first-member-id, 1 = second-member-id, 2 = congress, 3 = chamber
private const string compareMemberBillSponsorshipsUrl = "v1/members/{0}/bills/{1}/{2}/{3}.json"; // 0 = first-member-id, 1 = second-member-id, 2 = congress, 3 = chamber
private const string memberCosponsoredBillsUrl = "v1/members/{0}/bills/{type}.json"; // 0 = member-id, 1 = type
private const string memberCosponsoredBillsUrl = "v1/members/{0}/bills/{1}.json"; // 0 = member-id, 1 = type
private const string voteRollCallUrl = "v1/{0}/{1}/sessions/{2}/votes/{3}.json"; // 0 = congress, 1 = chamber, 2 = session-number, 3 = roll-call-number
private const string votesByTypeUrl = "v1/{0}/{1}/votes/{2}.json"; // 0 = congress, 1 = chamber, 2 = vote-type
private const string votesByDateUrl = "v1/{0}/votes/{1}/{2}.json"; // 0 = chamber, 1 = year, 2 = month
Expand All @@ -45,6 +44,22 @@ public ProPublicaCongressApiClient(string apiKey)
AutoMapperConfiguration.Initialize();
}

public async Task<Contracts.MemberBillsCosponsoredContainer> GetBillsCosponsoredByMember(string memberId, CosponsorBillType type)
{
if (String.IsNullOrWhiteSpace(memberId))
{
throw new ArgumentNullException("memberId", "Member ID is required.");
}

string url = apiBaseUrl + String.Format(memberCosponsoredBillsUrl, memberId, type.ToString().ToLower());

var contract = await GetAndMapSingleDataAsync<
InternalModels.MemberBillsCosponsoredContainer,
Contracts.MemberBillsCosponsoredContainer>(url);

return contract;
}

public async Task<Contracts.MemberBillSponsorshipComparisonContainer> CompareMemberBillSponsorships(string firstMemberId, string secondMemberId, int congress, Chamber chamber)
{
if (String.IsNullOrWhiteSpace(firstMemberId))
Expand Down Expand Up @@ -84,7 +99,7 @@ public async Task<IReadOnlyCollection<MemberVoteComparison>> CompareMemberVotes(

return contract;
}

public async Task<Contracts.MemberVotesContainer> GetMemberVotesAsync(string memberId)
{
if (String.IsNullOrWhiteSpace(memberId))
Expand All @@ -95,7 +110,7 @@ public async Task<IReadOnlyCollection<MemberVoteComparison>> CompareMemberVotes(
string url = apiBaseUrl + String.Format(memberVotesUrl, memberId);

var contract = await GetAndMapSingleDataAsync<InternalModels.MemberVotesContainer, Contracts.MemberVotesContainer>(url);

return contract;
}

Expand Down Expand Up @@ -233,4 +248,4 @@ private async Task<ApiResponse<T>> GetDataAsync<T>(string url)
return resultInterface;
}
}
}
}

0 comments on commit 4480a11

Please sign in to comment.