Commits

lfoust  committed 3572fc4

Cleaned up Users

  • Participants
  • Parent commits cc0be65
  • Branches V2.0

Comments (0)

Files changed (18)

File trunk/source/Stacky.Net35/Stacky.Net35.csproj

     <Compile Include="..\Stacky\Entities\MigrationInfo.cs">
       <Link>Entities\MigrationInfo.cs</Link>
     </Compile>
+    <Compile Include="..\Stacky\Entities\NetworkUser.cs">
+      <Link>NetworkUser.cs</Link>
+    </Compile>
     <Compile Include="..\Stacky\Entities\PostEvent.cs">
       <Link>Entities\PostEvent.cs</Link>
     </Compile>
     <Compile Include="..\Stacky\Entities\Revision.cs">
       <Link>Entities\Revision.cs</Link>
     </Compile>
+    <Compile Include="..\Stacky\Entities\ShallowUser.cs">
+      <Link>ShallowUser.cs</Link>
+    </Compile>
     <Compile Include="..\Stacky\Entities\Site.cs">
       <Link>Entities\Site.cs</Link>
     </Compile>
     <Compile Include="..\Stacky\Entities\UserEvent.cs">
       <Link>Entities\UserEvent.cs</Link>
     </Compile>
-    <Compile Include="..\Stacky\Entities\UserInfo.cs">
-      <Link>Entities\UserInfo.cs</Link>
-    </Compile>
     <Compile Include="..\Stacky\Enums\AnswerSort.cs">
       <Link>Enums\AnswerSort.cs</Link>
     </Compile>
     <Compile Include="..\Stacky\Enums\UserSort.cs">
       <Link>Enums\UserSort.cs</Link>
     </Compile>
+    <Compile Include="..\Stacky\Enums\UserType.cs">
+      <Link>Enums\UserType.cs</Link>
+    </Compile>
     <Compile Include="..\Stacky\ErrorResponse.cs">
       <Link>ErrorResponse.cs</Link>
     </Compile>

File trunk/source/Stacky.Silverlight/Stacky.Silverlight.csproj

     <Compile Include="..\Stacky\Entities\MigrationInfo.cs">
       <Link>Entities\MigrationInfo.cs</Link>
     </Compile>
+    <Compile Include="..\Stacky\Entities\NetworkUser.cs">
+      <Link>NetworkUser.cs</Link>
+    </Compile>
     <Compile Include="..\Stacky\Entities\PostEvent.cs">
       <Link>Entities\PostEvent.cs</Link>
     </Compile>
     <Compile Include="..\Stacky\Entities\Revision.cs">
       <Link>Entities\Revision.cs</Link>
     </Compile>
+    <Compile Include="..\Stacky\Entities\ShallowUser.cs">
+      <Link>ShallowUser.cs</Link>
+    </Compile>
     <Compile Include="..\Stacky\Entities\Site.cs">
       <Link>Entities\Site.cs</Link>
     </Compile>
     <Compile Include="..\Stacky\Entities\UserEvent.cs">
       <Link>Entities\UserEvent.cs</Link>
     </Compile>
-    <Compile Include="..\Stacky\Entities\UserInfo.cs">
-      <Link>Entities\UserInfo.cs</Link>
-    </Compile>
     <Compile Include="..\Stacky\Enums\AnswerSort.cs">
       <Link>Enums\AnswerSort.cs</Link>
     </Compile>
     <Compile Include="..\Stacky\Enums\UserSort.cs">
       <Link>Enums\UserSort.cs</Link>
     </Compile>
+    <Compile Include="..\Stacky\Enums\UserType.cs">
+      <Link>Enums\UserType.cs</Link>
+    </Compile>
     <Compile Include="..\Stacky\ErrorResponse.cs">
       <Link>ErrorResponse.cs</Link>
     </Compile>

File trunk/source/Stacky.WindowsPhone/Stacky.WindowsPhone.csproj

     <Compile Include="..\Stacky\Entities\MigrationInfo.cs">
       <Link>Entities\MigrationInfo.cs</Link>
     </Compile>
+    <Compile Include="..\Stacky\Entities\NetworkUser.cs">
+      <Link>NetworkUser.cs</Link>
+    </Compile>
     <Compile Include="..\Stacky\Entities\PostEvent.cs">
       <Link>Entities\PostEvent.cs</Link>
     </Compile>
     <Compile Include="..\Stacky\Entities\Revision.cs">
       <Link>Entities\Revision.cs</Link>
     </Compile>
+    <Compile Include="..\Stacky\Entities\ShallowUser.cs">
+      <Link>ShallowUser.cs</Link>
+    </Compile>
     <Compile Include="..\Stacky\Entities\Site.cs">
       <Link>Entities\Site.cs</Link>
     </Compile>
     <Compile Include="..\Stacky\Entities\UserEvent.cs">
       <Link>Entities\UserEvent.cs</Link>
     </Compile>
-    <Compile Include="..\Stacky\Entities\UserInfo.cs">
-      <Link>Entities\UserInfo.cs</Link>
-    </Compile>
     <Compile Include="..\Stacky\Enums\AnswerSort.cs">
       <Link>Enums\AnswerSort.cs</Link>
     </Compile>
     <Compile Include="..\Stacky\Enums\UserSort.cs">
       <Link>Enums\UserSort.cs</Link>
     </Compile>
+    <Compile Include="..\Stacky\Enums\UserType.cs">
+      <Link>Enums\UserType.cs</Link>
+    </Compile>
     <Compile Include="..\Stacky\ErrorResponse.cs">
       <Link>ErrorResponse.cs</Link>
     </Compile>

File trunk/source/Stacky/Entities/Badge.cs

         private string name;
         private string description;
         private int awardCount;
-        private bool isTagBased;
-        private string badgeRecipientsUrl;
+        private BadgeType type;
+        private string link;
+        private ShallowUser user;
 
         /// <summary>
         /// Gets or sets the id.
             set { awardCount = value; NotifyOfPropertyChange(() => AwardCount); }
         }
 
-        /// <summary>
-        /// Gets or sets whether or not this <see cref="Badge"/> is tag based or not.
-        /// </summary>
-        [JsonProperty("tag_based")]
-        public bool IsTagBased
+        [JsonProperty("badge_type")]
+        public BadgeType Type
         {
-            get { return isTagBased; }
-            set { isTagBased = value; NotifyOfPropertyChange(() => IsTagBased); }
+            get { return type; }
+            set { type = value; NotifyOfPropertyChange(() => Type); }
         }
 
-        /// <summary>
-        /// Gets or sets the url link to the badge recipients.
-        /// </summary>
-        [JsonProperty("badges_recipients_url")]
-        public string BadgeRecipientsUrl
+        [JsonProperty("link")]
+        public string Link
         {
-            get { return badgeRecipientsUrl; }
-            set { badgeRecipientsUrl = value; NotifyOfPropertyChange(() => BadgeRecipientsUrl); }
+            get { return link; }
+            set { link = value; NotifyOfPropertyChange(() => Link); }
         }
     }
 }

File trunk/source/Stacky/Entities/NetworkUser.cs

+namespace Stacky.Entities
+{
+    using System;
+    using Newtonsoft.Json;
+
+    public class NetworkUser : Entity
+    {
+        #region Fields
+
+        private string siteName;
+        private string siteHost;
+        private int id;
+        private int reputation;
+        private int accountId;
+        private DateTime creationDate;
+        private UserType type;
+        private BadgeCounts badgeCounts = new BadgeCounts();
+
+        #endregion
+
+        [JsonProperty("site_name")]
+        public string SiteName
+        {
+            get { return siteName; }
+            set { siteName = value; NotifyOfPropertyChange(() => SiteName); }
+        }
+
+        [JsonProperty("site_host")]
+        public string SiteHost
+        {
+            get { return siteHost; }
+            set { siteHost = value; NotifyOfPropertyChange(() => SiteHost); }
+        }
+
+        [JsonProperty("user_id")]
+        public int Id
+        {
+            get { return id; }
+            set { id = value; NotifyOfPropertyChange(() => Id); }
+        }
+
+        [JsonProperty("reputation")]
+        public int Reputation
+        {
+            get { return reputation; }
+            set { reputation = value; NotifyOfPropertyChange(() => Reputation); }
+        }
+
+        [JsonProperty("user_type"), JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
+        public UserType Type
+        {
+            get { return type; }
+            set { type = value; NotifyOfPropertyChange(() => Type); }
+        }
+
+        [JsonProperty("creation_date"), JsonConverter(typeof(UnixDateTimeConverter))]
+        public DateTime CreationDate
+        {
+            get { return creationDate; }
+            set { creationDate = value; NotifyOfPropertyChange(() => CreationDate); }
+        }
+
+        [JsonProperty("badge_counts")]
+        public BadgeCounts BadgeCounts
+        {
+            get { return badgeCounts; }
+            set { badgeCounts = value; NotifyOfPropertyChange(() => BadgeCounts); }
+        }
+    }
+}

File trunk/source/Stacky/Entities/Question.cs

         private string timelineUrl;
         private string commentsUrl;
         private MigrationInfo migrated;
-        private UserInfo owner;
+        private ShallowUser owner;
 
         #endregion
 
         }
 
         /// <summary>
-        /// Gets or sets the <see cref="UserInfo">owner</see>.
+        /// Gets or sets the <see cref="ShallowUser">owner</see>.
         /// </summary>
-        /// <value>The <see cref="UserInfo">owner</see>.</value>
-        public UserInfo Owner
+        /// <value>The <see cref="ShallowUser">owner</see>.</value>
+        public ShallowUser Owner
         {
             get { return owner; }
             set { owner = value; NotifyOfPropertyChange(() => Owner); }

File trunk/source/Stacky/Entities/ShallowUser.cs

+namespace Stacky
+{
+    using System;
+    using Newtonsoft.Json;
+
+    public class ShallowUser : Entity
+    {
+        #region Fields
+
+        private int id;
+        private string displayName;
+        private int reputation;
+        private UserType type;
+        private string link;
+        private string profileImage;
+
+        #endregion
+
+        [JsonProperty("user_id")]
+        public int Id
+        {
+            get { return id; }
+            set { id = value; NotifyOfPropertyChange(() => Id); }
+        }
+
+        [JsonProperty("display_name")]
+        public string DisplayName
+        {
+            get { return displayName; }
+            set { displayName = value; NotifyOfPropertyChange(() => DisplayName); }
+        }
+
+        [JsonProperty("reputation")]
+        public int Reputation
+        {
+            get { return reputation; }
+            set { reputation = value; NotifyOfPropertyChange(() => Reputation); }
+        }
+
+        [JsonProperty("user_type"), JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
+        public UserType Type
+        {
+            get { return type; }
+            set { type = value; NotifyOfPropertyChange(() => Type); }
+        }
+
+        [JsonProperty("link")]
+        public string Link
+        {
+            get { return link; }
+            set { link = value; NotifyOfPropertyChange(() => Link); }
+        }
+
+        [JsonProperty("profile_image")]
+        public string ProfileImage
+        {
+            get { return profileImage; }
+            set { profileImage = value; NotifyOfPropertyChange(() => ProfileImage); }
+        }
+    }
+}

File trunk/source/Stacky/Entities/TagWiki.cs

         private string wikiExcerpt;
         private DateTime bodyLastEditDate;
         private DateTime excerptLastEditDate;
-        private UserInfo lastBodyEditor;
-        private UserInfo lastExcerptEditor;
+        private ShallowUser lastBodyEditor;
+        private ShallowUser lastExcerptEditor;
 
         [JsonProperty("tag_name")]
         public string TagName
         }
 
         [JsonProperty("last_excerpt_editor")]
-        public UserInfo LastExcerptEditor
+        public ShallowUser LastExcerptEditor
         {
             get { return lastExcerptEditor; }
             set { lastExcerptEditor = value; NotifyOfPropertyChange(() => LastExcerptEditor); }
         }
 
         [JsonProperty("last_body_editor")]
-        public UserInfo LastBodyEditor
+        public ShallowUser LastBodyEditor
         {
             get { return lastBodyEditor; }
             set { lastBodyEditor = value; NotifyOfPropertyChange(() => LastBodyEditor); }

File trunk/source/Stacky/Entities/TopUser.cs

 {
     public class TopUser : Entity
     {
-        private UserInfo user;
+        private ShallowUser user;
         private int score;
         private int postCount;
 
         [JsonProperty("user")]
-        public UserInfo User
+        public ShallowUser User
         {
             get { return user; }
             set { user = value; NotifyOfPropertyChange(() => User); }

File trunk/source/Stacky/Entities/User.cs

-using System;
-using Newtonsoft.Json;
+namespace Stacky
+{
+    using System;
+    using Newtonsoft.Json;
 
-namespace Stacky
-{
-    /// <summary>
-    /// Represents a user.
-    /// </summary>
-    public class User : Entity
+    public class User : ShallowUser
     {
+        #region Fields
+
         private BadgeCounts badgeCounts = new BadgeCounts();
-        private int id;
-        private UserType type;
-        private string displayName;
-        private DateTime creationDate;
-        private int reputation;
-        private string emailHash;
         private int? age;
         private string website;
         private DateTime lastAccessDate;
-        private string webSite;
         private string location;
         private string aboutMe;
         private int questionCount;
         private int viewCount;
         private int upVotes;
         private int downVotes;
-        private int? acceptRate;
-        private Guid associationId;
-        private string questionsUrl;
-        private string answersUrl;
-        private string favoritesUrl;
-        private string tagsUrl;
-        private string badgesUrl;
-        private string timelineUrl;
-        private string mentionedUrl;
-        private string commentsUrl;
-        private string reputationUrl;
+        private int reputationChangeDay;
+        private int reputationChangeWeek;
+        private int reputationChangeMonth;
+        private int reputationChangeQuarter;
+        private int reputationChangeYear;
+        private bool isEmployee;
+        private int accountId;
+        private DateTime timedPenaltyDate;
+        private DateTime creationDate;
 
-        /// <summary>
-        /// Gets or sets the user id.
-        /// </summary>
-        /// <value>The user id.</value>
-        [JsonProperty("user_id")]
-        public int Id
-        {
-            get { return id; }
-            set { id = value; NotifyOfPropertyChange(() => Id); }
-        }
+        #endregion
 
-        /// <summary>
-        /// Gets or sets the <see cref="UserType"/>.
-        /// </summary>
-        /// <value>The <see cref="UserType"/>.</value>
-        [JsonProperty("user_type"), JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
-        public UserType Type
-        {
-            get { return type; }
-            set { type = value; NotifyOfPropertyChange(() => Type); }
-        }
+        [JsonProperty("reputation_change_day")]
+		public int ReputationChangeDay
+		{
+			get { return reputationChangeDay; }
+			set { reputationChangeDay = value; NotifyOfPropertyChange(() => ReputationChangeDay); }
+		}
 
-        /// <summary>
-        /// Gets or sets the display name.
-        /// </summary>
-        /// <value>The display name.</value>
-        [JsonProperty("display_name")]
-        public string DisplayName
-        {
-            get { return displayName; }
-            set { displayName = value; NotifyOfPropertyChange(() => DisplayName); }
-        }
+		[JsonProperty("reputation_change_week")]
+		public int ReputationChangeWeek
+		{
+			get { return reputationChangeWeek; }
+			set { reputationChangeWeek = value; NotifyOfPropertyChange(() => ReputationChangeWeek); }
+		}
 
-        /// <summary>
-        /// Gets or sets the creation date.
-        /// </summary>
-        /// <value>The creation date.</value>
+		[JsonProperty("reputation_change_month")]
+		public int ReputationChangeMonth
+		{
+			get { return reputationChangeMonth; }
+			set { reputationChangeMonth = value; NotifyOfPropertyChange(() => ReputationChangeMonth); }
+		}
+
+		[JsonProperty("reputation_change_quarter")]
+		public int ReputationChangeQuarter
+		{
+			get { return reputationChangeQuarter; }
+			set { reputationChangeQuarter = value; NotifyOfPropertyChange(() => ReputationChangeQuarter); }
+		}
+
+		[JsonProperty("reputation_change_year")]
+		public int ReputationChangeYear
+		{
+			get { return reputationChangeYear; }
+			set { reputationChangeYear = value; NotifyOfPropertyChange(() => ReputationChangeYear); }
+		}
+
+		/// <summary>
+		/// Gets or sets the age.
+		/// </summary>
+		/// <value>The age.</value>
+		[JsonProperty("age")]
+		public int? Age
+		{
+			get { return age; }
+			set { age = value; NotifyOfPropertyChange(() => Age); }
+		}
+
+		/// <summary>
+		/// Gets or sets the website.
+		/// </summary>
+		/// <value>The website.</value>
+		[JsonProperty("website_url")]
+		public string Website
+		{
+			get { return website; }
+			set { website = value; NotifyOfPropertyChange(() => Website); }
+		}
+
+		/// <summary>
+		/// Gets or sets the last access date.
+		/// </summary>
+		/// <value>The last access date.</value>
+		[JsonProperty("last_access_date"), JsonConverter(typeof(UnixDateTimeConverter))]
+		public DateTime LastAccessDate
+		{
+			get { return lastAccessDate; }
+			set { lastAccessDate = value; NotifyOfPropertyChange(() => LastAccessDate); }
+		}
+
         [JsonProperty("creation_date"), JsonConverter(typeof(UnixDateTimeConverter))]
         public DateTime CreationDate
         {
             set { creationDate = value; NotifyOfPropertyChange(() => CreationDate); }
         }
 
-        /// <summary>
-        /// Gets or sets the reputation.
-        /// </summary>
-        /// <value>The reputation.</value>
-        [JsonProperty("reputation")]
-        public int Reputation
-        {
-            get { return reputation; }
-            set { reputation = value; NotifyOfPropertyChange(() => Reputation); }
-        }
+		/// <summary>
+		/// Gets or sets the location.
+		/// </summary>
+		/// <value>The location.</value>
+		[JsonProperty("location")]
+		public string Location
+		{
+			get { return location; }
+			set { location = value; NotifyOfPropertyChange(() => Location); }
+		}
 
-        /// <summary>
-        /// Gets or sets the email hash.
-        /// </summary>
-        /// <value>The email hash.</value>
-        [JsonProperty("email_hash")]
-        public string EmailHash
-        {
-            get { return emailHash; }
-            set { emailHash = value; NotifyOfPropertyChange(() => EmailHash); NotifyOfPropertyChange(() => GravatarUrl); }
-        }
+		/// <summary>
+		/// Gets or sets the about me.
+		/// </summary>
+		/// <value>The about me.</value>
+		[JsonProperty("about_me")]
+		public string AboutMe
+		{
+			get { return aboutMe; }
+			set { aboutMe = value; NotifyOfPropertyChange(() => AboutMe); }
+		}
 
-        /// <summary>
-        /// Gets the gravatar URL.
-        /// </summary>
-        /// <value>The gravatar URL.</value>
-        public string GravatarUrl { get { return String.Format("http://www.gravatar.com/avatar/{0}?d=identicon&r=PG", EmailHash); } }
+		/// <summary>
+		/// Gets or sets the answer count.
+		/// </summary>
+		/// <value>The answer count.</value>
+		[JsonProperty("answer_count")]
+		public int AnswerCount
+		{
+			get { return answerCount; }
+			set { answerCount = value; NotifyOfPropertyChange(() => AnswerCount); }
+		}
 
-        /// <summary>
-        /// Gets or sets the age.
-        /// </summary>
-        /// <value>The age.</value>
-        [JsonProperty("age")]
-        public int? Age
-        {
-            get { return age; }
-            set { age = value; NotifyOfPropertyChange(() => Age); }
-        }
+		/// <summary>
+		/// Gets or sets the view count.
+		/// </summary>
+		/// <value>The view count.</value>
+		[JsonProperty("view_count")]
+		public int ViewCount
+		{
+			get { return viewCount; }
+			set { viewCount = value; NotifyOfPropertyChange(() => ViewCount); }
+		}
 
-        /// <summary>
-        /// Gets or sets the last access date.
-        /// </summary>
-        /// <value>The last access date.</value>
-        [JsonProperty("last_access_date"), JsonConverter(typeof(UnixDateTimeConverter))]
-        public DateTime LastAccessDate
-        {
-            get { return lastAccessDate; }
-            set { lastAccessDate = value; NotifyOfPropertyChange(() => LastAccessDate); }
-        }
+		/// <summary>
+		/// Gets or sets up votes.
+		/// </summary>
+		/// <value>Up votes.</value>
+		[JsonProperty("up_vote_count")]
+		public int UpVotes
+		{
+			get { return upVotes; }
+			set { upVotes = value; NotifyOfPropertyChange(() => UpVotes); }
+		}
 
-        /// <summary>
-        /// Gets or sets the website.
-        /// </summary>
-        /// <value>The website.</value>
-        [JsonProperty("website_url")]
-        public string Website
-        {
-            get { return website; }
-            set { website = value; NotifyOfPropertyChange(() => Website); }
-        }
+		/// <summary>
+		/// Gets or sets down votes.
+		/// </summary>
+		/// <value>Down votes.</value>
+		[JsonProperty("down_vote_count")]
+		public int DownVotes
+		{
+			get { return downVotes; }
+			set { downVotes = value; NotifyOfPropertyChange(() => DownVotes); }
+		}
 
-        /// <summary>
-        /// Gets or sets the location.
-        /// </summary>
-        /// <value>The location.</value>
-        [JsonProperty("location")]
-        public string Location
-        {
-            get { return location; }
-            set { location = value; NotifyOfPropertyChange(() => Location); }
-        }
+		/// <summary>
+		/// Gets or sets the question count.
+		/// </summary>
+		/// <value>The question count.</value>
+		[JsonProperty("is_employee")]
+		public bool IsEmployee
+		{
+			get { return isEmployee; }
+			set { isEmployee = value; NotifyOfPropertyChange(() => IsEmployee); }
+		}
 
-        /// <summary>
-        /// Gets or sets the about me.
-        /// </summary>
-        /// <value>The about me.</value>
-        [JsonProperty("about_me")]
-        public string AboutMe
-        {
-            get { return aboutMe; }
-            set { aboutMe = value; NotifyOfPropertyChange(() => AboutMe); }
-        }
+		[JsonProperty("account_id")]
+		public int AccountId
+		{
+			get { return accountId; }
+			set { accountId = value; NotifyOfPropertyChange(() => AccountId); }
+		}
 
-        /// <summary>
-        /// Gets or sets the question count.
-        /// </summary>
-        /// <value>The question count.</value>
-        [JsonProperty("question_count")]
-        public int QuestionCount
-        {
-            get { return questionCount; }
-            set { questionCount = value; NotifyOfPropertyChange(() => QuestionCount); }
-        }
+		/// <summary>
+		/// Gets or sets the <see cref="BadgeCounts"/>.
+		/// </summary>
+		/// <value>The <see cref="BadgeCounts"/>.</value>
+		[JsonProperty("badge_counts")]
+		public BadgeCounts BadgeCounts
+		{
+			get { return badgeCounts; }
+			set { badgeCounts = value; NotifyOfPropertyChange(() => BadgeCounts); }
+		}
 
-        /// <summary>
-        /// Gets or sets the answer count.
-        /// </summary>
-        /// <value>The answer count.</value>
-        [JsonProperty("answer_count")]
-        public int AnswerCount
-        {
-            get { return answerCount; }
-            set { answerCount = value; NotifyOfPropertyChange(() => AnswerCount); }
-        }
+		[JsonProperty("question_count")]
+		public int QuestionCount
+		{
+			get { return questionCount; }
+			set { questionCount = value; NotifyOfPropertyChange(() => QuestionCount); }
+		}
 
-        /// <summary>
-        /// Gets or sets the view count.
-        /// </summary>
-        /// <value>The view count.</value>
-        [JsonProperty("view_count")]
-        public int ViewCount
-        {
-            get { return viewCount; }
-            set { viewCount = value; NotifyOfPropertyChange(() => ViewCount); }
-        }
-
-        /// <summary>
-        /// Gets or sets up votes.
-        /// </summary>
-        /// <value>Up votes.</value>
-        [JsonProperty("up_vote_count")]
-        public int UpVotes
-        {
-            get { return upVotes; }
-            set { upVotes = value; NotifyOfPropertyChange(() => UpVotes); }
-        }
-
-        /// <summary>
-        /// Gets or sets down votes.
-        /// </summary>
-        /// <value>Down votes.</value>
-        [JsonProperty("down_vote_count")]
-        public int DownVotes
-        {
-            get { return downVotes; }
-            set { downVotes = value; NotifyOfPropertyChange(() => DownVotes); }
-        }
-
-        /// <summary>
-        /// Gets or sets the accept rate.
-        /// </summary>
-        /// <value>The accept rate.</value>
-        [JsonProperty("accept_rate")]
-        public int? AcceptRate
-        {
-            get { return acceptRate; }
-            set { acceptRate = value; NotifyOfPropertyChange(() => AcceptRate); }
-        }
-
-        /// <summary>
-        /// Gets or sets the <see cref="BadgeCounts"/>.
-        /// </summary>
-        /// <value>The <see cref="BadgeCounts"/>.</value>
-        [JsonProperty("badge_counts")]
-        public BadgeCounts BadgeCounts
-        {
-            get { return badgeCounts; }
-            set { badgeCounts = value; NotifyOfPropertyChange(() => BadgeCounts); }
-        }
-
-        /// <summary>
-        /// Gets or sets a global <see cref="System.Guid"/> which identifies
-        /// this user across stack app sites.
-        /// </summary>
-        [JsonProperty("association_id")]
-        public Guid AssociationId
-        {
-            get { return associationId; }
-            set { associationId = value; NotifyOfPropertyChange(() => AssociationId); }
-        }
-
-        /// <summary>
-        /// Gets or sets the questions URL.
-        /// </summary>
-        /// <value>The questions URL.</value>
-        [JsonProperty("user_questions_url")]
-        public string QuestionsUrl
-        {
-            get { return questionsUrl; }
-            set { questionsUrl = value; NotifyOfPropertyChange(() => QuestionsUrl); }
-        }
-
-        /// <summary>
-        /// Gets or sets the answers URL.
-        /// </summary>
-        /// <value>The answers URL.</value>
-        [JsonProperty("user_answers_url")]
-        public string AnswersUrl
-        {
-            get { return answersUrl; }
-            set { answersUrl = value; NotifyOfPropertyChange(() => AnswersUrl); }
-        }
-
-        /// <summary>
-        /// Gets or sets the favorites URL.
-        /// </summary>
-        /// <value>The favorites URL.</value>
-        [JsonProperty("user_favorites_url")]
-        public string FavoritesUrl
-        {
-            get { return favoritesUrl; }
-            set { favoritesUrl = value; NotifyOfPropertyChange(() => FavoritesUrl); }
-        }
-
-        /// <summary>
-        /// Gets or sets the tags URL.
-        /// </summary>
-        /// <value>The tags URL.</value>
-        [JsonProperty("user_tags_url")]
-        public string TagsUrl
-        {
-            get { return tagsUrl; }
-            set { tagsUrl = value; NotifyOfPropertyChange(() => TagsUrl); }
-        }
-
-        /// <summary>
-        /// Gets or sets the badges URL.
-        /// </summary>
-        /// <value>The badges URL.</value>
-        [JsonProperty("user_badges_url")]
-        public string BadgesUrl
-        {
-            get { return badgesUrl; }
-            set { badgesUrl = value; NotifyOfPropertyChange(() => BadgesUrl); }
-        }
-
-        /// <summary>
-        /// Gets or sets the timeline URL.
-        /// </summary>
-        /// <value>The timeline URL.</value>
-        [JsonProperty("user_timeline_url")]
-        public string TimelineUrl
-        {
-            get { return timelineUrl; }
-            set { timelineUrl = value; NotifyOfPropertyChange(() => TimelineUrl); }
-        }
-
-        /// <summary>
-        /// Gets or sets the mentioned URL.
-        /// </summary>
-        /// <value>The mentioned URL.</value>
-        [JsonProperty("user_mentioned_url")]
-        public string MentionedUrl
-        {
-            get { return mentionedUrl; }
-            set { mentionedUrl = value; NotifyOfPropertyChange(() => MentionedUrl); }
-        }
-
-        /// <summary>
-        /// Gets or sets the comments URL.
-        /// </summary>
-        /// <value>The comments URL.</value>
-        [JsonProperty("user_comments_url")]
-        public string CommentsUrl
-        {
-            get { return commentsUrl; }
-            set { commentsUrl = value; NotifyOfPropertyChange(() => CommentsUrl); }
-        }
-
-        /// <summary>
-        /// Gets or sets the reputation URL.
-        /// </summary>
-        /// <value>The reputation URL.</value>
-        [JsonProperty("user_reputation_url")]
-        public string ReputationUrl
-        {
-            get { return reputationUrl; }
-            set { reputationUrl = value; NotifyOfPropertyChange(() => ReputationUrl); }
-        }
-    }
-
-    /// <summary>
-    /// Specifies the user type.
-    /// </summary>
-    public enum UserType
-    {
-        /// <summary>
-        /// Anonymous user.
-        /// </summary>
-        Anonymous,
-        /// <summary>
-        /// Unregistered user.
-        /// </summary>
-        Unregistered,
-        /// <summary>
-        /// Registered user.
-        /// </summary>
-        Registered,
-        /// <summary>
-        /// Moderator user.
-        /// </summary>
-        Moderator
+		[JsonProperty("timed_penalty_date")]
+		public DateTime TimedPenaltyDate
+		{
+			get { return timedPenaltyDate; }
+			set { timedPenaltyDate = value; NotifyOfPropertyChange(() => TimedPenaltyDate); }
+		}
     }
 }

File trunk/source/Stacky/Entities/UserInfo.cs

-using System;
-using Newtonsoft.Json;
-
-namespace Stacky
-{
-    /// <summary>
-    /// Represents user information.
-    /// </summary>
-    public class UserInfo : Entity
-    {
-        private int? userId;
-        private UserType type;
-        private string displayName;
-        private int? reputation;
-        private string emailHash;
-
-        /// <summary>
-        /// Gets or sets the user id.
-        /// </summary>
-        /// <value>The user id.</value>
-        [JsonProperty("user_id")]
-        public int? UserId
-        {
-            get { return userId; }
-            set { userId = value; NotifyOfPropertyChange(() => UserId); }
-        }
-
-        /// <summary>
-        /// Gets or sets the <see cref="UserType"/>.
-        /// </summary>
-        /// <value>The <see cref="UserType"/>.</value>
-        [JsonProperty("user_type"), JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
-        public UserType Type
-        {
-            get { return type; }
-            set { type = value; NotifyOfPropertyChange(() => Type); }
-        }
-
-        /// <summary>
-        /// Gets or sets the display name.
-        /// </summary>
-        /// <value>The display name.</value>
-        [JsonProperty("display_name")]
-        public string DisplayName
-        {
-            get { return displayName; }
-            set { displayName = value; NotifyOfPropertyChange(() => DisplayName); }
-        }
-
-        /// <summary>
-        /// Gets or sets the reputation.
-        /// </summary>
-        /// <value>The reputation.</value>
-        [JsonProperty("reputation")]
-        public int? Reputation
-        {
-            get { return reputation; }
-            set { reputation = value; NotifyOfPropertyChange(() => Reputation); }
-        }
-
-        /// <summary>
-        /// Gets or sets the email hash.
-        /// </summary>
-        /// <value>The email hash.</value>
-        [JsonProperty("email_hash")]
-        public string EmailHash
-        {
-            get { return emailHash; }
-            set { emailHash = value; NotifyOfPropertyChange(() => EmailHash); NotifyOfPropertyChange(() => GravatarUrl); }
-        }
-
-        /// <summary>
-        /// Gets the gravatar URL.
-        /// </summary>
-        /// <value>The gravatar URL.</value>
-        public string GravatarUrl { get { return String.Format("http://www.gravatar.com/avatar/{0}?d=identicon&r=PG", EmailHash); } }
-    }
-}

File trunk/source/Stacky/Enums/BadgeClass.cs

         /// </summary>
         Bronze
     }
+
+    public enum BadgeType
+    {
+        Named,
+        TagBased
+    }
 }

File trunk/source/Stacky/Enums/UserType.cs

+namespace Stacky
+{
+    /// <summary>
+    /// Specifies the user type.
+    /// </summary>
+    public enum UserType
+    {
+        /// <summary>
+        /// Anonymous user.
+        /// </summary>
+        Anonymous,
+        /// <summary>
+        /// Unregistered user.
+        /// </summary>
+        Unregistered,
+        /// <summary>
+        /// Registered user.
+        /// </summary>
+        Registered,
+        /// <summary>
+        /// Moderator user.
+        /// </summary>
+        Moderator
+    }
+}

File trunk/source/Stacky/Stacky.csproj

     <Compile Include="Entities\Comment.cs" />
     <Compile Include="Entities\Entity.cs" />
     <Compile Include="Entities\MigrationInfo.cs" />
+    <Compile Include="Entities\NetworkUser.cs" />
     <Compile Include="Entities\PostEvent.cs" />
     <Compile Include="Entities\Privilege.cs" />
     <Compile Include="Entities\Question.cs" />
     <Compile Include="Entities\Reputation.cs" />
     <Compile Include="Entities\ResponseError.cs" />
     <Compile Include="Entities\Revision.cs" />
+    <Compile Include="Entities\ShallowUser.cs" />
     <Compile Include="Entities\Site.cs" />
     <Compile Include="Entities\SiteInfo.cs" />
     <Compile Include="Entities\SiteStats.cs" />
     <Compile Include="Entities\TopUser.cs" />
     <Compile Include="Entities\User.cs" />
     <Compile Include="Entities\UserEvent.cs" />
-    <Compile Include="Entities\UserInfo.cs" />
     <Compile Include="Enums\AnswerSort.cs" />
     <Compile Include="Enums\BadgeClass.cs" />
     <Compile Include="Enums\CommentSort.cs" />
     <Compile Include="Enums\UserEventType.cs" />
     <Compile Include="Enums\UserMentionSort.cs" />
     <Compile Include="Enums\UserSort.cs" />
+    <Compile Include="Enums\UserType.cs" />
     <Compile Include="ErrorResponse.cs" />
     <Compile Include="Helpers\DateHelper.cs" />
     <Compile Include="Helpers\EnumHelper.cs" />

File trunk/source/Tests/Stacky.IntegrationTests/QuestionTests.cs

             var question = Client.GetQuestion(2930182);
             Assert.IsNotNull(question);
             Assert.IsNotNull(question.Owner);
-            Assert.IsNotNull(question.Owner.UserId);
+            Assert.IsNotNull(question.Owner.Id);
         }
 
         [TestMethod]

File trunk/source/Tests/Stacky.IntegrationTests/UserTests.cs

         }
 
         [TestMethod]
-        public void User_Contains_Urls()
-        {
-            var user = Client.GetUser(22656);
-
-            Assert.IsNotNull(user);
-            Assert.IsFalse(String.IsNullOrEmpty(user.QuestionsUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.AnswersUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.FavoritesUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.TagsUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.BadgesUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.TimelineUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.MentionedUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.CommentsUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.ReputationUrl));
-        }
-
-        [TestMethod]
         public void GetModerators()
         {
             var users = Client.GetModerators();
         }
 
         [TestMethod]
-        public void UserHasAssociationId()
-        {
-            var user = Client.GetUser(646);
-            Assert.IsNotNull(user);
-
-            Assert.IsNotNull(user.AssociationId);
-            Assert.IsFalse(user.AssociationId == Guid.Empty);
-        }
-
-        [TestMethod]
         public void User_GetNoAnswerQuestions()
         {
             var questions = Client.GetNoAnswerQuestions(238232);

File trunk/source/Tests/Stacky.Net35.IntegrationTests/QuestionTests.cs

             var question = Client.GetQuestion(2930182);
             Assert.IsNotNull(question);
             Assert.IsNotNull(question.Owner);
-            Assert.IsNotNull(question.Owner.UserId);
+            Assert.IsNotNull(question.Owner.Id);
         }
 
         [TestMethod]

File trunk/source/Tests/Stacky.Net35.IntegrationTests/UserTests.cs

         }
 
         [TestMethod]
-        public void User_Contains_Urls()
-        {
-            var user = Client.GetUser(22656);
-
-            Assert.IsNotNull(user);
-            Assert.IsFalse(String.IsNullOrEmpty(user.QuestionsUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.AnswersUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.FavoritesUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.TagsUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.BadgesUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.TimelineUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.MentionedUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.CommentsUrl));
-            Assert.IsFalse(String.IsNullOrEmpty(user.ReputationUrl));
-        }
-
-        [TestMethod]
         public void GetModerators()
         {
             var users = Client.GetModerators();